🐚

L1,L2正則化について

2024/02/04に公開

今回はL1,L2正則化について解説します。

L1,L2正則化とは

L1,L2正則化は機械学習モデルの過学習を抑制する手法です。
損失関数に、モデルの複雑さによる項を追加することで、モデルが訓練データに過剰に適合することを防ぎます。

L1正則化(Lasso回帰)

L1正則化は、損失関数Lにモデルの重みwによる項を追加します。

L1正則化を使用した損失関数(Lは通常の損失関数)

  • Loss = L + \lambda \sum^{n}_{i=1}|w_i|・・・(1)
    λ: 正則化の強さを調整するパラメータ
    w: モデルの重み

モデルの持つ重みに制限がかかるため、モデル全体の複雑さ(重みの大きさ)が抑制され過学習を防ぎます。

L2正則化(Ridge回帰)

L2正則化も、損失関数Lにモデルの重みwによる項を追加します。

L2正則化を使用した損失関数(Lは通常の損失関数)

  • Loss = L + \lambda \sum^{n}_{i=1}w^2_i・・・(2)

|w_i|w^2_iとなりましたが、こちらも同様にモデルの持つ重みに制限がかかり、過学習が抑制されます。

L1,L2正則化の使い分け

ではこれらの違いと使い分けを考えていきましょう。
それぞれのモデルへの影響を考えるために、重みの更新式を記述します。これらは、上記の損失関数に逆伝播(偏微分)を行うことで導出することができます。

L1正則化の重みの更新式
w_i = w_i - \alpha(\dfrac{\partial Loss}{\partial w_i})
= w_i - \alpha(\dfrac{\partial L + \lambda \sum^{n}_{i=1}|w_i|}{\partial w_i})
= w_i−\alpha(\dfrac{∂L}{∂w_i}+\lambda sign(w_i))・・・(3)
\alpha: 学習率

L2正則化の重みの更新式
w_i = w_i - \alpha(\dfrac{\partial Loss}{\partial w_i})
= w_i - \alpha(\dfrac{\partial L + \lambda \sum^{n}_{i=1}w^2_i}{\partial w_i})
= w_i−\alpha(\dfrac{∂L}{∂w_i}+2\lambda w_i)・・・(4)
※sign(x): xが正の時1, xが負の時-1, x=0の時0を返す

これらの更新式(3),(4)から、各重みw_iは更新時に、自身の大きさ(\lambda sign(w_i)もしくは2\lambda w_i)によるペナルティを受けることが分かります。
またL1正則化は重みを完全に0にすることがあり(sign関数によって固定値が加減算される)、L2正則化は重みを0に近づけるが完全には0にしません(重みが小さくなると、重みの加減算の量も減少する。重みの値を均等に小さくする)。
これによりモデルの過学習を防ぐとともに、L1は特徴量の取捨選択(重みが0になる場合、その特徴は使用されず、特徴量が減少する)によってモデルの解釈性を向上させ、L2は重みの値を平滑化することで、特定の重みだけが大きくなることがないため外れ値やノイズに対する耐性が高まります。

利用シーン

  • L1正則化
    モデルを単純化し解釈性を向上したい、スパース(疎)な軽いモデルを作りたい
  • L2正則化
    外れ値やノイズによる影響を抑えたい
  • 両方
    過学習を防ぎたい

まとめ

L1,L2正則化は、損失関数にモデルの重みと相関する項を追加し、機械学習モデルの過学習を抑制する手法でした。
これらはどちらもよく使われる手法なので、場面によって使い分けていきましょう。

今回はここまでになります。最後まで読んでいただきありがとうございました。

Discussion