神经网络中反向传播算法(BP)

神经网络中反向传播算法(BP)

本文只是对BP算法中的一些内容进行一些解释,所以并不是严格的推导,因为我在推导的过程中遇见很多东西,当时不知道为什么要这样,所以本文只是对BP算法中一些东西做点自己的合理性解释,也便于自己理解。

要想看懂本文,要懂什么是神经网络,对前向传播以及神经网络中一些常见定义要熟悉。

为什么是 δ \delta δ

在这里插入图片描述

假如上面是一个神经网络的任意层l和l+1层,那么我们如果进行BP算法,就是相当于把一个损失函数 C C C θ \theta θ 进行偏导数计算,假如现在我要求 ∂ C ∂ θ l \frac{\partial C}{\partial \theta^l} θlC ,意思就是对第l层和l+1层之间的权重参数 θ \theta θ 求偏导,但是发现密密麻麻好多的权重值呀,所以求其来非常不方便,所以利用链式求导法则,我把这个偏导数转化一下,转化成 ∂ C ∂ z l + 1 \frac{\partial C}{\partial z^{l+1}} zl+1C ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1 ,之所以这样的原因我自己给自己的解释就是为了方便计算,因为 z l + 1 = θ l a l z^{l+1} = \theta^la^l zl+1=θlal 所以求这个 ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1 就相对比较简单 ,所以就把前面的 ∂ C ∂ z l + 1 \frac{\partial C}{\partial z^{l+1}} zl+1C 定义成 δ l + 1 \delta^{l+1} δl+1 ,这样的话原问题就转化成了计算 δ l + 1 \delta^{l+1} δl+1 ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1,而 ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1 是一个已知的值,所以关键问题就是求 δ l + 1 \delta^{l+1} δl+1

δ \delta δ 的递推

有了上面的解释,就知道了其实 δ \delta δ的作用就是为了简化计算,现在我们原问题就进行了转换,转换成了求 δ \delta δ,比如你要计算 ∂ C ∂ θ 3 \frac{\partial C}{\partial \theta^3} θ3C 其实关键就是计算出来 δ 3 \delta^3 δ3 就行了,所以这个时候你需要求得所有 δ \delta δ 的值,这样的话你才能对所有的 θ \theta θ 就行偏导计算,而有定义 δ l = \delta^{l} = δl= ∂ C ∂ z l \frac{\partial C}{\partial z^{l}} zlC 并不能看出来什么,但是同样我们用链式法则改变一下你就发现了不一样 , δ l = \delta^{l} = δl= ∂ C ∂ z l + 1 \frac{\partial C}{\partial z^{l+1}} zl+1C ∂ z l + 1 ∂ z l \frac{\partial z^{l+1}}{\partial z^l } zlzl+1 之所以要进行这样的链式,原因还是为了方便,因为直接求偏导很麻烦,所以进行转换,为什么要换成 ∂ C ∂ z l + 1 \frac{\partial C}{\partial z^{l+1}} zl+1C ∂ z l + 1 ∂ z l \frac{\partial z^{l+1}}{\partial z^l } zlzl+1 ,是因为 z l + 1 = θ l s i g m o i d ( z l ) z^{l+1} = \theta^lsigmoid(z^l) zl+1=θlsigmoid(zl) ,所以求 ∂ z l + 1 ∂ z l \frac{\partial z^{l+1}}{\partial z^l } zlzl+1 也是能直接求出来的,所以我们就得到了关于 δ \delta δ 的递推 δ l = \delta^{l} = δl= δ l + 1 \delta^{l+1} δl+1 ∂ z l + 1 ∂ z l \frac{\partial z^{l+1}}{\partial z^l } zlzl+1 ,所以整个问题就转化成了如何求 δ l + 1 \delta^{l+1} δl+1 ,而对于神经网络来说,也就是如何求最后一层的 δ \delta δ

至于如何求请看参考中的那篇博文。

问题求解

根据上面的两个解释,就明白了原问题是对 θ \theta θ 的求偏导,我们把这个用链式法则转化求解 δ \delta δ,而对 δ \delta δ的求导我们同样经过链式法则转化成了求最后一层的那个 δ \delta δ值即可,所以整个问题就转换成了最后一层的 δ \delta δ只要求出来了就行,求出之后,我们根据递推公式计算出所有的 δ \delta δ,然后再根据 ∂ C ∂ θ l = \frac{\partial C}{\partial \theta^l}= θlC= δ l + 1 \delta^{l+1} δl+1 ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1 就可以求出对所有 θ \theta θ 的偏导了,因为在经过前向传播后 ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1这个值是可以计算出来的,是一个常数。

所以你再看BP算法,是不是就有点眉目了,知道为什么要先计算 δ L \delta^L δL(L就是最后一层 ), 以及为什么有了 δ L \delta^L δL后其他层的 δ \delta δ 也能计算出来了,以及为什么有了所有的 δ \delta δ后就能计算所有 θ \theta θ的偏导了。

在这里插入图片描述

总结

本文只是从算法角度宏观分析了一下BP算法中每一步这样做的原因,通过解释可以加深对这个算法的理解,关于这个算法的详细推导参考下面参考中的一篇博文,这篇文章给出了推导方法以及最后一层的 δ \delta δ 的计算以及 ∂ z l + 1 ∂ θ l \frac{\partial z^{l+1}}{\partial \theta^l} θlzl+1 ∂ z l + 1 ∂ z l \frac{\partial z^{l+1}}{\partial z^l} zlzl+1 等值的计算公式,这几个偏导都是常规计算,因为有了 z l + 1 = θ l a l = θ l s i g m o i d ( z l ) z^{l+1} = \theta^{l}a^l=\theta^{l} sigmoid(z^l) zl+1=θlal=θlsigmoid(zl) ,所以偏导数都是可以直接求的。

参考:

https://blog.csdn.net/weixin_40920228/article/details/80709216

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值