LoginSignup
0
3

More than 3 years have passed since last update.

[ゼロから作るDeep Learning]Dropoutについて解説してみた

Posted at

はじめに

この記事はゼロから作るディープラーニング 7章学習に関するテクニックを自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。

Dropoutとは

皆さんはアンサンブル学習というものを知っているでしょうか。
アンサンブル学習とは、複数のモデルを使って学習を行うことで、良い学習結果を生み出すことができるものです。
Dropoutでは、そのアンサンブル学習を擬似的に再現することで、学習の結果を向上させています。

具体的にDropoutでは内を行なっているのでしょうか。それは、学習の際にランダムにニューロンを消去するです。
Dropoutでは、ニューロンをランダムで消去することにより、違うモデルを複数作りだしてアンサンブル学習を作り上げています。

下では簡単な実装例を紹介します。

class Dropout:#活性化関数レイヤの後に生成させて、学習が行われるたびに発動させる。predictでは発動させない

    def __init__(self,dropout_ratio=0.5):
        self.dropout_ratio = dropout_ratio
        self.mask = None #消去されるニューロンが記された配列が入る

    def forward(self,x,train_flg=True):
        if train_flg:
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio#ランダムで消去するニューロンを決定する
            return x * self.mask
        else:
            return x * (1 - self.dropout_ratio)

    def backward(self,dout):
        return dout * self.mask#Reluと同じ

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3