☰
深度学习10-反向传播插曲疑问:为啥先执行一次前向传播
2026/11/5 1:47:22 网站建设 项目流程

目录标题

      • 1. 为什么反向传播必须要有前向传播的值?
      • 2. 为什么“先执行前向传播”不是“根本原因”?
      • 3. 一个形象的比喻

保存前向传播的中间结果(比如 x 和 y),是为了能够顺利执行反向传播的必要条件。

1. 为什么反向传播必须要有前向传播的值?

正如你所说,在乘法节点z = x × y z = x \times yz=x×y中:

  • 如果你要求z zz对x xx的导数∂ z ∂ x \frac{\partial z}{\partial x}∂x∂z​,结果是y yy。
  • 如果你要求z zz对y yy的导数∂ z ∂ y \frac{\partial z}{\partial y}∂y∂z​,结果是x xx。

如果你只知道函数是乘法,但不知道具体的x xx是具体啥值(比如x是100),y yy是具体啥值(比如y是2),你反向传播时算出来的就只能是抽象的y yy和x xx,无法得出具体的梯度数值。
所以,前向传播时产生的数值(如输入x xx、y yy和输出z zz),必须在内存中保存下来(缓存),供反向传播计算局部导数时使用。

2. 为什么“先执行前向传播”不是“根本原因”?

根本原因在于:数学上的“链式法则”是从输出端向输入端推导的。

  • 前向传播(Forward):是为了求出预测结果,进而算出损失函数L LL(比如你用模型预测了一个数字,发现预测错了,产生了误差L LL)。
  • 反向传播(Backward):是为了求出参数梯度来更新模型。我们要从损失L LL开始,倒推回去求各个参数的导数。

顺序决定了因果:
因为我们要求“损失L LL对参数的导数”,而L LL是通过前向传播计算出来的,所以逻辑上必须先是前向传播(产生L LL和中间缓存),然后才是反向传播(利用L LL和中间缓存求导)。

3. 一个形象的比喻

想象你在剥洋葱(前向传播):
你一层一层剥开,把剥下来的皮和中间看到的形态(中间变量x , y x, yx,y)放在旁边的桌子上(保存缓存)。
剥到最后,你发现洋葱芯坏了(算出了损失L LL)。

现在你要写一份报告,说明“为什么芯会坏”(反向传播求导):
你只能顺着刚才剥皮的顺序,从芯开始往回看。每往回走一层,你都要看一眼刚才放在桌子上的皮(利用之前保存的x , y x, yx,y)来记录问题。
如果你刚才剥皮的时候没把皮留桌上(前向传播不保存中间值),你现在往回看时就没有参考,报告就写不下去了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询