反向传播

看了一个对反向传播讲解很详细的博客,遂决定整理总结一下。
反向传播的本质就是导数中的连式法则

该定理的详细解释在高数导数内容中,这里就不论述了。下面将借助一个全连接神经网络解释反向传播。

如上图所示,该神经网络由输入层、隐藏层、输出层构成,三层神经网络,单元数分别为3、4和3。假设给了m个训练样本,第i个输入输出对表示为:

其中,x和y是3维向量。对于输入x,我们把g称作神经网络的预测(输出)值,它也是一个3维向量,每个向量元素对应一个输出单元。所以,对于每个训练样本来说,有:

给定输入x,我们要找到使得预测值g与输出值y相等或比较相近的一组网络权重。因此,我们加入了误差函数,定义如下:

其中g为预测值,我们这里使用了均方差计算每个样本的误差,然后把每个样本的误差相加得到总误差E。网络的训练目标就是找到一组误差最小的权重。
现在,我们推广到一般情况,而不是之前的3个输出单元。假设输出层有任意数量的输出单元,设为n,对于这种情况此时的总误差为:

大家可能有个疑问,这个误差值是怎么随着某个输出单元的预测值变化而变化的?导数在这里起了作用:

我们还可以发现,随着输出单元预测值的变化,该误差会根据预测值与真值间的差值,以同样速率在变化。
这里你可能还有疑问,当某个输出单元的总输入变化时,误差会如何变化:

但是,g是关于z的函数,应用链式法则,把它重写为:

在本例中我们使用Logistics函数激活,所以在每个单元中,先使用Logistic函数处理输入后再把它向前传递。这意味着,g作为Logistic函数,z是它的输入,所以可以表示为:

gj=11+ezj g j = 1 1 + e − z j
gjzj=ezj1+ezj=gj(1gj) ∂ g j ∂ z j = − e − z j 1 + e − z j = g j ( 1 − g j )
进而得到:

这里已经计算出,总误差与某个输出单元总输入的变化规律。
现在,我们已经得到误差相对于某个权重的导数,这就是所求的梯度下降法。
设绿色单元的预测值为g’,绿色层中的单元k与红色层(输出层)中的单元j之间的连接权重设为:

考虑下图中,黄色输出单元对应的总输入z。为了计算这个总输入,先获得每个绿色单元的输出值,在把其与连接绿色单元和黄色单元的红色箭头权重相乘,并将它们全部相加。

进行推广,假如有任意数量的绿色单元,设为n,这个n与上面定义的不同,可以表示为:

所以,我们不仅可以把z看作是自变量为连接权重的函数,也可以看作是自变量为连接单元输出值的函数。
下面轮到链式法则发挥了。当与输出单元的连接权重变化时,误差该如何变化,这表示为:

上面已经计算出误差相对于输出单元连接权重的导数,这正是梯度下降所需的公式。
但是推导还没有完成,我们仍需要计算误差相对于第一层和第二层连接权重的导数,这里还需要用到链式法则。
接下来,计算误差与第k个绿色单元输出值的变化关系:

由于第k个单元有j个连接权重,我们也考虑在内:

推导到这里结束,我们得到了总误差相对于某个单元输出值的导数。现在,我们可以忽略红色输出层,把绿色层作为网络的最后一层,并重复上述所有步骤来计算总误差E相对于输入权重的导数。
你会注意到,我们计算出的第一个导数与预测值和真实值之间的“误差”相等。同样地,最终的导数中也是这个误差项与其他项的乘积。
这种算法叫做反向传播,因为我们把这种形式的误差进行反向传播,从最后一层反馈到第一层,并被用来计算误差E相对于网络中每个单元权重的导数。

只要计算出这些导数后,可在梯度下降过程中使用它们来最小化误差E并训练神经网络。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值