LoginSignup
1
0

More than 5 years have passed since last update.

ゼロから作るDeepLearningを読んで2

Posted at

ニューラルネットワークの学習

次に、ニューラルネットワークの学習に移ります。

損失関数

2乗和誤差

\begin{eqnarray}
E=\dfrac {1}{2}\sum _{k}\left( y_{k}-t_{k}\right) ^{2}
\end{eqnarray}
  • $ y_{k} $ : ニューラルネットワークの出力(ソフトマックス関数などによる出力)
  • $ t_{k} $ : 教師データ
  • $ k $ : データの次元数

例:y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
  t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] ←三番目の要素が正解の場合
  E=0.097500000

交差エントロピー

\begin{eqnarray}
E=-\sum _{k}t_{k}\log y_{k}
\end{eqnarray}

log.png

数値微分

損失関数を使用して、パラメータを最適化していく際に、偏微分を用います。
まずは微分の説明から。

微分

ある地点での変換量は下記式で求まります。
高校数学で$ y=x^{2}$が$ \dfrac {dy}{dx}=2x $に微分できると習ったかと思いますが、ここでは別の求め方をしています(解析的な微分と呼ぶそうです)。

\begin{eqnarray}
\dfrac {dt\left( x\right) }{dx}=\lim _{h\rightarrow 0}\dfrac {f\left( x+h\right) -f\left( x\right) }{h}
\end{eqnarray}

丸め誤差を考慮し、$ h=10^{-4} $程度の桁数が良いそうです。
ただ、hの値が限りなく0の近い訳ではないので、中心差分というのが有効だそうです。
中心差分とは$ \dfrac{f\left( x+h\right) - f\left( x-h\right)}{2} $になります。

偏微分

$ f\left( x_{0}-x_{1}\right) = x_{0}^{2} + x_{1}^{2} $というように、複数の変数がある場合、
1つを除く他の変数に値を固定し微分したものを偏微分といいます。
これにより、固定した値における傾きを知ることができます。

勾配

$ x_{0}, x_{1} $の両方のある地点での偏微分をまとめて次のように表記します。

\begin{eqnarray}
\left( \dfrac {\partial f}{\partial x_{0}},  \dfrac {\partial f}{\partial x_{0}}\right) 
\end{eqnarray}

これをベクトルとして表記したものを勾配と呼びます。

$ f\left( x_{0},x_{1}\right) = x_{0}^{2} + x_{1}^{2}$の各地点の勾配を求めてみましょう。
localhost_8888_notebooks_Untitled.ipynb_kernel_name=python3.png

勾配は次のようになります。
localhost_8888_notebooks_Untitled.ipynb_kernel_name=python3 (1).png

勾配法

勾配方向へパラメータを調整し、最小値を求める方法が勾配法です。

\begin{eqnarray}
x_{0}=x_{1}-\eta \dfrac {\partial f}{\partial x_{0}}
\end{eqnarray}
\begin{eqnarray}
y_{0}=y_{1}-\eta \dfrac {\partial f}{\partial y_{0}}
\end{eqnarray}

$ \eta $は学習率を表します。つまり、偏微分に学習率を掛け合わせた値で補正させます。
学習率を0.01として、$ (-3.0, 4.0) $から100回試行した場合、$ (-6.11110793e^{-10}, 8.14814391e^{-10}) $となり、限りなく$ (0, 0) $になります。
学習率が大きすぎたり、小さすぎたりすると、期待した結果になりづらい可能性があります。
学習率のようなパラメータはハイパーパラメータと言い、うまく学習する値を探す作業が必要になります。

ニューラルネットワークに対する勾配

勾配法をニューラルネットワークに適用する方法を考えます。

形状が$ 2\times 3 $の重み$ W $だけを持つニューラルネットワークがあり、損失関数を$ L $で表す場合、次のように表記できます。

\begin{eqnarray}
W=\begin{pmatrix}
w_{11}w_{21}w_{31} \\
w_{12}w_{22}w_{32}
\end{pmatrix}
\end{eqnarray}
\begin{eqnarray}
\dfrac {\partial L}{\partial W}=\begin{pmatrix}
\dfrac {\partial L}{\partial w_{11}} & \dfrac {\partial L}{\partial w_{21}} & \dfrac {\partial L}{\partial w_{31}} \\
\dfrac {\partial L}{\partial w_{12}} & \dfrac {\partial L}{\partial w_{22}} & \dfrac {\partial L}{\partial w_{32}}
\end{pmatrix}
\end{eqnarray}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0