上一小节讲了神经网络的代价函数,这一小节讲解一个让代价函数最小化的算法:反向传播算法。
找到合适的参数,让代价函数最小。那我们要怎么做呢?
我们需要有一种能够用编码实现的算法,梯度下降也好、其它更高级的算法也好,我们需要能够通过一种迭代的办法不停改变这些参数\theta的值,使得代价函数最小。而参数每次改变的大小,需要计算偏导数,通过偏导数的值来确定每一步参数改变的大小和正负。
也就是说,我们把代价函数的值作为了函数的因变量,把参数作为自变量来进行求函数最小值。
假设我们有一组训练样本(x,y),神经网络如何计算得出输出结果的呢?如下图,它是从最左边的输入层一层一层的算到输出层,然后给出一组结果的。
这样的运算过程,我们叫做前向传播。
前向传播的含义,就是从输入层向前逐层向前运算最后得到输出。
反向传播,直观上我们是想要算出“真实值和神经网络的计算值之间的差”。
我们从神经网络的外面当然是只能看到输出层上,实际值和计算值之间的差值。但是,我们也知道最后输出上计算值和实际值之间的差值,是由前面从输入层到每个隐藏层慢慢地把这个误差给积累下来的。那我们该怎么算每一层上的误差呢?
我们先从输出层上开始做,将输出层上的每个神经元的计算结果和这个分量上训练样本实际的结果之间求差值。这就是输出层上的误差:
有了输出层的误差,倒数第二层的误差该怎么计算呢?本质上,输出层的误差是由上一层的误差经过输出层上的运算之后得到的,那我们再经过一次逆反运算就可以算出来了。
上式中,后面的一项是激活函数的导数。
前面一项,是权重导致的误差的和。
类似的,可以把第二层的也给算出来。这样,我们就有了每一层上的误差函数:
因为最左边的是输入层,没有误差,所以这里有3层的误差函数。
通过上面的计算过程,我们就知道这个算法为什么叫做反向传播算法了。
假设有m组训练样本,反向传播算法的步骤如下图:
其实,上图中迭代更新的式子中,我们把当前样本的输入作为常量,把权值作为自变量来求偏导的,这样就和前面学习过的梯度下降类似了。
我们学了那么久,这一小节是第一次真正的挑战,因为在反向传播那个地方,这里跳过了很多的中间过程。不明白的同学,可以找一些BP网络原理的资料来看看。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有