ベイジアン研究所

プログラミング言語(アルゴリズム的な話が中心)やガジェットの紹介をしています。時々心理学の話も。

【深層学習入門】ニューラルネットワークの学習編

1. 記事の目的
以下の記事でニューラルネットワークとは何かを解説した。本記事では、ニューラルネットワークの学習方法について理論的に解説を行う。

camelsan.hatenablog.com

2. 概要
ニューラルネットワークの学習は教師あり学習の誤差逆伝搬法と呼ばれる方法が主に用いられる。「ニューラルネットワークの学習」とは何か、について解説を行う。

3. 学習とは
ニューラルネットワークの入力層から画像を入力して、その画像が何であるかを当てるタスクを考える。未知の画像に関して画像を当てるには、人が学習を行うように、何万枚もの画像を繰り返し、ニューラルネットワークに入力する必要がある(汎化性能を上げるという)。その際、ニューラルネットワークの「学習」と呼ばれる行為は、ニューラルネットワークのパラメーターを調整するということである。

ニューラルネットワークのパラメーターは、重みとバイアスである。重みの調整方法は、具体的には損失関数と呼ばれる出力値と正解値との差から作られる関数を考え、その関数を最小化するようにする。

このように正解値が与えられる上で学習する方法を「教師あり学習」という。

4. 損失関数と学習
出力層での出力ベクトルを\textbf{z} = (z_1,\dots,z_n)とし、正解値のベクトルを\textbf{t} = (t_1,\dots,t_n)とする。損失関数とは、\textbf{z}\textbf{t}の差を表す関数である。次の2乗和誤差が損失関数としてよく用いられる。

E = \frac{1}{2}\displaystyle\sum_{k=1}^n(z_k-t_k)^2

学習を行う際、この損失関数が最小値を取るように重みを調整すれば良い。損失関数の最小値を計算すれば良いが、ニューラルネットワークの層の数が増えるに従い、パラメータ数は膨大になる。したがって誤差関数のグラフの形状を判断することは困難となり、微分などで最小値を求めることは困難となる。

そこで、最小値と言わずとも、極小点の方向を求め、その方向に損失関数の値が向かうように重みを調整することはできる。

極小点とは、グラフでいうと、窪んでいる部分を表す(最小値を取る部分ではないが、他の部分よりは小さい部分)。

f:id:camelsan:20210116233432p:plain
図1 極小点

勾配とは、関数のグラフの曲面の傾き具合を表すベクトルであり、関数f(\textbf{x})に対して偏微分を用いて次のように計算される(\textbf{x}=(x_1,\dots,x_n)\nabla ffの勾配を表す)。

\nabla f =(\frac{\partial f}{\partial x_1},\dots,\frac{\partial f}{\partial x_n})

ニューラルネットワークの損失関数をEとすると、ニューラルネットワークの重みw_{ij}を次の式で調整(更新)する。この式で更新を繰り返す回数をエポック数という。

w_{ij}-\rho\frac{\partial E}{\partial w_{ij}}

ここで、\rhoを学習率といい、どれくらいの大きさで極小点の方向へ移動させるかを表す、手動で調整するパラメーター(手動で調整するパラメーターをハイパーパラメーターという)である。このパラメーターの調節でよく学習できるかできないかが変わる。

5. 参考文献
[1] 詳解ディープラーニング第2版

[2] ディジタル画像処理