Now Loading...

Now Loading...

L1/L2正則化

ヨビノリ & zero to one コラボ企画第一弾:ヨビノリのノリで学ぶ「L1/L2正則化」

サンプル解説文
以下の説明文はサンプルです(LaTexが使えます)。実際には、ヨビノリに作成してもらった動画から文字を起こします。実行可能なプログラムもサンプルです。できるだけ弊社の「動かして試せるブログ」に誘導したいので、説明動画の中でも使えそうなプログラムは説明動画の中でも使ってください(3Dプロットされた図はマウスでぐりぐり回転させることができるものもあります)。ここに用意したサンプルプログラムで足りなければ、具体的な指示をもらえればこちらで必要なプログラムを準備します。(開発に関する追記)プログラムウィンドウはデフォルトでは最小化するように調整中です。また、プログラムウィンドウの下に付いている実行ボタンを押さなくても実行結果が見えるように、実行結果のイメージは表示する予定です。

次の損失関数L0の投影図はw2方向を長軸とする楕円. つまり、w_1よりw_2の方向に値が急激に変化する。つまりw_2よりw_1の方が寄与の方が大きい.

Loss: L_0(w_1,w_2)=10[(w_1+12)^2 + (frac{w_2+12}{2})^2]+100

損失関数L0に以下のL1正則化項を加算しして得られるL0+L1を考える。それを新たな損失関数としてその最小値を求めるのがL1正則化.
L1: L(w_1,w_2)=lambda{(|w_1| + |w_2|)}

以下のプログラムは損失関数L0とL1正則化項、および、L0+L1の3Dイメージを描画します(平面への投影図も確認できます)。この3Dイメージははタッチして回転させることができます。プログラム中のz0, z1を変えてみて正則化の効果がどのように変化するか視覚的に確認してみましょう。


 


プログラム2

以下のプログラムはもともとの損失関数L0とL1正則化項、および、L1+L0を2次元に射影したものです(値は等高線で表現)。プログラム中のLoss0, Lpを変えてみて正則化の効果がどのように変化するか視覚的に確認してみましょう。


 


プログラム3

以下のプログラムはもともとの損失関数L0とL2正則化項、および、L2+L0を3Dイメージを描画します。実行結果はタッチして3D回転させることができます。プログラム中のz1, z2を変えてみて正則化の効果がどのように変化するか視覚的に確認してみましょう。


 


プログラム4

以下のプログラムはもともとの損失関数L0とL2正則化項、および、L2+L0を2次元に射影したものです(値は等高線で表現)。プログラム中のLoss0, Lpを変えてみて正則化の効果がどのように変化するか視覚的に確認してみましょう。


 


プログラム5

以下のプログラムはもともとの損失関数L0とL1正則化項、および、L1+L0を2次元に射影したものです(値は等高線で表現)。プログラム中の「## main script ##」にある、sの値(194行目のコードの値)を変えると正則化を切り替えることができます(L1(s=0)、L2(s=1))。L1, L2を切り替えてみて、それぞれ最小になる解がどこになるのかを視覚的に確認してみましょう。

 


プログラム6

以下のプログラムを実行すると、L2正則化項のラムダの値の変化に応じて損失関数の最小解の位置がどのように変化するかを3Dイメージで確認することができます。


 


プログラム7

以下のプログラムはscikit-learnのRidgeClassifierを使ってリッジ回帰を行います。