機械学習モデルの性能を高めるうえで「過学習(overfitting)」は避けて通れない課題の一つです。
訓練データに過剰適合したモデルは汎化性能が低く、未知のデータに対してうまく予測できません。
この問題を解決する代表的な手法が「L2正則化」です。
本記事では、L2正則化の意味と仕組み、L2ノルムとの関係、L1正則化との違い、そして実際の機械学習への応用をわかりやすく解説していきます。
L2正則化とは?過学習を防ぐペナルティ付き学習手法
それではまず、L2正則化の基本的な意味と目的について解説していきます。
L2正則化とは、機械学習モデルの損失関数にモデルの重み(パラメータ)の2乗和をペナルティとして加えることで、モデルの複雑さを抑制する手法です。
Ridge正則化とも呼ばれ、線形回帰に適用したものは「Ridge回帰」として知られています。
モデルが訓練データに過剰適合する過学習は、重みが大きくなりすぎることで生じることが多いため、重みの大きさにペナルティを課すことで複雑すぎるモデルを抑制します。
結果として汎化性能(未知データへの適合力)が向上し、実用的な予測精度が高まります。
L2正則化付き損失関数:L(w) = 元の損失 + λ × ‖w‖₂²
λ(ラムダ)は正則化の強さを制御するハイパーパラメータです。λが大きいほど重みへのペナルティが強くなり、モデルはシンプルになります。λ=0のとき正則化なし(通常の学習)と同じになります。
この正則化項 λ × ‖w‖₂² を損失関数に加えることで、最適化アルゴリズムは「損失を小さくしながら重みも小さく保つ」バランスを取るように学習します。
‖w‖₂² はL2ノルムの2乗、つまり重みの各要素の2乗和であり、これがL2正則化という名称の由来です。
過学習とはなにか、なぜ起きるのか
L2正則化を理解するために、まず過学習の原因を把握しておきましょう。
過学習とは、モデルが訓練データのノイズや偏りまで学習してしまい、訓練データへの精度は高いが未知データへの精度は低くなる状態のことです。
訓練データに対してモデルの表現力(パラメータ数)が多すぎる場合に発生しやすく、特にデータ量が少ないときに顕著に現れます。
モデルの複雑さを適切に制限することが、過学習対策の核心であり、L2正則化はその代表的な方法の一つです。
他の過学習対策としては、データ拡張・ドロップアウト・早期停止(Early Stopping)などがあり、L2正則化と組み合わせて使うことも多いでしょう。
L2正則化の勾配更新への影響
L2正則化が学習にどう影響するかを、勾配降下法の観点から理解しましょう。
L2正則化付き損失関数を重みwで微分すると、正則化項から 2λwという項が現れます。
L2正則化ありの重み更新式
w ← w – η × (∂L/∂w + 2λw)
= w × (1 – 2ηλ) – η × ∂L/∂w
(η:学習率、λ:正則化係数)
(1 – 2ηλ)の係数が1より小さいため、毎ステップ重みが少しずつ減衰する→「Weight Decay(重み減衰)」と呼ばれる理由
この「重みが毎ステップ一定割合で減衰する」動作から、L2正則化は「Weight Decay(重み減衰)」とも呼ばれます。
ディープラーニングフレームワーク(PyTorch・TensorFlowなど)ではweight_decayパラメータとしてL2正則化を設定できます。
この実装上の等価性(weight decay=L2正則化)はディープラーニング実装時に重要な知識です。
L2正則化とバイアス項の扱い
L2正則化を適用する際、バイアス項(切片b)の扱いには注意が必要です。
一般的に、バイアス項には正則化を適用しないことが多いでしょう。
バイアス項はデータのスケールを調整する役割を持ちますが、過学習の原因になりにくいため、重みwのみにペナルティを課す設計が標準的です。
scikit-learnのRidge回帰やロジスティック回帰でも、fit_intercept=Trueの場合バイアス項は正則化から除外されています。
ニューラルネットワークでも同様に、バイアスパラメータをweight decayの対象外にする実装が多いです。
L2正則化とL1正則化の違いを詳しく比較
続いては、L2正則化とL1正則化の違いと使い分けを確認していきます。
L1正則化(Lasso正則化)はペナルティ項にL1ノルム(絶対値の和)を使う手法であり、L2正則化と異なる性質を持ちます。
| 比較項目 | L1正則化(Lasso) | L2正則化(Ridge) |
|---|---|---|
| ペナルティ | λ × Σ|wⱼ| | λ × Σwⱼ² |
| 解の性質 | スパース(多くがゼロ) | 全重みが小さい(ゼロにはなりにくい) |
| 特徴量選択 | 自動的に行う | 行わない |
| 外れ値への対応 | L2より強い | 大きな値を強くペナルティ |
| 微分可能性 | w=0で微分不連続 | すべての点で微分可能 |
| 応用例 | 高次元・スパース特徴 | 相関する特徴量が多い場合 |
L2正則化がゼロにしない理由
L2正則化はL1正則化と異なり、重みを完全にゼロにする傾向がありません。
L2ペナルティ(2乗)は原点に近づくほどペナルティの傾きが小さくなるため、完全にゼロにするコストが大きくなります。
一方L1ペナルティ(絶対値)は原点近くでも一定の傾きを持つため、重みを完全にゼロに押し込む力が働きます。
これが「L2は密な解、L1はスパースな解」という違いの幾何学的な説明です。
幾何学的には、L2の制約領域が「球(楕円体)」であるのに対し、L1の制約領域は「ダイヤモンド形(菱形)」であるため、損失関数との接触点が軸上(ゼロ点)になりやすいことでスパース解が生まれます。
ElasticNetによる両者の統合
L1とL2の両方のペナルティを組み合わせた「ElasticNet正則化」という手法も広く使われています。
ElasticNetの損失関数
L(w) = 元の損失 + α × λ × ‖w‖₁ + (1-α)/2 × λ × ‖w‖₂²
(α:L1とL2の混合比率、0でRidge、1でLasso)
ElasticNetはグループ化された特徴量(相関する特徴量が複数ある場合)でも安定した選択ができる利点があります。
scikit-learnではElasticNet・ElasticNetCV(交差検証付き)クラスとして実装されており、αとλのチューニングが可能です。
どの正則化手法が最適かはデータの特性によって異なるため、交差検証を使ってハイパーパラメータを探索するアプローチが推奨されます。
機械学習でのL2正則化の実装と応用
続いては、機械学習の各手法でL2正則化がどのように実装・活用されるかを確認していきます。
L2正則化は線形回帰だけでなく、ロジスティック回帰・SVM・ニューラルネットワークなど幅広い手法に適用できます。
scikit-learnでのL2正則化の実装例
Ridge回帰の実装(scikit-learn)
from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0) ←alphaがλに対応する
model.fit(X_train, y_train)
print(model.coef_) ←正則化後の重みを確認する
ロジスティック回帰(L2正則化)の実装
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty=’l2′, C=1.0) ←CはλのC=1/λ
(Cが小さいほど正則化が強くなる)
scikit-learnのRidge回帰ではalphaがλに相当し、値が大きいほど正則化が強くなります。
LogisticRegressionのパラメータCはλの逆数(C = 1/λ)であるため、Cが小さいほど強い正則化となる点に注意が必要です。
RidgeCVを使うと交差検証で最適なalphaを自動選択できるため、ハイパーパラメータチューニングの効率化に役立ちます。
ニューラルネットワークでのWeight Decay実装
ディープラーニングではL2正則化はWeight Decayとしてオプティマイザーに設定します。
PyTorchでのWeight Decay設定例
optimizer = torch.optim.Adam(
model.parameters(),
lr=0.001,
weight_decay=1e-4 ←L2正則化係数λを設定する
)
TensorFlow・Kerasではkernelの正則化として設定します。
Dense層にregularizers.l2(l=1e-4)を指定することでL2正則化が適用されます。
適切なweight_decayの値はモデル・データセットによって異なるため、グリッドサーチや経験値(1e-4〜1e-2が多い)を参考に調整するとよいでしょう。
L2正則化とBatch Normalizationの関係
ディープラーニングではBatch Normalization(バッチ正規化)もL2正則化と同様に過学習抑制の効果があります。
Batch Normalizationはミニバッチごとにニューラルネットワークの中間層の出力を正規化する手法であり、重みの初期値依存性を下げて学習を安定させます。
Batch Normalizationを使用する場合、L2正則化(weight decay)は不要または弱くて良い場合があることが研究で示されています。
現代のディープラーニングでは両者を組み合わせるかどうかはアーキテクチャと実験によって決定するのが実際のアプローチです。
Dropout(ランダムにニューロンを無効化する手法)もL2正則化と組み合わせることで、より強力な過学習防止効果が得られることがあります。
まとめ
L2正則化は機械学習の損失関数に重みの2乗和(L2ノルムの2乗)をペナルティとして加えることで、モデルの複雑さを制限し過学習を防ぐ手法です。
重みが毎ステップ一定割合で減衰するWeight Decayとして実装されることも多く、ディープラーニングフレームワークでは標準的なオプティマイザーオプションとして提供されています。
L1正則化と比較すると、L2はスパース性を持たず全重みをバランスよく小さくする傾向があり、相関する特徴量が多い場合に特に有効です。
scikit-learnではRidge・LogisticRegression、PyTorchやKerasではweight_decayや正則化器として簡単に実装できます。
正則化の強さλは交差検証によって最適値を探索することが推奨されるため、ハイパーパラメータチューニングと合わせて活用してみてください。