E資格向けの自習アウトプット
自分用メモ
正則化は、過学習(学習データに特化しすぎる)を防ぎ、汎化性能と予測
精度の向上を両立させる処理
(正則化と正規化はこんがらがりがち)
バイアスとバリアンス
バイアスとバリアンスは推定量の誤差を生じる2つの発生源を測定するもの
バイアス:関数やパラメータの真の値からの期待偏差(予測値の平均誤差)
バリアンス:データのサンプル化の方法に起因する期待推定値からの偏差(入力データのとり方による予測のばらつき)
(何言ってるかわからない)
バイアス 大、バリアンス 小 ➔ 正解率が低い
バイアス 小、バリアンス 大 ➔ 正解率が高いが、学習データに過学習している
(トレードオフな関係ぽい)
回帰問題における平均二乗誤差をバイアス・バリアンス分解
バリアンスが大きく過学習している状態で、予測をできるだけブレないようにするのが正則化
バリアンスを小さくするには、モデルの複雑さに制限をかける
ちょっとかじったくらいでは、この式の成り立ちを理解するのはむずかしかったので、丸暗記にしておこう。。。
パラメータノルムペナルティ
正則化の代表的なアプローチのひとつ
目的関数 𝐽(𝜃;𝑋,𝑦) に対しノルムペナルティ Ω(𝜃) を追加する
重みのパラメータのノルムで正則化を行う
ノルムペナルティを種類
Lpノルム
L1ノルム(マンハッタン距離)
L2ノルム(ユークリッド距離):重み減衰(weight decay)
重みパラメータのL2ノルムを正則化項として加えると、重みが全体的に小さくなる方向に進んでいく、これを 重み減衰 という
これはちょっと手を加えるだけで組み込めそう
# 重み減衰 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の覚え方】
回帰と正則化項の組み合わせ
Lasso回帰:L1ノルムペナルティ
Ridge回帰:L2ノルムペナルティ
Elastic Net:L1とL2の両方用いる
まとめ
正則化(正規化と間違えがち)以外の方法にもいろいろと工夫ができるので
次回に、学習途中にノイズを入れる方法や、パラメータを拘束、アンサンブル学習やブースティングなど