ドロップアウト (Dropout) について

Next: AdaGrad

    画像認識のDeep Learningではドロップアウトが常識になっている. 最近自分の研究で試しに実装したので簡単に実装上の注意点を書いてみる (実はほとんど注意点など無いが). まず, ある隠れ層


を仮定する. ここでドロップアウトマスクをかける.


基本的にはこれで全て実装終了である (ちょっと嘘). ここで少しハマった. あれ? gradient checkerが怒っている... 実装ミスは非線形関数の微分のところ (いわゆる``デルタ''の計算) にあった.


正しくは, さらにマスクをかけてあげなければならない.


これでgradient checkerの怒りがおさまった. 実はこのミスに気付かなくても正しく計算が行われてしまう場合があるらしい. 例えば, 非線形関数にロジスティック関数を使った場合,


こんな感じで実装していれば, マスクをかけなくてもしかるべき次元の値が0になってくれる. ところが, 自分のようにtanhを使っていると,


しかるべき次元の値が0にならないのでアウトである.