Posted at

正則化


はじめに

最初に読んだ時めっちゃ意味わからんかったです・・・・。

よってそこで、勉強しながらメモ的な感じで僕レベルでも理解できるように理論だけを書き残しておきます。


おさらい(コスト関数と重み更新)

$\hat{y}$はモデルによって予測される値で、

\hat{y} = f(x)= W^t x\\

\\
W: 重みベクトル\\
x: 特量量ベクトル\\

によって求められます。

この重みを求めることによって、重みに対する法線ベクトルが境界線になります。

そこでイテレーションによって重みを更新して最適な重みを推定する必要がありました。

そこで出てくるのがコスト関数。

E(w) = \frac{1}{2} \sum_{i=1}^{n} (y_i - \hat{y_i})^2\\

\\
E(w): コスト関数\\
\hat{y}: 予測値 \\
y: 実測値

このコスト関数は残差を示しているので、コスト関数が最小になるように重みを更新していきます。

そのためにはコスト関数を推定したいパラメータwで微分する必要があります。しかしながら、E(w)はf(x)という関数を含んでいる合成関数なので偏微分する必要がありました。

\frac{∂E(w)}{∂w_j} = \frac{∂E(w)}{f(x)} ・ \frac{∂f(x)}{∂w_j}\\

\\
\\
\frac{∂E(w)}{f(x)} = \frac{1}{2}\sum_{i=1}^{n} \frac{∂}{∂f(x_i)}(y_i^2 - 2y_i\hat{f(x_i)} + f(x)^2)\\
= \sum_{i=1}^{n}(f(x_i) - y_i)\\\\

\frac{∂f(x)}{∂w_j} = \frac{∂}{∂w_j}(w^T x) = \frac{∂}{∂w_j}(w_0 x_0 + .... + w_j x_0 + ... ) = x_j\\
\\

\frac{∂E(w)}{∂w_j} = \frac{∂E(w)}{f(x)} ・ \frac{∂f(x)}{∂w_j} = \sum_{i=1}^{n}(f(x_i) - y_i)・x_j\\

これによって$w_j$を推定することができます。

推定には、学習率をかけたものを用います。

w_j := w_j - \eta E(w_j)

という話でした!


正則化

しかしながら何次元にも及ぶ重みのためパラメーターが大量に増えた時にオーバーフィットしてしまうということがあります。

そこで正則化というものを定義します。

正則化にはL1, L2正則化というものが一般的です。

L1 = R(w) = \frac{λ}{2}\sum_{i=1}^{n}|w_i| \\

L2 = R(w) = \frac{λ}{2}\sum_{i=1}^{n}(w_i ^2)\\

それぞれLasso(L1)、Ridge(L2)といい、L2の方がよく使われるみたいですね。

ここで定義した正則化項(R(w))を更新式に加えると不思議なことに過学習を防ぐことができます。

E(w) = \frac{1}{2} \sum_{i=1}^{n} (y_i - \hat{y_i})^2 + R(w)\\ 

このように定義します。

すると、wが大きくなり場合、正則化項によりコスト関数は増大します。

するとwはあまり大きくならず、かつ残差の少ないパラメータとして推定できるようになります。

このことがなぜ、過学習を防ぐことに寄与するかというと、ものすごく極端な例ですが、

$w_j = 0$となったします。すると

f(x) = w^T x = w_0 x_0 + .... + w_j x_j + .... w_n x_n\\

= w_0 x_0 + .... + 0 + .... w_n x_n\\

となり、次元が消失します。

といった具合に正則化項は過度にパラメーターを適合させなくなるといった役割があります。