seegongsik
人工智能

反向传播 怎么工作

上一课我们看到,神经网络把信号往前传,给出答案。可要是答案错了,怎么改?网络里的权重多得数不清,得知道其中哪些对错误负责、各负多少责任,才能改。办法是把错误从输出往输入那头倒着追,算出每个权重该担的那份责任。这就像顺着倒下的多米诺骨牌往回找,找出最先被推的地方,这个办法就叫反向传播。

01

先往前预测

神经网络给出答案时,把信号往前传:从输入出发,依次穿过各层,在输出得到预测。这正是上一课看到的那股流。
刚建好的网络,权重是随便定的,所以预测可能和正确答案差得很远。先把这股往前的流再看一遍。

输入层隐藏层输出层
点按钮,让信号往前流
0 / 3

点按钮,让信号从输入到输出一层层往前走。最后得出预测,可还跟正确答案不一样。

预测出来了,却和正确答案不同。这个差就是错误,把错了多少量成一个数,就是损失。损失大,说明错得多;损失接近 0,说明猜得准。
目标是减小损失。可网络里的权重多得数不清,该改哪些、改多少,损失才会减小?

02

谁该为错误负责

输出错了。可输出并不是自己错的:它是根据前一层传来的信号给出答案的,前一层又是根据更前一层的信号算出来的。
所以,错误的责任不只在某一个权重上,而是一点点分摊在参与预测的所有权重上。先确认一下输出上的错误有多大。

预测0.3正确答案1.0
点按钮,标出预测和正确答案的差

比较输出的预测和正确答案。点按钮标出错误(损失),就能看出得倒着去找这个错误是从哪来的。

输出上的错误有多大,已经确认了。现在要顺着这个错误往上追。如果有好几条连接通向输出,有的传过来的信号强,有的弱。
传的信号越强的连接,对错误输出的贡献越大,责任也越大。换句话说,把这条连接的权重改一点点,损失就会变很多。改动权重时损失变多少,这正是梯度下降里讲的坡度。

03

把错误倒着传回去

现在轮到真正的反向传播了:把错误从输出往输入那头一层层倒着传,方向正好和往前走时相反。这就像顺着倒下的多米诺骨牌往回走,找出是从哪里开始倒的。
每往回退一层,就定下这一层的连接对错误贡献了多少。里层的那份,是用外层的那份乘上中间连接的影响求出来的。像这样一边相乘一边往回追的计算规则,叫微分的链式法则。

输入层隐藏层输出层
点按钮,让错误从输出往输入那头倒着退
0 / 2

点按钮,让错误从输出往输入那头一层层倒着走。每退一层,每条连接都被记上一份责任,越粗责任越大。

一直倒退到了头。现在,网络里每个权重都分到了自己的一份责任:有的对错误贡献很大,有的几乎没有责任。
了不起的是,从输出的一个错误出发,连深处里层权重的那份也一次就算出来了。不必一个个权重分别去试,所以就算网络有几百万个权重,计算也吃得消。

04

按那份责任改权重

知道了责任,就该动手改了。回想一下前面学的梯度下降:朝损失减小的方向,一点点往下走。
反向传播求出的那份,正是每个权重的坡度,所以用坡度乘上学习率,按这个量去改权重。责任大的权重改得多,责任小的只改一点。重要的是不要一下子大改,而是一点点地改。

权重 1
0.00
权重 2
0.00
权重 3
0.00
剩余错误(损失)
1.00
点调整,按责任把每个权重改一点
0 / 4

点按责任调整,把权重一步步改。每点一次,损失条就短一些,责任大的权重动得更多。

越调整,损失越小。可改一次并没有完:再往前预测,再量错误,再倒着追出每份责任,再按它去改。
这一圈重复无数次,网络的预测就会越来越接近正确答案。如今的神经网络,几乎都是这样学习的。

05

小结

归纳起来是这样:先把信号往前传,得出预测,和正确答案比较,把错误量成损失。再把损失从输出往输入那头倒着传,求出每个权重的那份责任,也就是坡度。
然后按这份责任,用梯度下降改权重。往前预测、倒着追、动手改,这样不断重复,预测就会接近正确答案。

依次点要点回顾一下

依次点要点回顾一下。(往前预测 → 用损失量出错误 → 倒着追求出责任 → 按责任调整)

现在你知道神经网络是怎样改错的了。正是靠倒着追这个想法,权重多得数不清的大网络,也能自己学习了。
不过,把训练数据上的损失一直往下压,就一定好吗?就像只背了练习题答案的学生,一到没见过的考试就发蒙,神经网络也可能把训练数据贴合得太过头。这个问题,下一课讲过拟合时来谈。

一句话总结反向传播就是在神经网络出错时,把错误倒着追回去,求出每个权重该改多少的办法。先把信号往前传,得出预测,和正确答案比较,用损失量出错了多少。接着把损失从输出往输入那头倒着传,算出每个权重对错误贡献了多少,也就是坡度。里层的那份,是用外层的那份乘上中间连接的影响求出来的,这就是链式法则。最后按这份责任,用梯度下降把权重一点点改。往前预测、倒着追、动手改,这样重复无数次,网络的预测就会越来越接近正确答案。
← 人工智能
如果有帮助,请支持我们