FC网络BP公式推导

Last Updated: 2023-04-12 09:48:03 Wednesday

-- TOC --

最开始学习神经网络时所使用的教材,并没有涉及计算图的知识,就是在推倒数学公式。后来认真研究了计算图后,发现本文所涉及的数学公式推倒,太难了,实际实现时,大家都用计算图。

我喜欢用FC网络来表示feed forward Fully Connected neural network,因为似乎找不到更简洁的词汇。本文推导FC网络BP算法的4个公式。

首先推导最后一层网络神经元对应的梯度,L表示最后一层,*表示hadamard product (与numpy中的*符号保持一致)。

$$\begin{align} \delta^L&=\frac{\partial C}{\partial z^L} \notag \\ &=\frac{\partial C}{\partial a^L}\frac{\partial a^L}{\partial z^L} \notag \\ &=\nabla_{a}C * \sigma'(z^L) \tag{1} \end{align}$$

$$\begin{align} \delta_j^{l} &= \frac{\partial C}{\partial z_j^{l}} \notag \\ &= \sum_k \frac{\partial C}{\partial z_k^{l+1}} \frac{\partial z_k^{l+1}}{\partial z_j^l} \notag \\ &= \sum_k \delta_k^{l+1} \frac{\partial z_k^{l+1}}{\partial z_j^l} \notag\end{align}$$

这个式子求和的由来,l层的某个神经元的激活输出,会传递到l+1层所有神经元,因此这个输出对整个网络cost的影响,就分散到了l+1层每一个神经元身上,而最后计算得到的cost,是一个值,把最后一层的那个偏差vector的每个元素加在了一起,来表示cost。

$$\begin{align} \delta_j^{l} &= \frac{\partial C}{\partial z_j^{l}} \notag \\ &= \sum_k \frac{\partial C}{\partial z_k^{l+1}} \frac{\partial z_k^{l+1}}{\partial z_j^l} \notag \\ &= \sum_k \delta_k^{l+1} \frac{\partial z_k^{l+1}}{\partial z_j^l} \notag \\ &= \sum_k \delta_k^{l+1} \frac{\partial (\sum_j w_{kj}^{l+1}a_j^l+b_k^{l+1})}{\partial z_j^l} \notag \\ &= \sum_k \delta_k^{l+1} w_{kj}^{l+1} \sigma'(z_j^l) \notag\end{align}$$

\(\delta_j^l\) 只是\(l\)层的一个元素,这个式子已经体现出了BP后向传播的精髓,\(l+1\)层的数据通过w向l层汇聚。考虑全部l层,可以得到如下公式:

$$\delta^l = (w^{l+1})^T \delta^{l+1} * \sigma'(z^l) \tag{2}$$

这种推导,就是数学归纳法,知道L层,计算\(L-1\)层.....Back Propagation...

得到了FC网络每一层的 \(\delta^l\),我们就可以轻松得到对应的\(w\)和\(b\)的梯度:

$$\begin{align} \frac{\partial C}{\partial w_{jk}^l} &= \frac{\partial C}{\partial z_j^l} \frac{\partial z_j^l}{\partial w_{jk}^l} \notag \\ &= \delta_j^l \cdot a_k^{l-1} \notag \end{align}$$

这是每一个\(w\)的梯度,整个\(l\)层的\(w\)的梯度,可以用下面这这个式子来表示:

$$\frac{\partial C}{\partial w^l} = \delta^l \cdot (a^{l-1})^T \tag{3}$$

最后是\(b\)的梯度:

$$\frac{\partial C}{\partial b^l} = \delta^l \tag{4}$$

以上(1)(2)(3)(4)四个式子,就是经典的BP算法!

本文链接:https://cs.pynote.net/ag/ml/ann/202302021/

-- EOF --

-- MORE --