mao9o9の技術メモ

個人的に興味のある分野についての技術メモです。

学習率の変化による損失と精度への影響 (2)

はじめに

前回の記事で、勾配と学習率の関係において一度最小値に達した後、再び勾配は大きくなったため、勾配と学習率の関係に着目して何故このような減少が生じるのか調べた。

SGDアルゴリズムの違いによる影響

ます、SGDアルゴリズムの違いが原因であるのか調べた。

  • モーメンタムなし

w_t = w_{t-1} - \gamma \nabla_w f(w_{t-1})
f:id:mao9o9:20220309211301p:plain:w500
図1 モーメンタムなしの場合の勾配
  • モーメンタムあり

v_t = \mu v_{t-1} + \nabla_wf(w_{t-1}) \\
w_t = w_{t-1} - \gamma v_t
f:id:mao9o9:20220309211526p:plain:w500
図2 モーメンタムありの場合の勾配
  • モーメンタム + nestrov

v_t = \mu v_{t-1} + \nabla_wf(w_{t-1}) \\
w_t = w_{t-1} - \gamma (\nabla_wf(w_{t-1}) + \mu v_t)
f:id:mao9o9:20220309211621p:plain:w500
図3 nestrovを用いた場合の勾配

図1、図2、図3にepochと勾配の関係を示す。図2、図3においては、 v_tを勾配とした。いずれのSGDの手法においてもepochと勾配の関係に違いはなかった。

損失関数による影響

CIFAR100のような多クラス分類では、モデル出力値にLogSoftmax関数を適用した後、NLLLossにより推定値を求めている。これはCross Entropy Lossとほぼ同じである。

NLLLoss

NLLLossを次式に示す。


\begin{align}\begin{split}
l_n &= -w_{y_n} x_{n, y_n}\\
NLLLoss &= \sum^N_{n=1} \frac{1}{\sum^N_{n=1}w_{y_n}} l_n
\end{split}\end{align}

今回の話では、 xはモデルの出力値、 yはラベルのインデックスである。また、 Nはバッチサイズ、 wは重みであり1である。NLLLossは x微分しても定数であり勾配に影響しない。

LogSoftmax

LogSoftmaxを次式に示す。


\begin{align}
LogSoftmax(x_i) = log\left(\frac{exp(x_i)}{\sum_j exp(x_j)}\right)
\end{align}

 xはモデルの出力値である。図4にこの関数への入力と出力の関係を示す。

f:id:mao9o9:20220309211911p:plain
図4 LogSoftmaxの入出力の関係

図のようにLogSoftmaxは負の値であり、線形である。この関数の微分形を次式に示す。


\begin{align}
\frac{\partial}{\partial x}log\left(\frac{exp(x_i)}{\sum_j exp(x_j)}\right) &= \frac{\frac{\partial}{\partial x}Softmax(x_i)}{Softmax(x_i)} \\
\frac{\partial}{\partial x}Softmax(x_i) &= \frac{exp(x_i)\sum_j exp(x_j) - exp(x_i)\frac{\partial}{\partial x}\sum_j exp(x_j)}{\left(\sum_j exp(x_j) \right)^2} \\
&= \frac{exp(x_i)\sum_j exp(x_j) - (exp(x_i)^2}{\left(\sum_j exp(x_j)\right)^2} \\
&= \frac{exp(x_i)}{\sum_j exp(x_j)}\left(1 - \frac{exp(x_i)}{\sum_j exp(x_j)}\right) \\
\therefore \frac{\partial}{\partial x}log\left(\frac{exp(x_i)}{\sum_j exp(x_j)}\right) &= 1 - \frac{exp(x_i)}{\sum_j exp(x_j)}
\end{align}

図5に微分式への入力と出力の関係を示す。

f:id:mao9o9:20220309212215p:plain
図5 LogSoftmaxの微分形への入出力

図に示すように微分形の出力はほぼ一定である。従って、学習率と勾配の関係に影響しないと考えられる。

ついでに、順伝播と逆伝播の関係を調べた。これらは式(4)のように表され、LogSoftmaxの順伝播と逆伝播は図6のようになる。


\begin{align}\begin{split}
forward:\ \ \  y &= f(x) \\
backward:\ \ \ x &= \frac{1}{\dot f(x)}y
\end{split}\end{align}
f:id:mao9o9:20220309212320p:plain
図6 順伝播と逆伝播

 f(x)はLogSoftmax関数である。

結論

参考[1]によると、高次元のニューラルネットワークのパラメータを最適化する時、局所解は事実上存在せず、全次元のうち数次元において極値をある鞍点が存在する。この鞍点からどのように脱出するかを突き止めるまで、鞍点への接近と脱出の状態が繰り返される。

というのが上記の実験で見られた勾配の振動であると思われる。

大域解ではない局所解である確率は損失関数が大域解に近づくほど高くなるため、学習がある程度進めば局所解である部分で止めても問題はないらしい。

参考

[1] ディープラーニングのサマースクールで学んだ26のこと