スコルの知恵袋

主にプログラミング関係の気になったこと等をまとめたブログ

『ゼロから作るDeep Learning』のバッチ版Affineレイヤの話(pp.150-152)

p.151 の中腹に

逆伝播の際には、それぞれのデータの逆伝播の値がバイアスの要素に集約される必要があります。

と書いてありますが,本文にはその理由が書かれていなかったので一応数式によって確かめてみます.

 \textbf{B}を縦にデータの個数Nだけ重ねた行列を \bar{\textbf{B}}とします.すなわち,

 \displaystyle{
\bar{\textbf{B}} = 
\begin{bmatrix}
    \textbf{B} \\
    \vdots \\
    \textbf{B}
\end{bmatrix}
}

このとき,バッチ版の \textbf{X} \textbf{Y}について次が成り立ちます.

 \displaystyle{
\textbf{Y} = \textbf{X} \cdot \textbf{W} + \bar{\textbf{B}}
}

これを成分表示して両辺を \bar{b}_{ij}微分することによって次式を得ます.

 \displaystyle{
\frac{\partial y_{pq}}{\partial \bar{b}_{ij}} = \delta_{ip} \delta_{jq}
}

よって,


\begin{aligned}
\frac{\partial L}{\partial \bar{b}_{ij}} &= \sum_{p, q} \frac{\partial L}{\partial y_{pq}} \frac{\partial y_{pq}}{\partial \bar{b}_{ij}} \\
&= \sum_{p, q} \frac{\partial L}{\partial y_{pq}} \delta_{ip} \delta_{jq} \\
&= \frac{\partial L}{\partial y_{ij}}
\end{aligned}

以上より,


\begin{aligned}
\frac{\partial L}{\partial b_{j}} &= \sum_{p, q} \frac{\partial L}{\partial \bar{b}_{pq}} \frac{\partial \bar{b}_{pq}}{\partial b_{j}} \\
&= \sum_{p, q} \frac{\partial L}{\partial \bar{b}_{pq}} \delta_{jq} \\
&= \sum_{p} \frac{\partial L}{\partial y_{pj}}
\end{aligned}

となり,たしかに \displaystyle{ \frac{\partial L}{\partial \textbf{B}} }を求めるためには \displaystyle{ \frac{\partial L}{\partial \textbf{Y}} }を0番目の軸に沿って足し合わせれば良いことがわかりました.