正則化(Regularization)
モデルが訓練データに過剰に適合(オーバーフィッティング)しないように、制約やペナルティを加えてモデルをシンプルに保つための手法を正則化と言います。
基本的な考え方
損失関数にパラメータの大きさに対するペナルティ項を加えます。
\[\text{目的関数} = \underbrace{\text{訓練誤差(損失)}}_{\text{小さくしたい}} + \lambda \times \underbrace{\text{正則化項}}_{\text{パラメータを抑える}}\]- $\lambda$(正則化係数) を大きくする → 正則化項の影響力が増す → パラメータが小さく抑えられる → モデルが単純になる → 訓練データへのフィットは犠牲になる(アンダーフィッティング方向)
- $\lambda$(正則化係数) を小さくする(0 に近づける)→ 正則化の効果が弱まる → モデルが複雑になれる → 通常の(正則化なしの)学習に近づく(オーバーフィッティング方向)
代表的な種類
-
Dropout: 学習時に一部のニューロンをランダムに無効化する(ニューラルネットワーク特有)
-
ドロップコネクト(DropConnect): Dropout がニューロン(ユニット)ごと無効化するのに対し、ドロップコネクトはユニット間をつなぐ個々の重み(結合)をランダムに無効化する。Dropout より粒度が細かく、より多様なネットワーク構造を学習中に試すことになる
-
L2正則化(Ridge): $W^2$ のペナルティ → U 字形状 → 重みがなめらかに縮小(0 にはなりにくい)→ 過学習抑制に使える
-
L1正則化(Lasso): $|w|$ のペナルティ → V 字形状 → 重みが完全に 0 になる(スパースとよぶ) → 特徴量選択に使える
-
早期終了(early stopping): 検証誤差が悪化し始めたタイミングで学習を止める
-
データ拡張(augmentation): 入力データ側を加工することで汎化性能を高める
-
ラベルスムージング: 正解ラベルを1.0ではなく少し緩める
Dropout とドロップコネクトの違い
| 手法 | 無効化する対象 | イメージ |
|---|---|---|
| Dropout | ニューロン(ユニット)そのもの | ユニットを丸ごと一時的に消す |
| ドロップコネクト(DropConnect) | ユニット間の個々の重み(結合) | ユニットは残るが、つながりの一部だけを切る |
過学習抑制手法:損失関数への「足し算」になるか
| 種類 | 損失への足し算 | 補足 |
|---|---|---|
| L1 / L2正則化 | される | $\lambda \sum w^2$(L2)や $\lambda \sum |w|$(L1)のような項を損失に追加する |
| Dropout | されない | ニューロン無効化という操作自体が正則化効果を生む |
| Weight decay(AdamW等) | されない | パラメータ更新式に直接組み込む |
| データ拡張 | されない | 入力 $x$ を加工する |
| 早期終了 | されない | 学習を打ち切るタイミングの工夫 |
| ラベルスムージング | されない | 正解ラベル $y$ を加工する |
バイアス・バリアンスとの関係
- バリアンスが大きい(オーバーフィッティング)場合:$\lambda$ を大きくして正則化を強め、モデルを単純に保つことでバリアンスを抑える
- バイアスが大きい(アンダーフィッティング)場合:正則化が強すぎる可能性があるため、$\lambda$ を小さくして正則化を弱め、モデルがより自由にパターンを学習できるようにする。
陰的正則化(Implicit Regularization)
パラメータへのペナルティ項を明示的に加えるわけではないが、結果として過学習を抑える方向に働く工夫を陰的正則化と呼びます。早期終了に加えて、バッチサイズと学習率の調整もここに含まれます。
バッチサイズ
- バッチサイズを小さくすると、1 回の更新に使うデータが少なくなり、勾配の推定にノイズが乗る
- このノイズが、パラメータが訓練データの細部に過剰にフィットすることを妨げ、結果として汎化性能を高める方向に働く
- バッチサイズを大きくすると、勾配の推定は安定するが、ノイズによる正則化効果は弱まり、過学習しやすくなる傾向がある
学習率の調整
- 学習率が大きめだと、パラメータが損失関数の鋭く狭い谷(訓練データに過剰適合した解)に入り込みにくく、より広くなだらかな谷(汎化性能が高いとされる解)に収まりやすいと考えられている
- 学習率を下げすぎると、訓練データに強くフィットする狭い谷に落ち込みやすくなり、過学習につながることがある
- 学習率のスケジューリング(学習の後半で徐々に学習率を下げるなど)は、学習の安定化と正則化効果の両方を狙った工夫
バッチサイズ・学習率のいずれも、損失関数に新しい項を加えるわけではないため、上の「損失関数への足し算」の表には入りませんが、パラメータの動き方に影響を与えることで正則化と同じ方向(過学習の抑制)に作用する点が試験で問われます。