今日はドロップアウトという、一見逆説的な正則化手法を扱います。わざとニューロンを休ませることで、なぜ強くなるのか。ましろさん大活躍の回。
ドロップアウトって、わざとニューロンをサボらせるの? それって変じゃない?
逆説的に見えるけれど、これがとても効果的なの。
学習のたびに、ランダムに一定割合のニューロンを無効化 (出力を0に) することで、特定のニューロンに依存しすぎることを防ぐのよ。
2012年にHintonらが提案した手法で、過学習を抑える強力な正則化技術として広まりました。
AlexNetでも使われたことで一気に有名になりました。
ぽわわ、つまり『今日は君お休み、今日は君がんばって』って、毎回シフトを変えるみたいな感じですぅ?
ましろさん、素敵な例えね。
まさにランダムシフトよ。
学習のたびに担当ニューロンが変わるから、どのニューロンも『自分がいなくても大丈夫』とはならず、全員が責任感を持って働くようになるのよ。
チームプロジェクトで、毎回ランダムに誰かを休ませるようなものですね。
残ったメンバーだけでも成果を出せるように、全員がスキルアップしていく、という効果です。
そのとおり。
ドロップアウトにより、ネットワーク全体がロバストになり、一部のニューロンだけに頼らない汎用的な表現を学ぶことができるのよ。
ふぇぇ、でもテスト (推論) のときは、ちゃんと全員に働いてもらうんですよね? 本番は全力でいきますぅ!
そうよ。
推論時にはすべてのニューロンを使うわ。
学習時と推論時で挙動が変わる点が、ドロップアウトの重要な特徴ね。
実装では『学習中はランダムに0にする、推論時は全使用』というモードが自動で切り替わるの。
ドロップアウト率は通常0.2〜0.5程度、Transformer系モデルでは0.1前後が多く、タスクやモデルに応じて調整します。
画像系のCNNでは0.5が定番、時系列のRNNでは0.2前後、というのが経験則ですね。
じゃあ、ドロップアウトをやりすぎたら逆に学習が進まなくなるってこと?
そうね。
多すぎるとモデルの表現力が下がりすぎて、逆に学習が進まなくなってしまうの。
適度なバランスが大事よ。
えへへ、人間もお休みが多すぎるとだらけちゃいますぅ。
近年はバッチ正規化との併用で役割が減ったと言われることもありますが、RNNやTransformerでは依然として重要な技術です。
推論時にもドロップアウトを適用して不確実性を推定する『Monte Carlo Dropout』という応用もあります。
一言で言えば、ドロップアウトは無数の部分ネットワークを同時に学習する『アンサンブル学習の近似』とも解釈できるのです。
一石二鳥どころか一石何鳥って感じだね、コスパすごっ……! 実装もほぼ1行らしいし、深層学習って賢い工夫の積み重ねでできてるんだなぁ。
ぽわわ、ドロップアウトさん、お見事ですぅ!
確認クイズ
ドロップアウトの主な目的はどれか?
- 学習速度の向上
- 過学習の抑制
- パラメータ数の削減
- 勾配消失問題の解決
こたえを見る
正解: 2. 過学習の抑制
ドロップアウトの主目的は過学習の抑制です。ランダムにニューロンを無効化することで特定のパターンへの過度な適応を防ぎ、汎化性能を高めます。学習速度やパラメータ削減が主目的ではありません。