0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゼロから作るDeep Learning

Last updated at Posted at 2024-06-04

本記事はゼロから作るDeep Learningなどを参考にしています。

デモ用のコードはこちらです。

学習

深層学習では次のようなモデルを考える。

L=f(\boldsymbol{x};\boldsymbol{\theta})

ここで、各文字は次のように定義される。

$L$ : 損失
$f$ : モデル
$\boldsymbol{x}$ : 入力値
$\boldsymbol{\theta}$ : パラメータ

損失が小さくなるようにモデル$f$の学習を行う。
モデル$f$の学習は次のようにパラメータ$\boldsymbol{\theta}$を更新することで実現される。

\boldsymbol{\theta_{new}}=\boldsymbol{\theta_{old}} - \eta \frac{\partial L}{\partial \boldsymbol{\theta_{old}}}, \quad \eta > 0

ここで、$\eta$は学習率と呼ばれるハイパーパラメータである。

例として、上図のような場合を考える。

$\frac{\partial L}{\partial \boldsymbol{\theta_{old}}} < 0$であるため、パラメータの更新を行うと、$L(\boldsymbol{\theta_{old}})>L(\boldsymbol{\theta_{new}})$となり、損失が小さくなっていることが分かる。

ただし、学習率$\eta$や勾配$\frac{\partial L}{\partial \boldsymbol{\theta_{old}}}$が大きいと、パラメータが$\boldsymbol{\theta_{new}^{'}}$へと更新され、$L(\boldsymbol{\theta_{old}})<L(\boldsymbol{\theta_{new}^{'}})$となってしまい、むしろ損失が大きくなってしまう。

このように、必ずしもパラメータの更新を行うことによって損失が小さくなるわけでない。

連鎖律

上述したように、深層学習ではパラメータの更新を行うために勾配を求める必要がある。そこで、連鎖律を用いて勾配を効率的に算出する。

ここでは、次のようなモデルを考える。

L = L(z), \quad z = z(y, \theta_{y}), \quad y = y(x, \theta_{x})

勾配は連鎖律を用いて次のように計算できる。

\begin{align}
\frac{\partial L}{\partial \theta_{y}} &= \frac{\partial L}{\partial z}\frac{\partial z}{\partial \theta_{y}} \\
\frac{\partial L}{\partial y} &= \frac{\partial L}{\partial z}\frac{\partial z}{\partial y} \\
\frac{\partial L}{\partial \theta_{x}} &= \frac{\partial L}{\partial z}\frac{\partial z}{\partial y}\frac{\partial y}{\partial \theta_{x}} = \frac{\partial L}{\partial y}\frac{\partial y}{\partial \theta_{x}} \\
\frac{\partial L}{\partial x} &= \frac{\partial L}{\partial z}\frac{\partial z}{\partial y}\frac{\partial y}{\partial x} = \frac{\partial L}{\partial y}\frac{\partial y}{\partial x}\\
\end{align}

全結合層

下図のような全結合層を考える。

$\boldsymbol{x}$,$\boldsymbol{y}$,$W$を次のように定義する。

\boldsymbol{x}=\begin{pmatrix}
x_{1} \\
x_{2}
\end{pmatrix}
\boldsymbol{y}=\begin{pmatrix}
y_{1} \\
y_{2} \\
y_{3}
\end{pmatrix}
W = \begin{pmatrix}
w_{11} & w_{12} & w_{13} \\
w_{21} & w_{22} & w_{23} \\
\end{pmatrix}

順伝播は下記のように表せる。

\begin{align}
\boldsymbol{y}^{t} &= \begin{pmatrix}
y_1 & y_2 & y_3
\end{pmatrix} \\
&= \begin{pmatrix}
x_{1}w_{11} + x_{2}w_{21} & x_{1}w_{12} + x_{2}w_{22} & x_{1}w_{13} + x_{2}w_{23}
\end{pmatrix} \\
&= \begin{pmatrix}
x_{1} & x_{2}
\end{pmatrix}
\begin{pmatrix}
w_{11} & w_{12} & w_{13} \\
w_{21} & w_{22} & w_{23} \\
\end{pmatrix} \\
&= \boldsymbol{x}^{t} W
\end{align}

次に、逆伝播について考える。

L = L(y_{1},y_{2},y_{3})

であるとする。

\begin{align}
y_{1} = y_{1}(x_{1},x_{2},w_{11},w_{21}) = x_{1}w_{11} + x_{2}w_{21} \\
y_{2} = y_{2}(x_{1},x_{2},w_{12},w_{22}) = x_{1}w_{12} + x_{2}w_{22} \\
y_{3} = y_{3}(x_{1},x_{2},w_{13},w_{23}) = x_{1}w_{13} + x_{2}w_{23}
\end{align}

であることに注意して、連鎖律を用いると、

\begin{align}
\frac{\partial L}{\partial \boldsymbol{x}^{t}}
&=
\begin{pmatrix}
\frac{\partial L}{\partial x_{1}} & \frac{\partial L}{\partial x_{2}}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{1}}\frac{\partial y_{1}}{\partial x_{1}}
+\frac{\partial L}{\partial y_{2}}\frac{\partial y_{2}}{\partial x_{1}}
+\frac{\partial L}{\partial y_{3}}\frac{\partial y_{3}}{\partial x_{1}} & 
\frac{\partial L}{\partial y_{1}}\frac{\partial y_{1}}{\partial x_{2}}
+\frac{\partial L}{\partial y_{2}}\frac{\partial y_{2}}{\partial x_{2}}
+\frac{\partial L}{\partial y_{3}}\frac{\partial y_{3}}{\partial x_{2}}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{1}} w_{11}
+\frac{\partial L}{\partial y_{2}} w_{12}
+\frac{\partial L}{\partial y_{3}} w_{13} &
\frac{\partial L}{\partial y_{1}} w_{21}
+\frac{\partial L}{\partial y_{2}} w_{22}
+\frac{\partial L}{\partial y_{3}} w_{23}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{1}} & \frac{\partial L}{\partial y_{2}} & \frac{\partial L}{\partial y_{3}}
\end{pmatrix}
\begin{pmatrix}
w_{11} & w_{21} \\
w_{12} & w_{22} \\
w_{13} & w_{23} \\
\end{pmatrix} \\
&= \frac{\partial L}{\partial \boldsymbol{y}^{t}} W^{t}
\end{align}

と表せる。

また、

\begin{align}
\frac{\partial L}{\partial w_{ij}}
&= \frac{\partial L}{\partial y_{1}}\frac{\partial y_{1}}{\partial w_{ij}}
+ \frac{\partial L}{\partial y_{2}}\frac{\partial y_{2}}{\partial w_{ij}}
+ \frac{\partial L}{\partial y_{3}}\frac{\partial y_{3}}{\partial w_{ij}} \\
&= \frac{\partial L}{\partial y_{1}}\frac{\partial (x_{1}w_{11} + x_{2}w_{21})}{\partial w_{ij}}
+ \frac{\partial L}{\partial y_{2}}\frac{\partial (x_{1}w_{12} + x_{2}w_{22})}{\partial w_{ij}}
+ \frac{\partial L}{\partial y_{3}}\frac{\partial (x_{1}w_{13} + x_{2}w_{23})}{\partial w_{ij}} \\
&= \frac{\partial L}{\partial y_{j}} x_{i}
\end{align}

となるので、

\begin{align}
\frac{\partial L}{\partial W}
&= \begin{pmatrix}
\frac{\partial L}{\partial w_{11}} & \frac{\partial L}{\partial w_{12}} & \frac{\partial L}{\partial w_{13}} \\
\frac{\partial L}{\partial w_{21}} & \frac{\partial L}{\partial w_{22}} & \frac{\partial L}{\partial w_{23}}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{1}} x_{1} & \frac{\partial L}{\partial y_{2}} x_{1} & \frac{\partial L}{\partial y_{3}} x_{1} \\
\frac{\partial L}{\partial y_{1}} x_{2} & \frac{\partial L}{\partial y_{2}} x_{2} & \frac{\partial L}{\partial y_{3}} x_{2}
\end{pmatrix} \\
&= \begin{pmatrix}
x_{1} \\
x_{2}
\end{pmatrix}
\begin{pmatrix}
\frac{\partial L}{\partial y_{1}} & \frac{\partial L}{\partial y_{2}} & \frac{\partial L}{\partial y_{3}}
\end{pmatrix} \\
&= 
\begin{pmatrix}
\boldsymbol{x}^{t}
\end{pmatrix}^{t}
\frac{\partial L}{\partial \boldsymbol{y}^{t}}
\end{align}

と表せる。

これまでの議論の自然な拡張としてバッチ化を行う。

$X$,$Y$を次のように定義する。

X = \begin{pmatrix}
x_{11} & x_{12} \\
x_{21} & x_{22}
\end{pmatrix}
Y = \begin{pmatrix}
y_{11} & y_{12} & y_{13} \\
y_{21} & y_{22} & y_{23}
\end{pmatrix}

それぞれの行列において、1行目が1つ目のサンプルに、2行目が2つ目のサンプルに対応している。

順伝播は次のように表せる。

\begin{align}
Y &= \begin{pmatrix}
y_{11} & y_{12} & y_{13} \\
y_{21} & y_{22} & y_{23}
\end{pmatrix} \\
&= \begin{pmatrix}
x_{11}w_{11} + x_{12}w_{21} & x_{11}w_{12} + x_{12}w_{22} & x_{11}w_{13} + x_{12}w_{23} \\
x_{21}w_{11} + x_{22}w_{21} & x_{21}w_{12} + x_{22}w_{22} & x_{21}w_{13} + x_{22}w_{23}
\end{pmatrix} \\
&= \begin{pmatrix}
x_{11} & x_{12} \\
x_{21} & x_{22}
\end{pmatrix} 
\begin{pmatrix}
w_{11} & w_{12} & w_{13} \\
w_{21} & w_{22} & w_{23} \\
\end{pmatrix} \\
&= XW
\end{align}

逆伝播は次のように表せる。

\begin{align}
\frac{\partial L}{\partial X}
&= \begin{pmatrix}
\frac{\partial L}{\partial x_{11}} & \frac{\partial L}{\partial x_{12}} \\
\frac{\partial L}{\partial x_{21}} & \frac{\partial L}{\partial x_{22}}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{11}}w_{11} + \frac{\partial L}{\partial y_{12}}w_{12} + \frac{\partial L}{\partial y_{13}}w_{13} & \frac{\partial L}{\partial y_{11}}w_{21} + \frac{\partial L}{\partial y_{12}}w_{22} + \frac{\partial L}{\partial y_{13}}w_{23} \\
\frac{\partial L}{\partial y_{21}}w_{11} + \frac{\partial L}{\partial y_{22}}w_{12} + \frac{\partial L}{\partial y_{23}}w_{13} & \frac{\partial L}{\partial y_{21}}w_{21} + \frac{\partial L}{\partial y_{22}}w_{22} + \frac{\partial L}{\partial y_{23}}w_{23}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{11}} & \frac{\partial L}{\partial y_{12}} & \frac{\partial L}{\partial y_{13}} \\
\frac{\partial L}{\partial y_{21}} & \frac{\partial L}{\partial y_{22}} & \frac{\partial L}{\partial y_{23}}
\end{pmatrix}
\begin{pmatrix}
w_{11} & w_{21} \\
w_{12} & w_{22} \\
w_{13} & w_{23} \\
\end{pmatrix} \\
&= \frac{\partial L}{\partial Y} W^{t}
\end{align}
\begin{align}
\frac{\partial L}{\partial W}
&= \begin{pmatrix}
\frac{\partial L}{\partial w_{11}} & \frac{\partial L}{\partial w_{12}} & \frac{\partial L}{\partial w_{13}} \\
\frac{\partial L}{\partial w_{21}} & \frac{\partial L}{\partial w_{22}} & \frac{\partial L}{\partial w_{23}}
\end{pmatrix} \\
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{11}} x_{11} + \frac{\partial L}{\partial y_{21}} x_{21} &  \frac{\partial L}{\partial y_{12}} x_{11} + \frac{\partial L}{\partial y_{22}} x_{21} & \frac{\partial L}{\partial y_{13}} x_{11} + \frac{\partial L}{\partial y_{23}} x_{21} \\
\frac{\partial L}{\partial y_{11}} x_{12} + \frac{\partial L}{\partial y_{21}} x_{22} &  \frac{\partial L}{\partial y_{12}} x_{12} + \frac{\partial L}{\partial y_{22}} x_{22} & \frac{\partial L}{\partial y_{13}} x_{12} + \frac{\partial L}{\partial y_{23}} x_{22}
\end{pmatrix} \\
&= \begin{pmatrix}
x_{11} & x_{21} \\
x_{12} & x_{22}
\end{pmatrix}
\begin{pmatrix}
\frac{\partial L}{\partial y_{11}} & \frac{\partial L}{\partial y_{12}} & \frac{\partial L}{\partial y_{13}} \\
\frac{\partial L}{\partial y_{21}} & \frac{\partial L}{\partial y_{22}} & \frac{\partial L}{\partial y_{23}}
\end{pmatrix} \\
&= X^{t} \frac{\partial L}{\partial Y}
\end{align}

Relu

Relu関数は下式で表される。

y = \begin{cases}
x \quad (x \geq 0) \\
0 \quad (x < 0)
\end{cases}

逆伝播は次のように表せる。

\frac{\partial y}{\partial x} = \begin{cases}
1 \quad (x \geq 0) \\
0 \quad (x < 0)
\end{cases}

Softmax

Softmax関数は次のように表される。

y_{i} = f_{softmax}(x_{i}) = \frac{exp(x_{i})}{\displaystyle\sum_{j=1}^{D}exp(x_{j})},

ここで、

\boldsymbol{x} = \begin{pmatrix}
x_{1} \\
\vdots \\
x_{D}
\end{pmatrix}, \quad
\boldsymbol{y} = \begin{pmatrix}
y_{1} \\
\vdots \\
y_{D}
\end{pmatrix}
\in \mathbb{R}^{D}

とおいた。

このとき、

\displaystyle\sum_{d=1}^{D}y_{d} = 1, \quad 0 \leq y_{d} \leq 1 \quad for \quad 1 \leq d \leq D

を満たす。

CrossEntorypyLoss

CrossEntropyLossは次のように表される。

L = - \displaystyle\sum_{k=1}^{K}t_{k}log(y_{k})

ここで、$t_{k}$はone-hotベクトルであり、$y_{k}$はクラス$k$である予測確率を表す。

つまり、

\displaystyle\sum_{k=1}^{K}y_{k} = 1, \quad 0 \leq y_{k} \leq 1 \quad for \quad 1 \leq k \leq K
\displaystyle\sum_{k=1}^{K}t_{k} = 1, \quad t_{k} \in \{0, 1\} \quad for \quad 1 \leq k \leq K

を満たす。

バッチ化されている場合は次のように表される。

L = - \frac{1}{N}\displaystyle\sum_{n=1}^{N}\displaystyle\sum_{k=1}^{K}t_{nk}log(y_{nk})

ここで、$N$はバッチサイズを表す。

Softmax And CrossEntorypyLoss

Softmax関数を適用した後に、CrossEntropyLossを計算する場合を考える。

これは、$K$をクラス数、$\boldsymbol{t}$をone-hotベクトルとすると、

\boldsymbol{x} = \begin{pmatrix}
x_{1} \\
\vdots \\
x_{K}
\end{pmatrix}, \quad
\boldsymbol{y} = \begin{pmatrix}
y_{1} \\
\vdots \\
y_{K}
\end{pmatrix}
\in \mathbb{R}^{K}
y_{k} = f_{softmax}(x_{k}) \quad for \quad 1 \leq k \leq K
\boldsymbol{t} = \begin{pmatrix}
t_{1} \\
\vdots \\
t_{K}
\end{pmatrix}
L = - \displaystyle\sum_{k=1}^{K}t_{k}log(y_{k})

と表せる。

このとき、逆伝播は次のようになることが知られている。

\frac{\partial L}{\partial x_{k}} = y_{k} - t_{k}

つまり、

\frac{\partial L}{\partial \boldsymbol{x}} = \boldsymbol{y} - \boldsymbol{t}

と表せる。

確率的勾配降下法

SGD(Stochastic Gradient Descent)ともいう。

ランダムに選ばれたサンプルに対して順伝播と逆伝播を実行して、パラメータの更新を行う。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?