@ProfTomYeh:手动反向传播 ~ 下面11个步骤详解 反向传播是真正训练神经网络的算法…

X AI KOLs Timeline 工具

摘要

通过矩阵乘法手动演练一个3层网络的反向传播,展示从梯度到权重更新的全部11个步骤。

手动反向传播 ~ 下面11个步骤详解 反向传播是真正训练神经网络的算法,也是大多数人跟不上的地方。这不是你学不会的微积分。它是矩阵乘法,从后往前逐层运算。 所以我完全用手绘和手算了一整套。 目标:将损失梯度反向传播通过一个3层网络,最终更新每个权重和偏置的新值。 = 1. 已知条件 = 一个3层感知机,输入 X,预测值 Ypred = [0.5, 0.5, 0],真实值 Ytarget = [0, 1, 0]。 = 2. 反向传播梯度单元格 = 我们先为每个待计算的梯度画好空单元格。答案的形状先定下来。 = 3. 第3层 softmax = 直接由 Ypred 减去 Ytarget 得到 dL/dz3 = [0.5, -0.5, 0]。不需要链式法则,这个捷径正是 softmax 和交叉熵配对的全部原因。 = 4. 第3层权重和偏置 = 将 dL/dz3 与 [a2 | 1] 相乘。一次乘法同时得到 W3 和 b3 的梯度。 = 5. 第2层激活值 = 将 dL/dz3 与 W3 相乘得到 dL/da2。梯度反向穿过一层的方式,与信号前向传播的方式相同。 = 6. 第2层 ReLU = 通过门控传递:在激活值为正的地方保留梯度,其他地方置零。 = 7. 第2层权重和偏置 = 将 dL/dz2 与 [a1 | 1] 相乘。与第4步相同的结构,向上移一层。 = 8. 第1层激活值 = 将 dL/dz2 与 W2 相乘。 = 9. 第1层 ReLU = 再次应用相同的门控,这次在 a1 上。 = 10. 第1层权重和偏置 = 将 dL/dz1 与 [x | 1] 相乘,至此网络中每个权重都有了梯度。 = 11. 更新 = 执行减法,网络便完成了学习。实践中会用学习率来缩放这一步。 梯度: dL/dz3 = [0.5, -0.5, 0] dL/da1 = [1, -2, 2, -1] dL/dz1 = [0, -2, 2, -1] 要点:你只需要矩阵乘法。就像前向传播一样,反向传播也是从头到尾的矩阵乘法。你可以用手慢慢且不完美地逐步计算,而这正是 GPU 快速执行这些运算对深度学习如此重要的原因。 收藏此帖!
查看原文
查看缓存全文

缓存时间: 2026/07/20 23:33

手工反向传播 ~ 以下11步详解

反向传播是真正训练神经网络的算法,也是大多数人开始跟不上的地方。它并不是你学不会的微积分,而是矩阵乘法——从后往前,逐层推进。

于是我亲手绘制并计算了整个过程。

目标:将损失梯度反向传播过一个3层网络,为每一个权重和偏置更新出新值。

= 1. 已知条件 =

一个3层感知机,输入 X,预测值 Ypred = [0.5, 0.5, 0],真实值 Ytarget = [0, 1, 0]。

= 2. 反向传播梯度单元格 =

我们先为每一个即将计算的梯度画出空单元格。答案的形状先出来。

= 3. 第3层 softmax =

直接从 Ypred 减去 Ytarget 得到 dL/dz3 = [0.5, -0.5, 0]。无需链式法则,这个捷径正是 softmax 与交叉熵配对使用的全部理由。

= 4. 第3层权重和偏置 =

将 dL/dz3 与 [a2 | 1] 相乘。一次乘法即可同时得到 W3 和 b3 的梯度。

= 5. 第2层激活值 =

将 dL/dz3 与 W3 相乘得到 dL/da2。梯度向后穿过一层的方式,与信号向前传播的方式相同。

= 6. 第2层 ReLU =

让它通过门控:在激活值为正的地方保留梯度,其他地方置零。

= 7. 第2层权重和偏置 =

将 dL/dz2 与 [a1 | 1] 相乘。与步骤4相同的图形,向上移一层。

= 8. 第1层激活值 =

将 dL/dz2 与 W2 相乘。

= 9. 第1层 ReLU =

再次应用相同的门控,这次是在 a1 上。

= 10. 第1层权重和偏置 =

将 dL/dz1 与 [x | 1] 相乘,至此网络中每个权重都有了梯度。

= 11. 更新 =

减去梯度,网络就学到了一步。实践中学习率会缩放这一步。

梯度: dL/dz3 = [0.5, -0.5, 0] dL/da1 = [1, -2, 2, -1] dL/dz1 = [0, -2, 2, -1]

要点:你只需要矩阵乘法。与前向传播一样,反向传播从头到尾都是矩阵乘法。你可以一步一步手算,慢一些、不完美也没关系——这正是 GPU 快速运算的能力对深度学习至关重要的原因。

收藏这篇帖子吧!

相似文章