AI・機械学習
上級

Dropout(ドロップアウト)

訓練時にニューラルネットワークのニューロンをランダムに一定確率で無効化することで、特徴量の共適応を防ぎ汎化性能を向上させる正則化手法。2012年にHintonらが提案し、深層学習の基盤技術となった。LLMではFine-tuning時に主に使用される。

0 回閲覧
0 いいね

Dropoutとは

Dropout は 2012 年に Geoffrey Hinton らによって提案されたニューラルネットワークの正則化手法である。訓練時の各 Forward Pass において、ネットワーク内のニューロンを確率 p でランダムに無効化(出力を 0 に設定)する。これにより、特定のニューロンの組み合わせに依存した特徴表現(共適応)を防ぎ、各ニューロンがより頑健な特徴を学習するよう促す。

推論時にはすべてのニューロンが有効化され、出力に (1 - p) を乗じることで訓練時との期待値を一致させる(Inverted Dropout では訓練時に 1/(1-p) を乗じることで推論時の処理を不要にする)。

Dropoutの数学的定式化

Dropout の動作は以下のように形式化される。

標準的な全結合層の出力は y = f(Wx + b) であるが、Dropout を適用すると以下のようになる。

  1. マスクベクトル m を生成:各要素が確率 (1-p) で 1、確率 p で 0 のベルヌーイ分布に従う
  2. 入力にマスクを適用:x_masked = x ⊙ m(⊙ はアダマール積)
  3. マスクされた入力で出力計算:y = f(W * x_masked + b)

Inverted Dropout(実装上の標準)では:

  • 訓練時:x_masked = (x ⊙ m) / (1 - p)
  • 推論時:y = f(Wx + b)(変更なし)
パラメータ説明典型的な値
p(ドロップ率)ニューロンを無効化する確率0.1〜0.5
1-p(保持率)ニューロンを有効に保つ確率0.5〜0.9
スケーリング係数1/(1-p)、期待値一致のため1.11〜2.0

Transformer における Dropout の適用箇所

Transformer アーキテクチャでは、Dropout は以下の複数箇所に適用される。

適用箇所説明効果
Attention DropoutSoftmax 後の Attention 重みに適用Attention パターンの多様化
Residual Dropout残差接続の加算前に適用層間の情報フローの正則化
Embedding Dropoutトークン埋め込み後に適用入力表現の頑健性向上
FFN DropoutFeed-Forward Network 内に適用中間表現の正則化
Output Dropout最終線形層前に適用出力分布の滑らか化

各箇所のドロップ率は通常同一値が使用されるが、箇所ごとに異なる値を設定する手法(Heterogeneous Dropout)も研究されている。

Dropoutの変種

基本的な Dropout から多数の派生手法が開発されている。

変種原理主な用途
DropConnect重み(接続)をランダムに無効化全結合層
Spatial Dropoutチャネル全体をドロップCNN
DropPath(Stochastic Depth)層全体をスキップResNet、Vision Transformer
Variational Dropoutベイズ推論に基づく適応的ドロップ率不確実性推定
Concrete Dropoutドロップ率を学習可能パラメータ化自動チューニング
RDropout(R-Drop)同一入力の 2 回の Forward の KL を最小化Fine-tuning
DropBlock連続領域をブロック単位でドロップCNN
Targeted Dropout重要度の低いニューロンを優先的にドロップモデル圧縮前処理

LLM の文脈では、DropPath は Vision Transformer(ViT)で広く使用されており、R-Drop は Fine-tuning 時の正則化として効果が報告されている。

LLM における Dropout の現状

現代の大規模 LLM では、事前訓練時に Dropout を使用しないケースが主流である。

モデルパラメータ数Dropout Rate備考
GPT-21.5B0.1初期の Transformer LLM
GPT-3175B0.0Dropout 不使用の先駆け
LLaMA7B-65B0.0Meta の効率的 LLM
LLaMA 27B-70B0.0後継モデルも不使用
Mistral7B0.0小規模ながら高性能
Falcon7B-180B0.0TII 開発
Phi-22.7B0.0Microsoft Research
Gemma2B-7B0.0Google DeepMind

この傾向の理由は以下の通りである:

  1. データ量の十分さ: 数兆トークンの訓練データでは各サンプルが 1〜2 回しか見られず、過学習が起きにくい
  2. 暗黙的正則化: モデル規模の大きさ自体が正則化効果を持つ
  3. 計算効率: Dropout はマスク生成と乗算の追加コストがかかる
  4. 再現性: 確率的な無効化は訓練の再現性を低下させる

ただし、Fine-tuning やデータ量が限定的なシナリオでは Dropout は依然として有効な正則化手法である。

実装上の注意点

Dropout を実装する際の重要なポイントを以下に示す。

注意点説明対策
訓練/推論モードの切替model.train() と model.eval() で挙動が変わる推論時に eval() を確実に呼ぶ
シード固定再現性のためにランダムシードを固定torch.manual_seed() を使用
勾配への影響ドロップされたニューロンは勾配が 0期待値は正しく保たれる
バッチノルムとの相互作用Dropout と BatchNorm の順序が精度に影響LayerNorm 使用時は問題なし
分散訓練各 GPU で異なるマスクが生成される意図的な設計として許容

よくある質問(FAQ)

Q1: Dropout率の最適値はどう決めるか?

一般的には 0.1〜0.3 が出発点である。Attention Dropout は 0.0〜0.1、全結合層の Dropout は 0.1〜0.3 が目安。モデル規模が大きくなるほど低い値(または 0.0)が適切になる傾向がある。検証データでの性能を監視しながら調整する。自動チューニング手法として Concrete Dropout を使用する方法もある。

Q2: Dropout を使うと訓練が遅くなるか?

計算コスト自体は微小(マスク生成と要素積のみ)だが、Dropout は有効なニューロン数を減らすため、同等の性能に到達するまでのエポック数が増加する。結果として訓練時間は 10〜30% 程度長くなることがある。ただし、正則化による汎化性能の向上がこのコストを正当化する場面は多い。

Q3: Dropout と Weight Decay を同時に使うべきか?

LLM では Weight Decay のみで十分な場合が多い。両方を使用する場合は、それぞれの強度を下げる必要がある(相互作用により正則化が過剰になるため)。Fine-tuning では Dropout 0.1 + Weight Decay 0.01 の組み合わせが良い出発点となる。両方のパラメータを同時にグリッドサーチすることが推奨される。