全結合型ニューラルネットワークの逆伝搬の式の覚え方

# はじめに
全結合型ニューラルネットワークの逆伝搬の式の計算で、行列のどれの転置をとるのか、どっちからかけるのか、ということが良くわからなくなります。そういう時は、各行列の次元を考えればよいですね。

# 行列の基本的なこと
### 行列の掛け算
行列
A[l, m] : l行m列
B[m, n] : m行n列
のとき、行列の掛け算でC=ABを計算すると
C[l, n]=A[l, m]B[m, n]
となって、l行n列の行列Cとなる。
真ん中のmの数字が同じ時、mに関して掛け合わせることができるのでmの数字が消えて、残りのインデックスが残った行列ができる。
なので、B[m, n]A[l, m]の掛け算を行うことはできない。

### 行列の転置
A[l, m]の行列の転置をとるとは行と列を入れ替えることで、
$A^T$と表し、次元は[m, l]になる。
$A^T[m, l]$

# 各パラメータの次元の確認

入力側のノード数：$d_1$
出力側のノード数：$d_2$
バッチサイズ：$N$
であるとき、

入力側のデータ: $X[N, d_1]$
出力側のデータ: $Y[N, d_2]$
で表すことができ、この時の重み係数とバイアス係数は、

重み係数：$W[d_1, d_2]$
バイアス係数: $b[d_2]$
で表すことができる。

このとき、
$Y[N, d_2]=X[N, d_1]W[d_1, d_2]+b[d_2]$
という関係式がなりたつ。$d_1$が掛け合わされてなくなり、$[N, d_2]$の次元になっている。
行列の足し算は、numpy式？で計算される。

# 逆伝搬の式
勾配を求めるとは、損失関数$L$に対して、
$\frac{\partial L}{\partial X}$, $\frac{\partial L}{\partial W}$, $\frac{\partial L}{\partial b}$
を求めるという事。この勾配を求めるときはどれも
$\frac{\partial L}{\partial Y}[N, d_{2}]$
を用いる。

## 入力の勾配 
$\frac{\partial L}{\partial X}=\frac{\partial L}{\partial Y}\frac{\partial Y}{\partial X}$であって$\frac{\partial Y}{\partial X}$は$W$である。
なので、$\frac{\partial L}{\partial Y}[N, d_{2}]$に$W[d_1, d_2]$をかけることで入力の勾配$\frac{\partial L}{\partial X}[N, d_1]$が得られる。
次元に注意すれば
$\frac{\partial L}{\partial X}[N, d_1]=\frac{\partial L}{\partial Y}[N, d_{2}]W^T[d_2, d_1]$
となる。

```math
\frac{\partial L}{\partial X}=\frac{\partial L}{\partial Y}W^T
```

## 重みパラメータの勾配
$\frac{\partial L}{\partial Y}[N, d_{2}]$に$X[N, d_1]$をかけることで重みパラメータの勾配$\frac{\partial L}{\partial W}[d_1, d_2]$が得られる。
次元に注意すれば
$\frac{\partial L}{\partial W}[d_1, d_2]=X^{T}[d_1, N]\frac{\partial L}{\partial Y}[N, d_{2}]$
となる。

```math
\frac{\partial L}{\partial W}=X^{T}\frac{\partial L}{\partial Y}
```

## バイアスパラメータの勾配
$\frac{\partial L}{\partial Y}[N, d_{2}]$に$\frac{\partial Y}{\partial b}$をかけることでバイアスパラメータの勾配を求めることができる。これはN個の要素が全て1である行列[N]になるので、


```math
\frac{\partial L}{\partial b}=(\frac{\partial L}{\partial Y}をサンプル方向に足したもの)
```

## 別の表記
次の式が基本にある。

```math
dL=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} dy_{ij}
```

### 入力の勾配

```math
\frac{\partial L}{\partial x_{kl}}=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} \frac{\partial y_{ij}}{\partial x_{kl}}
```
同じサンプリングのとこだけが残るので、iに関する和は消える。つまり、

```math
\frac{\partial L}{\partial x_{kl}}=\sum_{j}\frac{\partial L}{\partial y_{kj}} \frac{\partial y_{kj}}{\partial x_{kl}}
```

$\frac{\partial y_{kj}}{\partial x_{kl}}$は、$w_{lj}$になるので、結局、

```math
\frac{\partial L}{\partial x_{kl}}=\sum_{j}\frac{\partial L}{\partial y_{kj}} w_{lj}
```

### 重みパラメータの勾配

```math
\frac{\partial L}{\partial w_{mn}}=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} \frac{\partial y_{ij}}{\partial w_{mn}}
```

ここで、

```math
y_{ij}=\sum_{k}x_{ik}w_{kj}+b_{j}
```

なので、

```math
\frac{\partial y_{ij}}{\partial w_{mn}}=\sum_{k}x_{ik}\frac{\partial w_{kj}}{\partial w_{mn}}=\sum_{k}x_{ik}\delta_{km} \delta_{jn}=x_{im}\delta_{jn}
```

という関係式に注意すれば、

```math
\begin{align}
\frac{\partial L}{\partial w_{mn}} & = \sum_{i, j}\frac{\partial L}{\partial y_{ij}} x_{im} \delta_{jn}\\
&= \sum_{i}\frac{\partial L}{\partial y_{in}} x_{im} 
\end{align}
```

### バイアスパラメータの勾配

```math
\frac{\partial L}{\partial b_{l}}=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} \frac{\partial y_{ij}}{\partial b_{l}}
```
これは、$\frac{\partial y_{ij}}{\partial b_{l}}=\delta_{jl}$なので、結局次の通りになる。

```math
\frac{\partial L}{\partial b_{l}}=\sum_{i}\frac{\partial L} {\partial y_{il}}
```

すなわち、サンプリング方向の和になっている。