【どろっぷあうと】
ドロップアウト とは?
最終更新:
💡 学習中、一部の値を一時的に使わない
ニューラルネットワークの学習時、一部の値をランダムにゼロにする正則化手法。モデルを削ることとの違いと、学習・推論時の処理を解説します。
📌 このページのポイント
- 学習中に一部のユニットの値をランダムにゼロにする
- 特定の組み合わせへの依存を抑える正則化の方法
- 通常の推論では、このランダムな無効化をしない
- 割合と効果は、検証用データで確かめて決める
ドロップアウトは、モデルの一部を削るの?
ずっと削除するわけではないよ。学習中の計算で、一部のユニットの値をランダムにゼロにする。どれを使わないかを変えながら学習するんだ。
それで、何がよくなる?
どれくらい使わないようにする?
ドロップアウト率で割合を指定する。適した値はモデルやデータで違うので、使わない場合とも比較して、検証用データで確認しよう。単に大きくすればよい数字ではないんだ。
ゼロにした分、値の大きさが変わる?
スケールの調整も考えるよ。KerasのDropoutは学習時、残った値を1÷(1−率)倍にする。重みを全部書き換える説明ではない。通常の推論時は、そのランダムな無効化や同じスケール調整をしないんだ。
本番でも毎回、使わない場所が変わる?
通常は学習モードだけで使うので、推論では無効化を止めるよ。実装の学習・推論モードを確認しよう。ドロップアウトを止めたからといって、他の処理も含めた予測が必ず同一になるとまではいえないんだ。
もっと詳しく知りたい人へ
rateを0.5にしたら、毎回ぴったり半分?
ランダムな無効化の割合を指定するので、小さな入力で毎回ちょうど半分になる保証ではありません。また、マスクを共有する形などは設定によって変わります。
trainable=Falseにすれば、止められる?
KerasのDropoutには、学習で更新する重みがありません。trainableの指定では動作は切り替わらず、trainingによる学習・推論モードで無効化を行うかが変わります。
まとめ:ざっくりこれだけ覚えればOK!
「ドロップアウト」って出てきたら「学習中に一部の値をランダムにゼロにする正則化手法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Dropout」 = 一時的に抜けること
💬 ユニットを学習中の計算からランダムに外す考え方です。Srivastavaらの2014年の論文が、代表的な説明と実験結果を示しています。