Neural Network反向传播算法推导

        对于机器学习的初学者来说,反向传播算法应该算是碰到的第一个难点。若是能从数学原理上解释清楚算法的做法以及为什么这么做,将使大家对算法的理解更加透彻。因此,本文将对反向传播算法进行阐释并做相对详细的数学推导,希望能帮到大家!

        注:本文假定读者已熟悉前向传播过程。

一.符号说明

符号说明
L总层次数
K输出层单元数
s_l(l=1,2,...,L)第 l 层单元数(不包括偏置单元)
a^{(l)}第 l 层的激活值向量
\Theta ^{(l)}_{s_{l+1}\times s_{l}}第 l 层到第 l+1 层的权重矩阵(不包含偏置项对应的参数\theta _{0}

二.反向传播算法推导

        首先明确一点,我们在训练神经网络时,需要运行梯度下降对参数\theta进行迭代,那么我们就需要求出代价函数J(\theta)对所有的参数\theta的导数。反向传播算法正是这样一种计算\frac{\partial J(\theta)}{\partial \theta}的方法。它的本质就是计算导数。 

我们先来看一下代价函数:                                                                                                                  

J(\theta )=-\frac{1}{m}\sum_{i=1}^{m}\sum_{k=1}^{K}[y_{k}^{(i)}log(h_{\theta }(x^{(i)})_{k})+(1-y_{k}^{(i)})log(1-h_{\theta }(x^{(i)})_{k})]

不妨,我们只对单次输入进行推导,输入值:x\in R^{s_1},y\in R^{K} 记:

J(\theta )=-\sum_{k=1}^{K}[y_{k}log(h_{\theta }(x)_{k})+(1-y_{k})log(1-h_{\theta }(x)_{k})]

其中,y_{k} :输出层中第k个单元的真实值;

           (h_{\theta}(x))_{k}:输出层中第k个单元的计算值

 

1.求J\Theta^{(L-1)}的导数。

        先求J\Theta^{(L-1)}中每个元素的导数,由复合函数的链式求导法则

\frac{\partial J(\theta)}{\partial \theta_{ij}^{(L-1)}}=\frac{\partial J(\theta)}{\partial a_{i}^{(L)}}\cdot \frac{\partial a_{i}^{(L)}}{\partial z_{i}^{(L)}}\cdot\frac{\partial z_{i}^{(L)}}{\partial \theta_{ij}^{(L-1)}}

        其中,

                                

\frac{\partial J(\theta)}{\partial a_{i}^{(L)}}=-(\frac{y_{i}}{a_{i}^{(L)}}+\frac{y_{i}-1}{1-a_{i}^{(L)}})=\frac{a_{i}^{(L)}-y_{i}}{a_{i}^{(L)}(1-a_{i}^{(L)})}

\frac{\partial a_{i}^{(L)}}{\partial z_{i}^{(L)}}=\frac{1}{(1-e^{z_{i}^{(L)}})^{2}}=\frac{1}{1-e^{z_{i}^{(L)}}}\cdot(1-\frac{1}{1-e^{z_{i}^{(L)}}})=a_{i}^{(L)}\cdot(1-a_{i}^{(L)})

\frac{\partial z_{i}^{(L)}}{\partial \theta_{ij}^{(L-1)}}=a^{(L-1)}_{j}

                                                

\therefore\frac{\partial J(\theta)}{\partial \Theta_{ij}^{(L-1)}}=(a_{i}^{(L)}-y_{i})\cdot a^{(L-1)}_{j}

 

        因此J\Theta^{(L-1)}的导数为:

                                          

\frac{\partial J(\theta)}{\partial \Theta^{(L-1)}}=\begin{bmatrix} (a_{1}^{(L)}-y_{1})\cdot a^{(L-1)}_{0}& (a_{1}^{(L)}-y_{1})\cdot a^{(L-1)}_{1}& ...& (a_{1}^{(L)}-y_{1})\cdot a^{(L-1)}_{s_{L-1}}&\\ (a_{2}^{(L)}-y_{2})\cdot a^{(L-1)}_{0}& ...& ...& ...& \\ ...&... & ...& ...& \\ (a_{s_{L}}^{(L)}-y_{s_{L}})\cdot a^{(L-1)}_{0}& ...& ...& (a_{s_{L}}^{(L)}-y_{s_{L}})\cdot a^{(L-1)}_{s_{L-1}}& \end{bmatrix}

             记:

                          

\frac{\partial J(\theta)}{\partial z^{(L)}_{i}}=\frac{\partial J(\theta)}{\partial a_{i}^{(L)}}\cdot \frac{\partial a_{i}^{(L)}}{\partial z_{i}^{(L)}}=\delta ^{(L)}_{i} = a^{(L)}_{i}-y_{i}

\frac{\partial J(\theta)}{\partial z^{(L)}}=\delta ^{(L)} = a^{(L)}-y= \begin{bmatrix} a^{(L)}_{1}-y_{1}\\ a^{(L)}_{2}-y_{2}\\ ...\\ a^{(L)}_{s_{L}}-y_{s_{L}} \end{bmatrix}

                则:                                        

\frac{\partial J(\theta)}{\partial \Theta^{(L-1)}}= \delta ^{(L)}\cdot (a^{(L-1)})^{T}

 

2.求J\Theta^{(L-2)}的导数

                ​​​​​​​        ​​​​​​​        ​​​​​​​        

\frac{\partial J(\theta)}{\partial \theta_{ij}^{(L-2)}}=\frac{\partial J(\theta)}{\partial a_{i}^{(L-1)}}\cdot \frac{\partial a_{i}^{(L-1)}}{\partial z_{i}^{(L-1)}}\cdot\frac{\partial z_{i}^{(L-1)}}{\partial \theta_{ij}^{(L-2)}}

        其中,

\frac{\partial J(\theta)}{\partial a_{i}^{(L-1)}}=\sum_{k=1}^{s_{L}}\frac{\partial J(\theta)}{\partial z^{(L)}_{k}}\cdot \frac{\partial z^{(L)}_{k}}{\partial a_{i}^{(L-1)}}=\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{ki}

                                

\frac{\partial a_{i}^{(L-1)}}{\partial z_{i}^{(L-1)}}=a_{i}^{(L-1)}\cdot (1-a_{i}^{(L-1)})

                                

\frac{\partial z_{i}^{(L-1)}}{\partial \theta_{ij}^{(L-2)}}=a^{(L-2)}_{j}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

\therefore\frac{\partial J(\theta)}{\partial \theta_{ij}^{(L-2)}}=(\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{ki})\cdot (a_{i}^{(L-1)} (1-a_{i}^{(L-1)}))\cdot a^{(L-2)}_{j}

        因此J\Theta^{(L-2)}的导数为:

\frac{\partial J(\theta)}{\partial \Theta^{(L-2)}}=\begin{bmatrix} (\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{k1})\cdot (a_{1}^{(L-1)} (1-a_{1}^{(L-1)}))\cdot a^{(L-2)}_{0}& (\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{k1})\cdot (a_{1}^{(L-1)} (1-a_{1}^{(L-1)}))\cdot a^{(L-2)}_{1}& ...&(\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{k1})\cdot (a_{1}^{(L-1)} (1-a_{1}^{(L-1)}))\cdot a^{(L-2)}_{s_{L-2}} \\ (\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{k2})\cdot (a_{2}^{(L-1)} (1-a_{2}^{(L-1)}))\cdot a^{(L-2)}_{0} & ...& ...& ...\\ ...& ...& ...& ...\\ (\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{ks_{L-1}})\cdot (a_{s_{L-1}}^{(L-1)} (1-a_{s_{L-1}}^{(L-1)}))\cdot a^{(L-2)}_{0}& ...& ...&(\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\cdot\Theta^{(L-1)}_{ks_{L-1}})\cdot (a_{is_{L-1}}^{(L-1)} (1-a_{s_{L-1}}^{(L-1)}))\cdot a^{(L-2)}_{s_{L-2}} \end{bmatrix}

        记

\frac{\partial J(\theta))}{\partial z^{(L-1)}_{i}}=\frac{\partial J(\theta)}{\partial a_{i}^{(L-1)}}\cdot \frac{\partial a_{i}^{(L-1)}}{\partial z_{i}^{(L-1)}}=\delta ^{(L-1)}_{i}=\sum_{k=1}^{s_{L}}\delta ^{(L)}_{k}\Theta^{(L-1)}_{ki}\cdot a_{i}^{(L-1)} (1-a_{i}^{(L-1)})

        ​​​​​​​        ​​​​​​​        \frac{\partial J(\theta))}{\partial z^{(L-1)}}=\delta ^{(L-1)}=(\Theta^{(L-1)})^{T}\cdot \delta^{(L)}\odot \frac{\partial a^{(L-1)}}{\partial z^{(L-1)}}

        注意:此处的矩阵\Theta^{(L-1)}与前向传播中的\Theta^{(L-1)}不同,此处不包含偏置项所对应的参数。(从 J\Theta^{(L-2)} 的形式也可以看出。)

        事实上,因为前向传播过程中,第 l 层的激活值对 l+1 层的偏置项没有影响,亦即第 l +1层偏置项并不是关于 l 层的激活值的函数,自然对l层的激活值求导时,并不会出现与 l+1层有关的参数。

        有了以上的记法,则

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\partial J(\theta)}{\partial \Theta^{(L-2)}}= \delta ^{(L-1)}\cdot (a^{(L-2)})^{T}

3.推广到J\Theta^{(l)}的导数

        类似2中的做法,可以得到:

\delta ^{(l)}=(\Theta^{(l)})^{T}\cdot \delta^{(l+1)}\odot \frac{\partial a^{(l)}}{\partial z^{(l)}}

\frac{\partial J(\theta)}{\partial \Theta^{(l)}}= \delta ^{(l+1)}\cdot (a^{(l)})^{T}

4.总结

\delta^{(l)}= \left\{\begin{matrix} 0& l=0\\ (\Theta^{(l)})^{T}\cdot \delta^{(l+1)}\odot \frac{\partial a^{(l)}}{\partial z^{(l)}}& 1\leq l \leq L-1 \\ h_{\theta}(x)-y&l=L \end{matrix}\right.

\frac{\partial J(\theta)}{\partial \Theta^{(l)}}=\delta^{(l+1)}\cdot (a^{(l)})^{T}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值