konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

【DeepLearning特訓】MLPの基礎 正則化

E資格向けの自習アウトプット
自分用メモ

正則化は、過学習(学習データに特化しすぎる)を防ぎ、汎化性能と予測
精度の向上を両立させる処理
正則化と正規化はこんがらがりがち)

バイアスとバリアンス

バイアスとバリアンスは推定量の誤差を生じる2つの発生源を測定するもの
バイアス:関数やパラメータの真の値からの期待偏差(予測値の平均誤差)
バリアンス:データのサンプル化の方法に起因する期待推定値からの偏差(入力データのとり方による予測のばらつき)
(何言ってるかわからない)

バイアス 大、バリアンス 小 ➔ 正解率が低い
バイアス 小、バリアンス 大 ➔ 正解率が高いが、学習データに過学習している
トレードオフな関係ぽい)

回帰問題における平均二乗誤差をバイアス・バリアンス分解
f:id:konchangakita:20210109183358p:plain


バリアンスが大きく過学習している状態で、予測をできるだけブレないようにするのが正則化
バリアンスを小さくするには、モデルの複雑さに制限をかける

ちょっとかじったくらいでは、この式の成り立ちを理解するのはむずかしかったので、丸暗記にしておこう。。。

パラメータノルムペナルティ

正則化の代表的なアプローチのひとつ
目的関数 𝐽(𝜃;𝑋,𝑦) に対しノルムペナルティ Ω(𝜃) を追加する
f:id:konchangakita:20210109211713p:plain

重みのパラメータのノルムで正則化を行う
ノルムペナルティを種類

Lpノルム

f:id:konchangakita:20210109211754p:plain

L1ノルム(マンハッタン距離)

f:id:konchangakita:20210109211830p:plain

L2ノルム(ユークリッド距離):重み減衰(weight decay)

f:id:konchangakita:20210109211902p:plain

重みパラメータのL2ノルムを正則化項として加えると、重みが全体的に小さくなる方向に進んでいく、これを 重み減衰 という
f:id:konchangakita:20210109230359p:plain

これはちょっと手を加えるだけで組み込めそう

# 重み減衰
weight_decay_lambda = 0.1 # 重み減衰の係数
w1, w2, w3 = np.random.randn(3) #適当に
loss = 1 # 適当に

def lp_norm(w, p=2):
    return np.sum(np.abs(w)**p)**(1/p)

# loss に重みL2ノルムを加える
for w in (w1, w2, w3):
    loss += 0.5 * weight_decay_lambda * (lp_norm(w)**2)

# 勾配計算の時
dw1 += weight_decay_lambda * w1
dw2 += weight_decay_lambda * w2
dw3 += weight_decay_lambda * w3


【L1とL2の覚え方】
f:id:konchangakita:20210109215300p:plain

回帰と正則化項の組み合わせ

Lasso回帰:L1ノルムペナルティ
Ridge回帰:L2ノルムペナルティ
Elastic Net:L1とL2の両方用いる

まとめ

正則化(正規化と間違えがち)以外の方法にもいろいろと工夫ができるので
次回に、学習途中にノイズを入れる方法や、パラメータを拘束、アンサンブル学習やブースティングなど