はじめに
「機械学習・深層学習」初学者のための『ゼロから作るDeep Learning』の攻略ノートです。『ゼロつくシリーズ』学習の補助となるように適宜解説を加えています。本と一緒に読んでください。
ニューラルネットワーク内部の計算について、数学的背景の解説や計算式の導出を行い、また実際の計算結果やグラフで確認していきます。
この記事は、5.6.2項「バッチ版Affineレイヤ」の内容です。バッチデータに対するAffineレイヤを微分します。
【元の記事】
www.anarchive-beta.com
【他の記事一覧】
www.anarchive-beta.com
【この記事の内容】
バッチデータ版Affineレイヤの逆伝播の導出
重み付き和の計算を行うAffineレイヤ(全結合層)の微分(逆伝播)を導出します。前節「1データ版Affineレイヤの逆伝播の導出【ゼロつく1のノート(数学)】 - からっぽのしょこ」では、簡単な例として1データの場合を考えました。この節では、複数データの場合を考えます。順伝播については「3.3-4:ニューラルネットワークの順伝播【ゼロつく1のノート(実装)】 - からっぽのしょこ」を参照してください。
・順伝播の確認
順伝播の前に、Affineレイヤの順伝播の計算を確認します。
Affineレイヤの順伝播の入力$\mathbf{X}$、重み$\mathbf{W}$、バイアス$\mathbf{b}$をそれぞれ次の形状とします。
$$
\mathbf{X}
= \begin{pmatrix}
x_{1,1} & x_{1,2} & \cdots & x_{1,D} \\
x_{2,1} & x_{2,2} & \cdots & x_{2,D} \\
\vdots & \vdots & \ddots & \vdots \\
x_{N,1} & x_{N,2} & \cdots & x_{N,D}
\end{pmatrix}
,\
\mathbf{W}
= \begin{pmatrix}
w_{1,1} & w_{1,2} & \cdots & w_{1,H} \\
w_{2,1} & w_{2,2} & \cdots & w_{2,H} \\
\vdots & \vdots & \ddots & \vdots \\
w_{D,1} & w_{D,2} & \cdots & w_{D,H}
\end{pmatrix}
,\
\mathbf{b}
= (b_1, b_2, \cdots, b_H)
$$
ここで、$N$はバッチサイズ(1試行当たりのデータ数)、$D$は1データの要素数または前の層のニューロン数、$H$は次の層のニューロン数です。
順伝播の出力(重み付き和)$\mathbf{Y}$を次の式で計算します。
$$
\begin{aligned}
\mathbf{Y}
&= \mathbf{X} \mathbf{W}
+ \mathbf{B}
\\
&= \begin{pmatrix}
\sum_{d=1}^D x_{1,d} w_{d,1} + b_1 &
\sum_{d=1}^D x_{1,d} w_{d,2} + b_2 &
\cdots &
\sum_{d=1}^D x_{1,d} w_{d,H} + b_H \\
\sum_{d=1}^D x_{2,d} w_{d,1} + b_1 &
\sum_{d=1}^D x_{2,d} w_{d,2} + b_2 &
\cdots &
\sum_{d=1}^D x_{2,d} w_{d,H} + b_H \\
\vdots & \vdots & \ddots & \vdots \\
\sum_{d=1}^D x_{N,d} w_{d,1} + b_1 &
\sum_{d=1}^D x_{N,d} w_{d,2} + b_2 &
\cdots &
\sum_{d=1}^D x_{N,d} w_{d,H} + b_H
\end{pmatrix}
\\
&= \begin{pmatrix}
y_{1,1} & y_{1,2} & \cdots & y_{1,H} \\
y_{2,1} & y_{2,2} & \cdots & y_{2,H} \\
\vdots & \vdots & \ddots & \vdots \\
y_{N,1} & y_{N,2} & \cdots & y_{N,H}
\end{pmatrix}
\end{aligned}
$$
行列の積は、「前の行列の行数」と「後の行列の列数」の行列となるのでした。よって、$\mathbf{Y}$は$N \times H$の行列になります。
バイアスについては、$\mathbf{b}$を行方向に$N$個複製した行列$\mathbf{B}$として扱います。
$$
\mathbf{B}
= \begin{pmatrix}
b_1 & b_2 & \cdots & b_H \\
b_1 & b_2 & \cdots & b_H \\
\vdots & \vdots & \ddots & \vdots \\
b_1 & b_2 & \cdots & b_H
\end{pmatrix}
$$
$\mathbf{Y}$の各要素に注目すると、次の計算をしています。
$$
y_{n,h}
= \sum_{d=1}^D
x_{n,d} w_{d,h} + b_h
$$
以上がAffineレイヤの順伝播の計算です。
・逆伝播の導出
では、Affineレイヤの逆伝播の計算式を導出します。
逆伝播では、順伝播の出力$\mathbf{Y}$に関する損失$L$の勾配$\frac{\partial L}{\partial \mathbf{Y}}$が次のレイヤから入力します。$\frac{\partial L}{\partial \mathbf{Y}}$は、$\mathbf{Y}$と同じ形状の行列になります。
$$
\frac{\partial L}{\partial \mathbf{Y}}
= \begin{pmatrix}
\frac{\partial L}{\partial y_{1,1}} &
\frac{\partial L}{\partial y_{1,2}} &
\cdots &
\frac{\partial L}{\partial y_{1,H}} \\
\frac{\partial L}{\partial y_{2,1}} &
\frac{\partial L}{\partial y_{2,2}} &
\cdots &
\frac{\partial L}{\partial y_{2,H}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial L}{\partial y_{N,1}} &
\frac{\partial L}{\partial y_{N,2}} &
\cdots &
\frac{\partial L}{\partial y_{N,H}}
\end{pmatrix}
$$
出力の勾配(逆伝播の入力)$\frac{\partial L}{\partial \mathbf{Y}}$を用いて、順伝播の入力$\mathbf{X}$とパラメータ$\mathbf{W},\ \mathbf{b}$それぞれに関する損失$L$の勾配$\frac{\partial L}{\partial \mathbf{X}},\ \frac{\partial L}{\partial \mathbf{W}},\ \frac{\partial L}{\partial \mathbf{b}}$を求めます。
これまでのように、「逆伝播の入力$\frac{\partial L}{\partial \mathbf{Y}}$」と「Affineレイヤの微分$\frac{\partial \mathbf{Y}}{\partial \mathbf{X}},\ \frac{\partial \mathbf{Y}}{\partial \mathbf{W}},\ \frac{\partial \mathbf{Y}}{\partial \mathbf{b}}$」との積でも求められますが、より簡単に計算できるように計算式を導出します。
・入力の勾配
まずは、順伝播の入力$\mathbf{X}$に関する損失$L$の勾配$\frac{\partial L}{\partial \mathbf{X}}$を求めます。
入力の勾配$\frac{\partial L}{\partial \mathbf{X}}$は、順伝播の入力$\mathbf{X}$と同じ形状の行列になります。
$$
\frac{\partial L}{\partial \mathbf{X}}
= \begin{pmatrix}
\frac{\partial L}{\partial x_{1,1}} &
\frac{\partial L}{\partial x_{1,2}} &
\cdots &
\frac{\partial L}{\partial x_{1,H}} \\
\frac{\partial L}{\partial x_{2,1}} &
\frac{\partial L}{\partial x_{2,2}} &
\cdots &
\frac{\partial L}{\partial x_{2,H}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial L}{\partial x_{N,1}} &
\frac{\partial L}{\partial x_{N,2}} &
\cdots &
\frac{\partial L}{\partial x_{N,H}} \\
\end{pmatrix}
$$
$\frac{\partial L}{\partial \mathbf{X}}$の1行1列目の要素$\frac{\partial L}{\partial x_{1,1}}$を考えます。$\frac{\partial L}{\partial x_{1,1}}$は、$\mathbf{X}$の1行1列目の要素$x_{1,1}$に関する損失$L$の微分です。
$x_{1,1}$は、$\mathbf{Y}$の1行目の$H$個の要素$y_{1,1}, y_{1,2}, \cdots, y_{1,H}$に影響(分岐)しています。よって、連鎖律によって分解した「$H$個の微分の和」で求められます。
$$
\begin{align}
\frac{\partial L}{\partial x_{1,1}}
&= \frac{\partial L}{\partial y_{1,1}}
\frac{\partial y_{1,1}}{\partial x_{1,1}}
+ \frac{\partial L}{\partial y_{1,2}}
\frac{\partial y_{1,2}}{\partial x_{1,1}}
+ \cdots
+ \frac{\partial L}{\partial y_{1,H}}
\frac{\partial y_{1,H}}{\partial x_{1,1}}
\tag{1}\\
&= \sum_{h=1}^H
\frac{\partial L}{\partial y_{1,h}}
\frac{\partial y_{1,h}}{\partial x_{1,1}}
\end{align}
$$
$\frac{\partial L}{\partial y_{1,h}}$は与えられている(次のレイヤで求めた)ので、$\frac{\partial y_{1,h}}{\partial x_{1,1}}$を求めます。
$y_{1,1}$は次の式でした。
$$
\begin{aligned}
y_{1,1}
&= \sum_{d=1}^D x_{1,d} w_{d,1} + b_1
\\
&= x_{1,1} w_{1,1} + x_{1,2} w_{2,1} + \cdots + x_{1,D} w_{D,1} + b_1
\end{aligned}
$$
$y_{1,1}$を$x_{1,1}$で微分すると
$$
\begin{aligned}
\frac{\partial y_{1,1}}{\partial x_{1,1}}
&= w_{1,1} + 0 + \cdots + 0 + 0
\\
&= w_{1,1}
\end{aligned}
$$
$x_{1,1}$の係数である$w_{1,1}$だけが残ります。
式(1)の他の項も同様に求められます。$x_{1,1}$に関する$y_{1,H}$の微分であれば
$$
\begin{aligned}
\frac{\partial y_{1,H}}{\partial x_{1,1}}
&= \frac{\partial}{\partial x_{1,1}} \left(
\sum_{d=1}^D x_{1,d} w_{d,H} + b_H
\right)
\\
&= \frac{\partial}{\partial x_{1,1}} \Bigl(
x_{1,1} w_{1,H} + x_{1,2} w_{2,H} + \cdots + x_{1,D} w_{D,H} + b_H
\Bigr)
\\
&= w_{1,H} + 0 + \cdots + 0 + 0
\\
&= w_{1,H}
\end{aligned}
$$
となります。
よって、式(1)にそれぞれ代入すると
$$
\begin{align}
\frac{\partial L}{\partial x_{1,1}}
&= \frac{\partial L}{\partial y_{1,1}}
\frac{\partial y_{1,1}}{\partial x_{1,1}}
+ \frac{\partial L}{\partial y_{1,2}}
\frac{\partial y_{1,2}}{\partial x_{1,1}}
+ \cdots
+ \frac{\partial L}{\partial y_{1,H}}
\frac{\partial y_{1,H}}{\partial x_{1,1}}
\tag{1}\\
&= \frac{\partial L}{\partial y_{1,1}}
w_{1,1}
+ \frac{\partial L}{\partial y_{1,2}}
w_{1,2}
+ \cdots
+ \frac{\partial L}{\partial y_{1,H}}
w_{1,H}
\\
&= \sum_{h=1}^H
\frac{\partial L}{\partial y_{1,h}}
w_{1,h}
\end{align}
$$
となります。
$\frac{\partial L}{\partial \mathbf{X}}$の他の要素も同様に求められます。$x_{N,D}$に関する$L$の微分であれば、$x_{N,D}$は$y_{N,1}, y_{N,2}, \cdots, y_{N,H}$に影響しているので
$$
\begin{aligned}
\frac{\partial L}{\partial x_{N,D}}
&= \frac{\partial L}{\partial y_{N,1}}
\frac{\partial y_{N,1}}{\partial x_{N,D}}
+ \frac{\partial L}{\partial y_{N,2}}
\frac{\partial y_{N,2}}{\partial x_{N,D}}
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
\frac{\partial y_{N,H}}{\partial x_{N,D}}
\\
&= \frac{\partial L}{\partial y_{N,1}}
\frac{\partial}{\partial x_{N,D}} \left(
\sum_{d=1}^D x_{N,d} w_{d,1} + b_1
\right)
+ \frac{\partial L}{\partial y_{N,2}}
\frac{\partial}{\partial x_{N,D}} \left(
\sum_{d=1}^D x_{N,d} w_{d,2} + b_2
\right)
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
\frac{\partial}{\partial x_{N,D}} \left(
\sum_{d=1}^D x_{N,d} w_{d,H} + b_H
\right)
\\
&= \frac{\partial L}{\partial y_{N,1}}
w_{D,1}
+ \frac{\partial L}{\partial y_{N,2}}
w_{D,2}
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
w_{D,H}
\\
&= \sum_{h=1}^H
\frac{\partial L}{\partial y_{N,h}}
w_{D,h}
\end{aligned}
$$
となります。
したがって、$\frac{\partial L}{\partial \mathbf{X}}$にそれぞれ代入すると
$$
\begin{aligned}
\frac{\partial L}{\partial \mathbf{X}}
&= \begin{pmatrix}
\sum_{h=1}^H \frac{\partial L}{\partial y_{1,h}} w_{1,h} &
\sum_{h=1}^H \frac{\partial L}{\partial y_{1,h}} w_{2,h} &
\cdots &
\sum_{h=1}^H \frac{\partial L}{\partial y_{1,h}} w_{D,h} \\
\sum_{h=1}^H \frac{\partial L}{\partial y_{2,h}} w_{1,h} &
\sum_{h=1}^H \frac{\partial L}{\partial y_{2,h}} w_{2,h} &
\cdots &
\sum_{h=1}^H \frac{\partial L}{\partial y_{2,h}} w_{D,h} \\
\vdots & \vdots & \ddots & \vdots \\
\sum_{h=1}^H \frac{\partial L}{\partial y_{N,h}} w_{1,h} &
\sum_{h=1}^H \frac{\partial L}{\partial y_{N,h}} w_{2,h} &
\cdots &
\sum_{h=1}^H \frac{\partial L}{\partial y_{N,h}} w_{D,h}
\end{pmatrix}
\end{aligned}
$$
となります。
これを行列の積の計算結果とみなすと、次の行列に分解できます。
$$
\begin{aligned}
\frac{\partial L}{\partial \mathbf{X}}
&= \begin{pmatrix}
\frac{\partial L}{\partial y_{1,1}} &
\frac{\partial L}{\partial y_{1,2}} &
\cdots &
\frac{\partial L}{\partial y_{1,H}} \\
\frac{\partial L}{\partial y_{2,1}} &
\frac{\partial L}{\partial y_{2,2}} &
\cdots &
\frac{\partial L}{\partial y_{2,H}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial L}{\partial y_{N,1}} &
\frac{\partial L}{\partial y_{N,2}} &
\cdots &
\frac{\partial L}{\partial y_{N,H}}
\end{pmatrix}
\begin{pmatrix}
w_{1,1} & w_{2,1} & \cdots & w_{D,1} \\
w_{1,2} & w_{2,2} & \cdots & w_{D,2} \\
\vdots & \vdots & \ddots & \vdots \\
w_{1,H} & w_{2,H} & \cdots & w_{D,H}
\end{pmatrix}
\\
&= \frac{\partial L}{\partial \mathbf{Y}}
\mathbf{W}^{\mathrm{T}}
\end{aligned}
$$
ここで$\mathbf{W}^{\mathrm{T}}$は、$\mathbf{W}$の転置行列です。右肩の$\mathrm{T}$は、転置を表す記号で、転置記号と呼びます。
入力の勾配$\frac{\partial L}{\partial \mathbf{X}}$は、逆伝播の入力$\frac{\partial L}{\partial \mathbf{y}}$と重み$\mathbf{W}$から求められるのが分かりました。
$\frac{\partial L}{\partial \mathbf{X}}$が逆伝播の出力です。これを前のレイヤに入力します。
・重みの勾配
続いて、重み$\mathbf{W}$に関する$L$の勾配$\frac{\partial L}{\partial \mathbf{W}}$を求めます。
重みの勾配$\frac{\partial L}{\partial \mathbf{W}}$は、重み$\mathbf{W}$と同じ形状の行列になります。
$$
\frac{\partial L}{\partial \mathbf{W}}
= \begin{pmatrix}
\frac{\partial L}{\partial w_{1,1}} &
\frac{\partial L}{\partial w_{1,2}} &
\cdots &
\frac{\partial L}{\partial w_{1,H}} \\
\frac{\partial L}{\partial w_{2,1}} &
\frac{\partial L}{\partial w_{2,2}} &
\cdots &
\frac{\partial L}{\partial w_{2,H}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial L}{\partial w_{D,1}} &
\frac{\partial L}{\partial w_{D,2}} &
\cdots &
\frac{\partial L}{\partial w_{D,H}}
\end{pmatrix}
$$
$\frac{\partial L}{\partial \mathbf{W}}$の1行1列目の要素$\frac{\partial L}{\partial w_{1,1}}$を考えます。$\frac{\partial L}{\partial w_{1,1}}$は、$\mathbf{W}$の1行1列目の要素$w_{1,1}$に関する損失$L$の微分です。
$w_{1,1}$は、$\mathbf{Y}$の1列目の$N$個の要素$y_{1,1}, y_{2,1}, \cdots, y_{N,1}$に影響(分岐)しています。よって、連鎖律によって分解した「$N$個の微分の和」で求められます。
$$
\begin{align}
\frac{\partial L}{\partial w_{1,1}}
&= \frac{\partial L}{\partial y_{1,1}}
\frac{\partial y_{1,1}}{\partial w_{1,1}}
+ \frac{\partial L}{\partial y_{2,1}}
\frac{\partial y_{2,1}}{\partial w_{1,1}}
+ \cdots
+ \frac{\partial L}{\partial y_{N,1}}
\frac{\partial y_{N,1}}{\partial w_{1,1}}
\tag{2}\\
&= \sum_{n=1}^N
\frac{\partial L}{\partial y_{n,1}}
\frac{\partial y_{n,1}}{\partial w_{1,1}}
\end{align}
$$
$\frac{\partial L}{\partial y_{1,h}}$は与えられている(次のレイヤで求めた)ので、$\frac{\partial y_{1,h}}{\partial x_{1,1}}$を求めます。
先ほどと同様に、$y_{1,1}$を$w_{1,1}$で微分すると
$$
\begin{aligned}
\frac{\partial y_{1,1}}{\partial w_{1,1}}
&= \frac{\partial}{\partial w_{1,1}} \left(
\sum_{d=1}^D x_{1,d} w_{d,1} + b_1
\right)
\\
&= \frac{\partial}{\partial w_{1,1}} \Bigl(
x_{1,1} w_{1,1} + x_{1,2} w_{2,1} + \cdots + x_{1,D} w_{D,1} + b_1
\Bigr)
\\
&= x_{1,1} + 0 + \cdots + 0 + 0
\\
&= x_{1,1}
\end{aligned}
$$
$w_{1,1}$の係数である$x_{1,1}$だけが残ります。
式(2)の他の項も同様に求められます。$w_{1,1}$に関する$y_{N,1}$の微分であれば
$$
\begin{aligned}
\frac{\partial y_{N,1}}{\partial w_{1,1}}
&= \frac{\partial}{\partial w_{1,1}} \left(
\sum_{d=1}^D x_{N,d} w_{d,1} + b_1
\right)
\\
&= \frac{\partial}{\partial w_{1,1}} \Bigl(
x_{N,1} w_{1,1} + x_{N,2} w_{2,1} + \cdots + x_{N,D} w_{D,1} + b_1
\Bigr)
\\
&= x_{N,1} + 0 + \cdots + 0 + 0
\\
&= x_{N,1}
\end{aligned}
$$
となります。
よって、式(2)にそれぞれ代入すると
$$
\begin{align}
\frac{\partial L}{\partial w_{1,1}}
&= \frac{\partial L}{\partial y_{1,1}}
\frac{\partial y_{1,1}}{\partial w_{1,1}}
+ \frac{\partial L}{\partial y_{2,1}}
\frac{\partial y_{2,1}}{\partial w_{1,1}}
+ \cdots
+ \frac{\partial L}{\partial y_{N,1}}
\frac{\partial y_{N,1}}{\partial w_{1,1}}
\tag{2}\\
&= \frac{\partial L}{\partial y_{1,1}}
x_{1,1}
+ \frac{\partial L}{\partial y_{2,1}}
x_{2,1}
+ \cdots
+ \frac{\partial L}{\partial y_{N,1}}
x_{N,1}
\\
&= \sum_{n=1}^N
x_{n,1}
\frac{\partial L}{\partial y_{n,1}}
\end{align}
$$
となります。(後で都合がいいので、$x_{n,1}$と$\frac{\partial L}{\partial y_{n,1}}$の順番を入れ換えました。)
$\frac{\partial L}{\partial \mathbf{W}}$の他の要素も同様に求められます。$w_{D,H}$に関する$L$の微分であれば、$w_{D,H}$は$y_{1,H}, y_{2,H}, \cdots, y_{N,H}$に影響しているので
$$
\begin{aligned}
\frac{\partial L}{\partial w_{D,H}}
&= \frac{\partial L}{\partial y_{1,H}}
\frac{\partial y_{1,H}}{\partial w_{D,H}}
+ \frac{\partial L}{\partial y_{2,H}}
\frac{\partial y_{2,H}}{\partial w_{D,H}}
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
\frac{\partial y_{N,H}}{\partial w_{D,H}}
\\
&= \frac{\partial L}{\partial y_{1,H}}
\frac{\partial}{\partial w_{D,H}} \left(
\sum_{d=1}^D x_{1,d} w_{d,H} + b_H
\right)
+ \frac{\partial L}{\partial y_{2,H}}
\frac{\partial}{\partial w_{D,H}} \left(
\sum_{d=1}^D x_{2,d} w_{d,H} + b_H
\right)
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
\frac{\partial}{\partial w_{D,H}} \left(
\sum_{d=1}^D x_{N,d} w_{d,H} + b_H
\right)
\\
&= \frac{\partial L}{\partial y_{1,H}}
x_{1,D}
+ \frac{\partial L}{\partial y_{2,H}}
x_{2,D}
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
x_{N,D}
\\
&= \sum_{n=1}^N
x_{n,D}
\frac{\partial L}{\partial y_{n,H}}
\end{aligned}
$$
となります。
したがって、$\frac{\partial L}{\partial \mathbf{W}}$にそれぞれ代入すると
$$
\frac{\partial L}{\partial \mathbf{W}}
= \begin{pmatrix}
\sum_{n=1}^N x_{n,1} \frac{\partial L}{\partial y_{n,1}} &
\sum_{n=1}^N x_{n,1} \frac{\partial L}{\partial y_{n,2}} &
\cdots &
\sum_{n=1}^N x_{n,1} \frac{\partial L}{\partial y_{n,H}} \\
\sum_{n=1}^N x_{n,2} \frac{\partial L}{\partial y_{n,1}} &
\sum_{n=1}^N x_{n,2} \frac{\partial L}{\partial y_{n,2}} &
\cdots &
\sum_{n=1}^N x_{n,2} \frac{\partial L}{\partial y_{n,H}} \\
\vdots & \vdots & \ddots & \vdots \\
\sum_{n=1}^N x_{n,D} \frac{\partial L}{\partial y_{n,1}} &
\sum_{n=1}^N x_{n,D} \frac{\partial L}{\partial y_{n,2}} &
\cdots &
\sum_{n=1}^N x_{n,D} \frac{\partial L}{\partial y_{n,H}}
\end{pmatrix}
$$
となります。
これを行列の積の計算結果とみなすと、次の行列に分解できます。
$$
\begin{align}
\frac{\partial L}{\partial \mathbf{W}}
&= \begin{pmatrix}
x_{1,1} & x_{2,1} & \cdots & x_{N,1} \\
x_{1,2} & x_{2,2} & \cdots & x_{N,2} \\
\vdots & \vdots & \ddots & \vdots \\
x_{1,D} & x_{2,D} & \cdots & x_{N,D}
\end{pmatrix}
\begin{pmatrix}
\frac{\partial L}{\partial y_{1,1}} &
\frac{\partial L}{\partial y_{1,2}} &
\cdots &
\frac{\partial L}{\partial y_{1,H}} \\
\frac{\partial L}{\partial y_{2,1}} &
\frac{\partial L}{\partial y_{2,2}} &
\cdots &
\frac{\partial L}{\partial y_{2,H}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial L}{\partial y_{N,1}} &
\frac{\partial L}{\partial y_{N,2}} &
\cdots &
\frac{\partial L}{\partial y_{N,H}}
\end{pmatrix}
\\
&= \mathbf{X}^{\mathrm{T}}
\frac{\partial L}{\partial \mathbf{Y}}
\tag{5.13}
\end{align}
$$
ここで、$\mathbf{X}^{\mathrm{T}}$は$\mathbf{X}$の転置行列です。
重みの勾配$\frac{\partial L}{\partial \mathbf{W}}$は、逆伝播の入力$\frac{\partial L}{\partial \mathbf{Y}}$と順伝播の入力$\mathbf{X}$から求められるのが分かりました。
$\frac{\partial L}{\partial \mathbf{W}}$を用いて、$\mathbf{W}$を更新します。
・バイアスの勾配
最後に、バイアス$\mathbf{b}$に関する損失$L$の勾配$\frac{\partial L}{\partial \mathbf{b}}$を導出します。
バイアスの勾配$\frac{\partial L}{\partial \mathbf{b}}$は、バイアス$\mathbf{b}$と同じ形状のベクトルになります。
$$
\frac{\partial L}{\partial \mathbf{b}}
= \begin{pmatrix}
\frac{\partial L}{\partial b_1} &
\frac{\partial L}{\partial b_2} &
\cdots &
\frac{\partial L}{\partial b_H}
\end{pmatrix}
$$
$\frac{\partial L}{\partial \mathbf{b}}$の1つ目の要素$\frac{\partial L}{\partial b_1}$を考えます。$\frac{\partial L}{\partial b_1}$は、$\mathbf{b}$の1つ目の要素$b_1$に関する損失$L$の微分です。
$b_1$は、$\mathbf{Y}$の1列目の$N$個の要素$y_{1,1}, y_{2,1}, \cdots, y_{N,1}$に影響(分岐)しています。よって、連鎖律によって分解した「$N$個の微分の和」で求められます。
$$
\begin{align}
\frac{\partial L}{\partial b_1}
&= \frac{\partial L}{\partial y_{1,1}}
\frac{\partial y_{1,1}}{\partial b_1}
+ \frac{\partial L}{\partial y_{2,1}}
\frac{\partial y_{2,1}}{\partial b_1}
+ \cdots
+ \frac{\partial L}{\partial y_{N,1}}
\frac{\partial y_{N,1}}{\partial b_1}
\tag{3}\\
&= \sum_{n=1}^N
\frac{\partial L}{\partial y_{n,1}}
\frac{\partial y_{n,1}}{\partial b_1}
\end{align}
$$
$\frac{\partial L}{\partial y_{n,1}}$は与えられている(次のレイヤで求めた)ので、$\frac{\partial y_{n,1}}{\partial b_1}$を求めます。
これまでと同様に、$y_{1,1}$を$b_1$で微分すると
$$
\begin{aligned}
\frac{\partial y_{1,1}}{\partial b_1}
&= \frac{\partial}{\partial b_1} \left(
\sum_{h=1}^H x_{1,d} w_{d,1} + b_1
\right)
\\
&= \frac{\partial}{\partial b_1} \Bigl(
x_{1,1} w_{1,1} + x_{1,2} w_{2,1} + \cdots + x_{1,D} w_{D,1} + b_1
\Bigr)
\\
&= 0 + 0 + \cdots 0 + 1
\\
&= 1
\end{aligned}
$$
$b_1$を$b_1$で微分した1だけが残ります。
式(3)の他の項も同様に求められます。$b_1$に関する$y_{N,1}$の微分であれば
$$
\begin{aligned}
\frac{\partial y_{N,1}}{\partial b_1}
&= \frac{\partial}{\partial b_H} \left(
\sum_{h=1}^H x_{N,d} w_{d,1} + b_1
\right)
\\
&= \frac{\partial}{\partial b_1} \Bigl(
x_{N,1} w_{1,1} + x_{N,2} w_{2,1} + \cdots + x_{N,D} w_{D,1} + b_1
\Bigr)
\\
&= 0 + 0 + \cdots + 0 + 1
\\
&= 1
\end{aligned}
$$
となります。
よって、式(3)にそれぞれ代入すると
$$
\begin{align}
\frac{\partial L}{\partial b_1}
&= \frac{\partial L}{\partial y_{1,1}}
\frac{\partial y_{1,1}}{\partial b_1}
+ \frac{\partial L}{\partial y_{2,1}}
\frac{\partial y_{2,1}}{\partial b_1}
+ \cdots
+ \frac{\partial L}{\partial y_{N,1}}
\frac{\partial y_{N,1}}{\partial b_1}
\tag{3}\\
&= \frac{\partial L}{\partial y_{1,1}} * 1
+ \frac{\partial L}{\partial y_{2,1}} * 1
+ \cdots
+ \frac{\partial L}{\partial y_{N,1}} * 1
\\
&= \sum_{n=1}^N
\frac{\partial L}{\partial y_{n,1}}
\end{align}
$$
となります。
$\frac{\partial L}{\partial \mathbf{b}}$の他の項も同様に求められます。$b_H$に関する$L$の微分であれば、$b_H$は$y_{1,H}, y_{2,H}, \cdots, y_{N,H}$に影響しているので
$$
\begin{aligned}
\frac{\partial L}{\partial b_H}
&= \frac{\partial L}{\partial y_{1,H}}
\frac{\partial y_{1,H}}{\partial b_H}
+ \frac{\partial L}{\partial y_{2,H}}
\frac{\partial y_{2,H}}{\partial b_H}
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
\frac{\partial y_{N,H}}{\partial b_H}
\\
&= \frac{\partial L}{\partial y_{1,H}}
\frac{\partial}{\partial b_H} \left(
\sum_{d=1}^D x_{1,d} w_{d,H} + b_H
\right)
+ \frac{\partial L}{\partial y_{2,H}}
\frac{\partial}{\partial b_H} \left(
\sum_{d=1}^D x_{2,d} w_{d,H} + b_H
\right)
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}}
\frac{\partial}{\partial b_H} \left(
\sum_{d=1}^D x_{N,d} w_{d,H} + b_H
\right)
\\
&= \frac{\partial L}{\partial y_{1,H}} * 1
+ \frac{\partial L}{\partial y_{2,H}} * 1
+ \cdots
+ \frac{\partial L}{\partial y_{N,H}} * 1
\\
&= \sum_{n=1}^N
\frac{\partial L}{\partial y_{n,H}}
\end{aligned}
$$
となります。
したがって、$\frac{\partial L}{\partial \mathbf{b}}$にそれぞれ代入すると
$$
\frac{\partial L}{\partial \mathbf{b}}
= \begin{pmatrix}
\sum_{n=1}^N \frac{\partial L}{\partial y_{n,1}} &
\sum_{n=1}^N \frac{\partial L}{\partial y_{n,2}} &
\cdots &
\sum_{n=1}^N \frac{\partial L}{\partial y_{n,H}}
\end{pmatrix}
$$
が得られます。
バイアスの勾配$\frac{\partial L}{\partial \mathbf{b}}$は、逆伝播の入力$\frac{\partial L}{\partial \mathbf{y}}$を行方向に和をとった値と分かりました。
$\frac{\partial L}{\partial \mathbf{b}}$を用いて、$\mathbf{b}$を更新します。
以上で、バッチデータを扱う場合のAffineレイヤの逆伝播を導出できました。
どの勾配も逆伝播の入力と順伝播の変数を用いて計算できます。このため、余計な途中計算を省略できるため計算効率が良くなり、また中間変数を持たなくていいためメモリ効率も良く学習を行えます。
メモ
うまく言語化できなかったのでメモとして書いておきます。
要素が複数に分岐するRepeatノードの逆伝播では、総和をとる必要があります(2巻1.3.4.3項)。それを式(1)(2)(3)で表現しました。
$L$を$x_{n,d}$で微分することを考えます。$x_{n,d}$は$\mathbf{y}_n$の全ての項に影響しているので、連鎖律より
$$
\frac{\partial L}{\partial x_{n,d}}
= \frac{\partial L}{\partial \mathbf{y}_n}
\frac{\partial \mathbf{y}_n}{\partial x_{n,d}}
$$
に分解できます。
それぞれ次の横ベクトルと縦ベクトル
$$
\frac{\partial L}{\partial x_{n,d}}
= \begin{pmatrix}
\frac{\partial L}{\partial y_{n,1}} &
\frac{\partial L}{\partial y_{n,2}} &
\cdots &
\frac{\partial L}{\partial y_{n,H}}
\end{pmatrix}
\begin{pmatrix}
\frac{\partial y_{n,1}}{\partial x_{n,d}} \\
\frac{\partial y_{n,2}}{\partial x_{n,d}} \\
\cdots \\
\frac{\partial y_{n,H}}{\partial x_{n,d}}
\end{pmatrix}
$$
になります。(この「(スカラを横ベクトルで微分したとき横ベクトルになるとすると、)横ベクトルをスカラで微分すると縦ベクトルになる」という今後登場しないルールを書きたくなかった。)
このベクトルの積(内積)を計算すると
$$
\frac{\partial L}{\partial x_{n,d}}
= \sum_{h=1}^H
\frac{\partial L}{\partial y_{n,h}}
\frac{\partial y_{n,h}}{\partial x_{n,d}}
$$
となります。この式が式(1)に対応しています。
$\frac{\partial y_{n,h}}{\partial x_{n,d}} = w_{d,h}$で置き換えると
$$
\frac{\partial L}{\partial x_{n,d}}
= \sum_{h=1}^H
\frac{\partial L}{\partial y_{n,h}}
w_{d,h}
$$
$\frac{\partial L}{\partial \mathbf{x}}$の各項の計算式が求まりました。
参考文献
- 斎藤康毅『ゼロから作るDeep Learning』オライリー・ジャパン,2016年.
おわりに
重みでの微分を導出できませんでした、、、行列を行列で偏微分したら4階テンソルなるものになるのですか?それを勉強すれば解けるのですか?正攻法での勉強を避けて、雰囲気で解いてたら1か月が経っていました。更新の期間が空いてしまったのは、前項も含めてAffineレイヤの逆伝播の導出に時間がかかった所為です(それ自体は別にいい(よくある))。あぁしかしなんちゃって読解を公開するのキツい。。
3巻をやっているときにようやく導出できました。2巻の分岐ノードのところを読むと理解しやすくなると思います。
で理解できたのはとても喜ばしいのですが、少し勘違いして3巻の解説記事としてその導出過程を書いちゃいました。後でこの未完の記事と内容が全く一緒じゃんと気付きました。でこの記事をどうしたものか暫く悩んだのですが、こっちの記事はより細々丁寧に(あるいはくどくどと)書くことにしました。逆に分かりにくいという人は下にリンクを貼った記事も読んでみてください。
2020年8月4日は「こぶしファクトリー」リーダー広瀬彩海さん21歳のお誕生日!
おめでとうございます。
【関連する記事】
線形変換という呼び方になっていますが、Affineレイヤと同じ内容です。こっちの記事の方が端的に解説しているので、この記事の書き方がくどくどしていて結局何言ってんのか分かんねという方はこっちの記事の方が分かりやすいと思います。
www.anarchive-beta.com
www.anarchive-beta.com
www.anarchive-beta.com