转载:小红书 AI产品赵哥
前言 🔖
在之前的笔记里,我们聊了监督学习(以启蒙教育为例),知道了 AI 宝宝需要通过看带标签的卡片来学习。我们还聊了梯度下降(AI 的学习方法),知道了 AI 宝宝是通过蒙眼下山的方式,一步步找到损失最小的山谷。
但这里留下了一个最最核心的问题,也是所有初学者最困惑的一点:
- 在那个大如迷宫的神经网络里,当最终的预测结果错了,AI 到底是怎么知道,网络里成千上万个参数(权重),究竟哪个该调整,又该调整多少呢?
- 是平均分配责任,每个参数都改一点点吗?还是只改最后几层的参数?
- 这个过程,就像一个拥有亿万员工的跨国集团,最终的年度财报出现了巨额亏损。CEO(最终的损失函数)震怒,他该如何将这个亏损责任,精准地、公平地分配给每一个部门、每一个员工,并让他们知道明年该如何改进工作呢?
解决这个责任分配难题的,正是深度学习中牛掰,且核心的算法 ——反向传播(Backpropagation,BP)。
反向传播,就是神经网络的复盘与问责机制。它让 AI 拥有了知错能改的核心能力,是连接预测错误和参数更新之间的关键桥梁。
这篇文章将带你搞清楚以下几个事情:
- 前向传播 vs. 反向传播:AI 如何汇报工作与追究责任?
- 链式法则:这个神奇的问责链条是如何工作的?
- 梯度到底是什么?为什么说它就是责任分配书?
- 一个完整的学习周期:前向算结果,反向算责任,梯度下降去修正。
- 为什么理解反向传播,是理解所有深度学习模型训练的关键?
同学们,准备好了吗?我们发车了!
一、一家名为 “NN” 的巨型公司 🔖
要理解反向传播,我们沿用上面跨国集团的例子,我们先来构思一家名为 Neural Network, Inc.(简称 NN 公司)的巨型公司。这家公司的组织架构非常特殊。
- 公司结构:公司按 “层” 划分,有很多部门,从输入部(Input Layer)开始,经过若干个中间部(Hidden Layers),最终到达输出部(Output Layer)。
- 员工:每一层的每一个小圆圈,都代表一个员工(神经元)。
- 汇报关系:公司的信息流是严格单向的。下一层的员工,只接收上一层所有员工的工作报告,并汇总成自己的报告,再提交给更下一层。员工之间不能越级汇报,也不能同级交流。
- 影响力:每个员工在向上级汇报时,他的话语权(权重(Weight))是不同的。比如,A 员工向 B 经理汇报,B 经理可能非常信任 A,会给 A 的报告乘以一个权重 1.2;而对另一位 C 员工,B 经理可能不太信任,只会给 C 的报告乘以一个权重 0.3。这个权重(Weight),就是神经网络中需要学习的参数。
- 部门经理:每一层的员工把上层所有人的加权报告汇总后,不会直接提交,而是要经过本部门一位风格独特的经理进行处理。这位经理就是激活函数。他可能会对报告内容进行包装或取舍,比如:如果汇总的业绩太差(负数),他可能直接打回,报告为 0(ReLU 激活函数)。
🔹 1. 前向传播(Forward Propagation):年度业绩汇报
现在,公司接到了一个大项目(一个输入数据,比如一张猫的图片)。信息开始在公司内部流动:
- 输入部的员工接收到最原始的项目资料(图片的像素值)。
- 他们把这些资料,根据各自的权重,汇报给中间部第一层的员工。
- 中间部第一层的每个员工,都收到了来自输入部所有员工的加权报告。他们把这些报告汇总,并经过本部门经理(激活函数)的包装后,形成新的报告,再汇报给中间部第二层。
- 这个过程一层一层地传递下去……
- 最终,信息到达了输出部。输出部的员工根据收到的最终报告,给出了一个项目预测结果(Prediction)。比如他们预测:”我们认为,这个项目(图片)是 ‘ 狗’ 的概率是 80%,是 ‘ 猫’ 的概率是 20%。”
这个从输入到输出,一步步计算预测结果的过程,就是前向传播。它就像一次自下而上的、完整的工作汇报流程。
🔹 2. 计算损失(Loss):CEO 发现业绩巨亏
公司的 CEO(损失函数 Loss Function)拿到了输出部的预测报告。同时,他也拿到了客户给的标准答案(Label):”这个项目明明是 ‘ 猫’!”
- CEO 将预测结果(80% 是狗)和标准答案(100% 是猫)一对比,勃然大怒!他发现公司的预测和事实之间,存在一个巨大的偏差(Loss)。
- 这个偏差,就是公司的年度总亏损。
现在,最关键的问题来了:这个巨额亏损,到底是谁的责任?CEO 不能只惩罚输出部的员工,因为他们的报告是基于下属部门的信息。这个责任,必须一层一层地追究下去,直到最开始的输入部。
这个从 CEO 开始,自上而下,逐层分配亏损责任的过程,就是反向传播。
二、反向传播:问责传递的艺术 —— 链式法则与梯度 🔖
反向传播的问责过程,既要公平,又要高效。它依赖于微积分中一个极其优美的规则 ——链式法则(Chain Rule)。
别被名字吓到,它的逻辑非常符合商业直觉。
🔹 1. 问责的核心工具:梯度(Gradient)
在问责开始前,CEO 需要一个工具来量化每个人的责任。这个工具,就是梯度(Gradient)。
梯度:可以被直观理解为贡献度或责任度。
某个员工(参数 W)的梯度,衡量的是:如果这个员工的工作权重(W)发生一个微小的变化,最终公司的总亏损(Loss)会发生多大的变化。
💡 梯度数值的意义
- 梯度绝对值很大:意味着这位员工是关键人物。他稍微调整一下工作方式,就能对公司最终的业绩产生巨大影响。他的责任 / 贡献非常大。
- 梯度绝对值很小:意味着这位员工是边缘人物。他就算加班加点,对公司最终业绩的影响也微乎其微。他的责任 / 贡献很小。
- 梯度为正:意味着他的工作方式与公司损失是正相关的。如果增加他的权重(给他更多话语权),公司总亏损会更大。说明他现在的工作方向是错的,需要减少他的权重。
- 梯度为负:意味着他的工作方式与公司损失是负相关的。如果增加他的权重,公司总亏损反而会减小。说明他现在的工作方向是对的,需要增加他的权重。
所以,反向传播的核心目标,就是为公司里的每一个参数(权重 W),都计算出一个精准的梯度值。这个梯度值,就是给每个员工下发的 “责任分配书” 和 “改进指导意见”。
🔹 2. 问责的过程:链式法则(Chain Rule)
现在,问责正式开始,从 CEO 办公室(损失函数)出发,逐层向下。
第一站:问责输出部
- CEO 直接面对输出部的员工。计算他们的责任(梯度)相对简单。CEO 可以直接衡量:输出部员工的预测结果,每变化一点,总亏损会变化多少。
- 问责结果:输出部的每个员工,都拿到了自己的第一份责任书(梯度)。
第二站:问责倒数第二层(以员工 P 为例)
现在,要计算倒数第二层某个员工 P 的责任。P 自己不直接对 CEO 负责,他只对输出层的各位经理(比如 Q 和 R)负责。
- 问责逻辑(链式法则):P 的总责任,等于他对所有直接上级(Q 和 R)的贡献,乘以这些上级各自承担的责任,再加起来。
- P 的总责任 =(P 对 Q 的贡献度 * Q 的总责任)+(P 对 R 的贡献度 * R 的总责任)
- 这个逻辑非常公平:
- P 对 Q 的贡献度,指的是 P 的工作报告(经过 P 的权重处理后),对 Q 的最终报告有多大影响。这个贡献度,在前向传播时就已经决定了(就是 P 到 Q 的那个权重值)。
- Q 的总责任,是上一轮问责中,CEO 已经分配给 Q 的责任(梯度)。
- 如果 Q 本身责任重大(比如 Q 是输出部的核心员工),并且 P 对 Q 的贡献也很大(P 是 Q 的核心下属),那么 P 自然要承担更大的责任。
- 如果 Q 本身就是个边缘人物(责任很小),那就算 P 再怎么努力影响 Q,P 最终分摊到的责任也很小。
这个过程就像一个责任的链式反应。CEO 的怒火(总梯度),首先传递给输出层。输出层的员工,再根据自己与下一层员工之间的亲疏远近(权重),按比例将这份怒火传递下去。
这个责任链条会一直传递下去,直到公司的最底层 —— 输入部。最终,公司里的每一个员工(每一个权重参数),都会收到一份属于自己的、独一无二的责任分配书(梯度)。
三、深入探究 —— 反向传播的实际工作流程 🔖
现在,让我们把比喻和技术术语结合起来,看一个完整的学习周期是如何在神经网络中发生的。
这个周期包含三个核心步骤:前向传播 → 反向传播 → 参数更新。
🔹 1. 步骤一:前向传播 (Forward Propagation)
- 目标:计算预测结果。
- 流程:
- a. 输入数据(一张图片)从输入层进入网络。
- b. 数据经过每一层的权重矩阵(W)的线性变换,和激活函数(如 ReLU)的非线性变换。
- c. 在这个过程中,每一层计算的中间结果(激活值)都必须被缓存下来!这非常重要,就像公司各部门的原始工作报告都必须存档备查一样。因为在稍后的问责阶段,我们需要这些原始报告来计算每个人的贡献度。
- d. 最终,在输出层得到一个预测结果
y_pred。
🔹 2. 步骤二:反向传播 (Backpropagation)
- 目标:计算网络中每一个参数(权重 W 和偏置 b)的梯度。
- 流程:
- a. 计算损失:使用损失函数(如交叉熵),比较预测结果
y_pred和真实标签y_true,计算出总损失 L。 - b. 反向开始:从总损失 L 开始,计算它对输出层激活值的梯度。这是问责的起点。
- c. 逐层向后传播:利用链式法则和前向传播时缓存的激活值,逐层计算梯度。
- 某一层参数的梯度 = (上一层传来的梯度) * (本职激活函数对输入的导数) * (前一层缓存的激活值)。
- 这个公式的直观理解就是:本层参数的责任 = (上级分配给本层的总责任) * (本层经理的放大 / 缩小效应) * (下属的原始贡献)。
- d. 这个过程一直持续到网络的第一层。当传播结束时,我们已经拥有了网络中所有参数的梯度。
🔹 3. 步骤三:参数更新(Parameter Update)
- 目标:根据责任分配书(梯度),对每个员工进行批评教育和工作整改。
- 流程:这一步由优化器(Optimizer),比如我们熟悉的梯度下降(Gradient Descent)来执行。
- 优化器遍历网络中的每一个参数。
- 它查看该参数的梯度值。
- 根据梯度下降的规则,对参数进行微小的更新:
新权重 = 旧权重 - 学习率 * 梯度 - 回顾一下梯度的含义:
- 如果梯度为正,说明增加这个权重的坏处大,所以要减去一个正值,即减小权重。
- 如果梯度为负,说明增加这个权重的好处大,所以要减去一个负值,即增加权重。
- 学习率(Learning Rate):控制了每次调整的步子大小。步子太大容易矫枉过正,太小则改进缓慢。
当所有参数都更新完毕后,一个完整的学习周期就结束了。神经网络成长了一点点。接下来,它会用新的参数,去处理下一个数据(或下一批数据),开始新一轮的“前向传播 → 反向传播 → 参数更新”的循环。
这个过程重复数百万次之后,神经网络中的亿万参数,就会被调整到一个非常合适的状态,使得整个网络对输入数据有极强的预测能力。
四、为什么反向传播如此重要?🔖
反向传播算法的诞生,是深度学习能够从理论走向现实的决定性事件。
🔹 1. 效率的革命
在反向传播出现之前,人们也想计算梯度,但他们用的是更笨的方法,比如数值逼近法。这种方法需要对网络中的每一个参数,都单独进行一次微小的扰动,然后重新进行一次完整的前向传播,来观察损失的变化。
- 打个比方:为了评估公司里每一个员工的贡献,CEO 需要让每个员工轮流加班一小时,然后重新计算一次全年财报。如果公司有 1 亿员工,就需要重新计算 1 亿次财报!这在计算上是完全不可行的。
- 反向传播的伟大之处在于,它只需要进行一次前向传播和一次反向传播,就能同时计算出网络中所有参数的梯度。它的计算复杂度与一次前向传播相当。这使得训练拥有亿万参数的深度神经网络,在计算上成为了可能。
🔹 2. 深度学习框架
今天我们听到的所有主流深度学习框架,如 TensorFlow 和 PyTorch,其最核心的功能就是自动微分(Automatic Differentiation)。
- 当你用这些框架搭建一个神经网络时,你只需要定义好网络结构(前向传播的过程)。
- 框架会自动帮你构建一个计算图(Computation Graph),记录下所有操作和依赖关系。
- 当你调用
loss.backward()这个神奇的函数时,框架就会自动在后台执行我们上面描述的整个反向传播过程,为你计算出所有参数的梯度。
你不需要手动去实现复杂的链式求导,但理解反向传播的原理,对于你进行模型调试、理解模型行为、设计新的网络结构、以及排查训练中的各种疑难杂症(如梯度消失 / 爆炸)至关重要。
五、总结一下吧,今天我们吃透了什么?🔖
结合前面写的《监督学习》、《神经网络》,再来看这篇《反向传播》,是不是透彻了很多?现在,你应该对 AI 如何知错能改有了前所未有的清晰认识。让我们来总结一下今天的核心要点:
1. 神经网络:神经网络就像一个巨型公司,训练过程就是一次 “业绩汇报 → 发现亏损 → 全员问责 → 改进工作” 的循环。
2. 前向传播:是业绩汇报的过程。数据从输入层开始,逐层计算,最终在输出层得到一个预测结果。
3. 反向传播:是全员问责的过程。从最终的损失(亏损)开始,依据链式法则,将责任逐层向后传递,最终计算出网络中每一个参数的梯度(责任分配书)。
4. 梯度的含义:是一个参数对最终损失的贡献度或责任度。它告诉我们,这个参数应该被增加还是减少,以及调整的幅度有多大。
5. 完整的学习周期:
- 前向传播算预测。
- 反向传播算梯度。
- 梯度下降(优化器)根据梯度更新参数。
如此循环,模型便在一次次的复盘与改进中不断成长。
6. 意义:
反向传播以其超高的计算效率,使得训练大规模深度神经网络成为可能,是整个深度学习领域的基石。所有现代深度学习框架的核心,都建立在它之上。