Memo

ここは完全にメモですね。
機械学習の勉強をしていて、いくつかの知らない単語に対してメモしておきます。

バギング

KKT条件 (カルーシュ・クーン・タッカー条件)
非線形計画において一階導関数が満たすべき最適条件

MMアルゴリズム (上界最小化アルゴリズム, Majorization minimization algorithm)
直接解くことが難しい最小化問題に対し、その金時間数の最小化問題を逐次的に解くことで、解の候補を生成する方法

EMアルゴリズム (期待値最大化アルゴリズム, Expectation maximization algorithm)
確率モデルのパラメータを最尤推定する方法。期待値ステップと最大化ステップを交互に繰り返す

スパース
ノイズを取り除き、低次元部分空間の本質的な情報を引き出す方法

ニュートン法
方程式を反復法によって数値解を求める方法。ヤコビ行列の逆行列を勾配にかける事により、二次の近似を考慮した勾配を算出する。

バッチ正規化

対象となる層の活性を正規化し、入力の偏りによる内部共変量シフトを抑制する。
重みの初期値をあまり気にしなくてもよくなり、過学習も抑制される。

入力の平均値と分散を求め、各入力に対して、平均値を引いた後、標準偏差で割る(標準化)。その後、スケール、平行移動して、出力の分布を作成する。

\( \displaystyle \mu = \frac{1}{n} \sum^n_{i=1}x_i \)
\( \displaystyle \sigma ^2 = \frac{1}{n} \sum^2_{i=1}(x_i-\mu)^2\)
\( \displaystyle \hat{x_i} = \frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}} \)
\( \displaystyle y_i = \gamma\hat{x_i} + \beta \)

\( y_i \)が出力の分布。\( \gamma \)と\( \beta \)は重みと共に学習されていくパラメータなので、推論時にはこれらの保存も必要。

初期値を気にしなくて済むのは良いですね。重みが無駄に偏る心配がないのは良いかと。その分、\( \gamma \)と\( \beta \)を保存しておかなくてはならないのが面倒ですね。

Adam

重みの更新方法の一つ。
MomemtumとRMSPropを組み合わせた方法。
勾配の2乗の移動平均だけでなく、勾配の移動平均も保持する。

\( m_t = \rho _1 m_{t-1} + (1-\rho _1)\frac{\partial L}{\partial W_t} \)
\( v_t = \rho _2 v_{t-1} + (1-\rho _2)\frac{\partial L}{\partial W_t} \odot \frac{\partial L}{\partial W_t} \)
\( \hat{m_t} = \frac{m_t}{1-\rho ^2_1} \)
\( \hat{v_t} = \frac{v_t}{1-\rho ^t_2}\)

\( W_{t+1} = W_t – \eta\frac{1}{\sqrt{\hat{v_t}} +\delta} \odot \hat{m_t} \)

\( \rho _1 \)、\( \rho _2 \)は共に減衰率で1に近いハイパーパラメータ。\( t \)はステップ数。\( \odot \)はアダマール積。\( \delta \)は0割り防止の小さい数。

正則化

計算した重みに制限を加える事で過学習を抑制する方法。
weight decay, dropout, early stoppingがそれに当たる。
過学習を抑制する工夫という意味では、重みにノイズを加えたりするのも含まれるのかな?

荷重減衰 (Weight decay)
損失関数が大きくなり過ぎないよう、荷重を減らす作用をする項を加える。
\( L = L + \frac{1}{2} \lambda \sum^{n}_{l=1} \sum_{i, j} (w^{l}_{ij})^2 \)

\( L \)は損失関数、\( n \)はレイヤの数、\( w^{l}_{ij}\)は\( l \)番目の層の重み行列。\( \lambda \)は手入力するパラメータで、小さい値を入れる。

重み\( W \)に対する損失関数の勾配は\( \frac{\partial L}{\partial W} \)で、重みの更新は\( W \gets W – \eta \frac{\partial L}{\partial W} \)だったので、正則化を考慮すると、\( W \gets W – \eta (\frac{\partial L}{\partial W}+\lambda W) \)となる。\( W\)が正の場合は更新された\( W \)は小さく、負の場合は大きくなる。

…けど。重みを小さくすればなぜ過学習が防げるのかがいまいち分からんね。過学習はトレーニングデータの特徴を過度に認識すると現れるので、トレーニングデータが少ないと起こりやすい。”過度に認識”の部分が”重みを大きく”の部分に対応すると考えれば、そういうものか、と思う気もするけど、認識した学習を訛らせる訳なので、効率は悪くなるのでは?だんだん重みが小さくなると、今度は小さくなり過ぎて学習がサチってしまわないかな?

最尤推定法

母集団の分布の形が分かっている(正規分布している、など)が、その母数が未知である(平均値や分散は未知)の場合、n個の測定値から母数を推定する方法。

尤度関数 (ゆうどかんすう, Likelihood function)

\( \displaystyle L(\theta) =L(\theta; x_1, x_2, x_3, … ,x_n) = \prod_{i=1}^n p(x_i;\theta) \)

確率密度関数が\( p(x, \theta) \)で与えられ、母集団から\( n \)個の標本をランダムで抽出して、その値を\( {x_1, x_2, x_3, …, x_n} \)と表記される時の尤度関数は\( L(θ)=L(\theta; x_1, x_2, x_3, …, x_n) = \prod_{i=1}^{n} p(x_i;\theta) \)と表します。\( {x_1, x_2, x_3, …, x_n} \)はサンプリングされた確定値で、未知数は\( \theta \)の方です。

最尤推定法 (さいゆうすいていほう, Maximum likelihood estimate)

\( \theta \)の最もそれっぽい値、\( \hat{\theta} \)を推定する方法。尤度関数の\( \theta \)を変えていくと当然ながら\( L(\theta) \)の計算値は変化していきます。右辺は\( {x_1, x_2, x_3, …, x_n} \)が観測される確率なので、\( L(\theta) \)の関数と合っていなければ小さく、合っていれば大きくなります。従って\( L(\theta) \)の最大値を取れば、それが一番もっともらしい\( \theta = \hat{\theta} \)となります。最大値は凸関数であれば微分が0になる点が最大値なので、

\( \displaystyle \frac{\partial}{\partial \theta} L(\theta) = 0 \)

を解けばよい事になります。積の微分は計算が大変なので、

\( \displaystyle \frac{\partial}{\partial \theta} l(\theta) = \frac{\partial}{\partial \theta} \log L(\theta) = 0 \)

を代わりに解いても、同じ\( \hat{\theta} \)が得られます。

母集団が、平均値\( \mu \)、分散\( \sigma^2 \)であり、\( \sigma \)が既知で\( \mu \)を推定する場合、

\( \displaystyle \frac{\partial}{\partial \mu} l(\mu) = \frac{1}{\sigma^2}\sum^{n}_{i=1}(x_i-\mu) = 0 \)

を解けば良いので、

\( \displaystyle \mu = \frac{1}{n} \sum^{n}_{i=1}x_i \)

となります。