P12 · 优化
反向传播
1这节解决什么问题
网络里有几十万个参数,怎么知道每一个该往哪边调?一个一个试太慢,训练根本跑不完。
2一句话讲清
反向传播就是一套省力的算法:先做一次预测,看错在哪,再把「错」的责任从后往前分给每一层,算出每个参数对误差的影响有多大,最后交给优化器去改。
3通俗解释
- 先做一次预测:数据从第一层走到最后一层,得到一个答案,和正确答案比一比,算出「错了多少」。这一步叫前向。
- 再看错在哪:最后一层错得最直接,先算它的责任;然后往回一层层推——这一层的输出让下一层错了多少,就分给它多少责任。
- 同一个神经元的输出如果被后面好几个地方用到,那几处传回来的责任要加起来,不能只算一处。
- 责任分到每个参数头上,这一步算出它对误差的影响方向和程度;优化器再结合学习率等决定实际如何调整。
4一个例子
帮助理解的类比(不是讲义原图)
想象一个两层的小网络在判断「这张图是不是猫」,它把一张狗的照片判成了猫。反向传播做的是:先看输出层把「猫」抬得太高,这是第一笔账;再往回看,中间层里哪些信号把「猫」推高了、各推了多少,分别记上;最后每个参数拿到自己那笔账,知道自己该往哪边改、影响有多大。这像调一锅汤:尝一口太咸,不能只怪最后撒的那把盐,前面每样配料放了多少都要一起算。重点在「一起算」,不是把错都推给最后一层。
5常见误区
- 反向传播不等于梯度下降。它只负责算「每个参数对误差的影响」;怎么调、调多大(惯性、自适应步长)是优化器的事。说「用反向传播训练网络」是口语。
- 责任是从后往前分的,顺序不能反。前向只负责把数据送过去,不做分配。
- 最后一层的责任怎么算,取决于用哪种「错了多少」的尺子。换一把尺子,最后一步的算法也要跟着换。
6和相邻几节的关系
P1 讲过「弯一下」的函数怎么影响调整方向;P2 里那些一起调的参数,方向就是这里算出来的;P11 只提了一句「反向传播很高效」,这一节把它讲开。
730 秒回顾
一次前向得答案,一次反向分责任;责任从最后一层往前推,几处用到就相加;每个参数算出自己对误差的影响有多大;它只负责算影响,不负责改。
8小自测
先自己答,再点开对答案。
1. 反向传播和梯度下降,各管什么?
反向传播管「算」:算出每个参数对误差的影响方向和程度。梯度下降管「改」:结合学习率等,决定实际怎么挪。
2. 一个神经元的输出被后面三个地方用到,往回分责任时怎么办?
把各条路径的影响合起来;漏算一条,算出的总影响就不对了。