重みの正則化
重みの正則化
より単純なモデルのほうが、より複雑なモデルよりも過学習に陥りにくいため、単純なモデル(パラメータの数が少ないモデル)をつくりたい。
ネットワークの複雑さに歯止めをかけるように重みの値を制限すると、重みの値の分布がより正則化される。これを重みの正則化と呼ぶ。重みを正則化するには、大きな重みを使用する場合のコストをネットワークの損失関数に追加する。このコストには、次の2種類がある。
- L1正則化
追加されるコストは重み係数の絶対値(重みのL1ノルム)に比例する。
損失関数 + L1正則化項: - L2正則化
追加されるコストは重み係数の値の二乗(重みのL2ノルム)に比例する。ニューラルネットワークでは、L2正則化は荷重減衰とも呼ぶ。
損失関数 + L2正則化項:
L2正則化を実際にやってみる
from keras import regularizers model = models.Sequential() model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001), activation='relu', input_shape=(10000,))) model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001), activation='relu')) model.add(layers.Dense(1, activation='sigmoid'))
l2(0.001)は、その層の重み行列の係数毎に、ネットワークの全損失に0.001 * weight_coefficient_valueを足すことを意味する。このペナルティが追加されるのは訓練時だけなので、このネットワークの損失値はテスト時よりも訓練時の方がずっと大きくなる。
他の正則化のコード
from keras import regularizers # L1正則化 regularizers.l1(0.001) # L1正則化とL2正則化の同時適用 regularizers.l1_l2(l1=0.001, l2=0.001)
参考
- 作者:Francois Chollet
- 発売日: 2018/05/28
- メディア: Kindle版