神经网络和深度学习(三)——反向传播工作原理

本文转自:https://blog.csdn.net/qq_31192383/article/details/77198870

反向传播算法工作原理

在上一篇文章,我们看到了神经网络如何通过梯度下降算法学习,从而改变权重和偏差。但是,前面我们并没有讨论如何计算代价函数的梯度,这是一个很大的遗憾。这一篇文章,我们将介绍一种称为反向传播的快速计算梯度的算法。

使用反向传播算法学习的神经网络比其他早期的方法要快很多,这使得使用神经网络可以解决之前不能解决的问题。如今,反向传播算法是神经网络中最重要的组成部分。

你完全可以忽略反向传播算法,把它当作一个黑盒子去使用神经网络。那么我们为什需要详细的了解这个算法呢?这当然是为了理解神经网络的学习过程。反向传播算法的核心是一个对于任何权重或者偏差计算其关于代价函数的偏导数的表达式。这个表达式告诉我们改变权重和偏差时,代价函数的变化快慢。虽然这个表达式很复杂,但是它却有自己的数学之美,每一个元素拥有一个自然的直观解释。因此反向传播不仅仅是为了学习的一个快速算法,它实际上给了我们一个视角去深入了解在改变权重和偏差时,网络整体的行为的变化。这才是我们详细了解反向传播算法的意义所在。

热身: 一种基于矩阵计算神经网络输出的快速方法

在讨论反向传播算法之前,我们使用一种基于矩阵的计算神经网络输出的快速方法来做预热。这可以让我们在学习反向传播时更加熟悉各种记号和表示方法。
在这里插入图片描述
这个记号刚开始很绕,需要一点时间熟悉。经过一段时间的掌握一会发现这样的表达很简单自然。这个记号很别扭的地方在于j和k的顺序,你可能和我一样刚开始觉得j和k的位置需要换一下更舒服,但是下面我将告诉你为什么这样做。
在这里插入图片描述
在这里插入图片描述
即,向量化f就是对向量中所有元素进行平方计算。

有了这些定义,公式(23)就可以重写为下面这个美妙而简介的向量形式了:
在这里插入图片描述
在这里插入图片描述
第二个假设是代价可以写成神经网络输出的函数:
在这里插入图片描述
比如,二次代价函数满足这个需求,因为二次代价函数对一个单个的训练样本x可以写作:
在这里插入图片描述
在这里插入图片描述
这种按元素乘积的操作有时被称作Hadamard乘积或者Schur乘积。

反向传播的四个基本方程

在这里插入图片描述
在这里插入图片描述

解决方案:反向传播基于四个基本方程。这些方程给了我们计算误差δ l δl和代价函数梯度的方法(别忘了我们的目的是计算代价函数关于权重和偏差的梯度,但是这些都是基于计算误差所求得,后面会讲述的很明白)。后面的公式其实不难,你第一眼看上起可能很复杂,当你静下心看完后面的证明你会觉得这些公式很简洁,而且用代码很容易实现。首先,我们会证明这些公式的正确性,然后以为代码的形式给出它们的算法形式;然后用python代码实现它们;在本文的最后,我们会发展出⼀个关于反向传播⽅程含义的直觉画⾯,以及人们如何能够从零开始发现这个规律。
在这里插入图片描述
证明:这里先给出(BP1)的证明(实在是不想用latex敲公式了,直接参考了其他人翻译的): 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
证明:
在这里插入图片描述

方程3: 代价函数关于任意偏差的改变率(偏导数)(反向传播函数的返回值之一):
在这里插入图片描述
在这里插入图片描述
方程4: 代价函数关于任意权重的改变率(偏导数)(反向传播函数的返回值之一):
在这里插入图片描述
同样这里公式右边的量都可以通过前面的公式求出,上式可以简写为:
在这里插入图片描述
下面总结一下这四个方程:
在这里插入图片描述

反向传播算法

反向传播算法给出了一种计算代价函数梯度的方法,我们用算法的形式明确地写出来:
在这里插入图片描述
输出:代价函数的梯度。

这个算法是针对一个输入样本x时,计算代价函数梯度,但是我们前面讲过,我们在标准的梯度下降算法中,是对所有样本的梯度值求和取平均,在随机梯度算法中我们是对一个小批量数据的梯度值求和取平均。下面假设给定小批量样本大小为m,则随机梯度下降算法为:
在这里插入图片描述
代码改进:我们对于随机梯度下降的实现是对⼀ 个小批量数据中的训练样本进行遍历。所以也可以更改反向传播算法使得它同时对⼀个小批量数据中的所有样本进行梯度计算。这个想法其实就是我们可以用⼀个矩阵 X=[x1,x2,…,xm]X=[x1,x2,…,xm],其中每列就是在小批量数据中的向量,而不是单个的输⼊向量xx。 我们通过乘权重矩阵,加上对应的偏置进行前向传播,在所有地方应用S型函数。然后按照类似的过程进行反向传播,这会提高代码的速度(在我的笔记本电脑上,在MNIST分类问题上,我相较于上一篇文章的实现获得了2倍的速度提升)。



更多案例请关注“思享会Club”公众号或者关注思享会博客:http://gkhelp.cn/

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值