計算した重みに制限を加える事で過学習を抑制する方法。
weight decay, dropout, early stoppingがそれに当たる。
過学習を抑制する工夫という意味では、重みにノイズを加えたりするのも含まれるのかな?
荷重減衰 (Weight decay)
損失関数が大きくなり過ぎないよう、荷重を減らす作用をする項を加える。
\( L = L + \frac{1}{2} \lambda \sum^{n}_{l=1} \sum_{i, j} (w^{l}_{ij})^2 \)
\( L \)は損失関数、\( n \)はレイヤの数、\( w^{l}_{ij}\)は\( l \)番目の層の重み行列。\( \lambda \)は手入力するパラメータで、小さい値を入れる。
重み\( W \)に対する損失関数の勾配は\( \frac{\partial L}{\partial W} \)で、重みの更新は\( W \gets W – \eta \frac{\partial L}{\partial W} \)だったので、正則化を考慮すると、\( W \gets W – \eta (\frac{\partial L}{\partial W}+\lambda W) \)となる。\( W\)が正の場合は更新された\( W \)は小さく、負の場合は大きくなる。
…けど。重みを小さくすればなぜ過学習が防げるのかがいまいち分からんね。過学習はトレーニングデータの特徴を過度に認識すると現れるので、トレーニングデータが少ないと起こりやすい。”過度に認識”の部分が”重みを大きく”の部分に対応すると考えれば、そういうものか、と思う気もするけど、認識した学習を訛らせる訳なので、効率は悪くなるのでは?だんだん重みが小さくなると、今度は小さくなり過ぎて学習がサチってしまわないかな?