本节摘要:把三要素摆上同一张天平桌:激活函数管"表达力"、损失函数管"刻度与方向"、优化器管"步伐与速度"。本节用表格逐一称量每方的职责、它面临的张力,并让三者对齐到前向与反向的具体环节,建立起全书共用的观察框架。
上一节我们把优化拆成了三个问号。这一节不再停在抽象层面,而是给它们各自"领个工位",看这三样东西在前向、反向两条路上各站哪儿。学完后你应该能指着任意一段训练日志,说出是哪个环节在制造嘈杂。
我们给三要素各派一个比喻角色,它们共同构成那一台天平:
一句话把它们焊起来:激活函数决定网络能表达什么,损失函数决定要往哪调,优化器决定这一步怎么走。
把三句话落到一次完整训练里,位置非常清晰:
| 环节 | 谁登场 | 它的输入 | 它的输出 |
|---|---|---|---|
| 前向传播 | 激活函数 | 上一层的加权求和值 | 本层的激活值 |
| 打分 | 损失函数 | 网络预测与真实标签 | 一个损失标量 |
| 反向传播 | (梯度经由每个激活函数求导) | 损失 | 每层参数的梯度 |
| 参数更新 | 优化器 | 梯度与历史状态 | 更新后的参数 |
注意一个容易被忽略的细节:激活函数同时站在"前向"和"反向"两条路上。 前向它决定表达力,反向它还在算梯度——而梯度一穿再多层就变小(后面第 2 章会讲到梯度消失),所以激活函数的形状甚至会反过来拖累优化器的收敛。这就是三个砝码互相牵制的第一处实锤。
设想你在训练一个手写数字的分类网络。数据是 28×28 的灰度图,标签是 0 到 9。
这四步跑完一遍,就是一个 batch 的训练。你可以据此反推:如果是对分类任务却用了回归的平方误差损失,刻度尺本身就有问题;如果激活函数错误地用了 Sigmoid 堆了五六层,梯度早就消失得测不出来,优化器想搬也搬不动。
下面这张 SVG 把"三分工位"与训练环节对齐,方便你日后排查时一眼定位。

把三要素当独立旋钮,是新手最常见的误区。遇到不收敛,很多人的第一反应是"把学习率调小",却忽视了自己的损失函数是否匹配任务、激活函数是否已经在深层把梯度抹平。正确的排查顺序是把刻度(损失)、表达(激活)、步伐(优化)按顺序过一遍——这也正是本书第 2、3、4 章的编排顺序。
⚠️ 常见坑:把"损失还在降"误当成"模型在变好"。损失是通往目标的指南针,不是目标本身;它下降但验证集精度不涨,多半是拟合过猛或刻度本身不合适。
为了彻底理解三者各管什么,最好的老师是"全装反"会怎样。我们故意把三件事接错,看会发生什么剧变:
这三段"装反",正好反着印证了第 1.2 节那张分工图:损失定目标方向、激活定信号强弱、优化器定步幅稳定。任何一个环节崩了,练兵日志都会以完全不同的方式"烂"给你看——而这恰恰是你以后反推问题出在哪的三条线索。
离开之前,把三者分工压缩成随时能取用的几行。以后每遇到一个训练问题,先对号入座:
| 你看到的症状 | 更可能卡在谁 | 回头翻哪节复查 |
|---|---|---|
| 损失降了但指标不升 | 刻度(损失/输出层) | 3.3、2.3 |
| 浅层权重长期不动 | 表达(激活/初始化) | 2.4 |
| 损失锯齿、震荡 | 步伐(优化器/学习率) | 4.3、4.5 |
| 损失 NaN、乱跳 | 步伐 + 保护缺失 | 5.3 |
| 验证反弹、训练压低 | 拟合与泛化天平失衡 | 5.2 |
这张表不是真理,但它能成为你进入第 5 章"实战调试"之前的第一块敲门砖——把"现象"先归位到"三个砝码之一",你第 2–5 章读起来就会处处对上号。
设想你第一次接手一个老项目的迁移:原有模型换到新平台后直接不收敛,同事甩下一句"调学习率吧"。你这时候别先动邻居的旋钮,而是按这一节的排查顺序过三关。先看刻度:这个多标签分类项目,损失用的是多类交叉熵还是二元交叉熵?多数"不收敛"第一步就死在这里——标签是两个独立的正负事件,你却在用给 Softmax 派的多类交叉熵,刻度在说谎。再看表达:换平台后预训练权重的归一化方式变了,几层卷积的输出分布整个偏移,浅层梯度被抹平,表现就是"浅层不动"。最后才轮到步伐:确认前两关没问题,再回去看学习率是不是换环境后没跟着批大小一起调。
你顺着"刻度 → 表达 → 步伐"走完这一圈,往往比同事那句"先调学习率"能早半天定位。这就是第 1.2 节那张分工表在你手里第一次现实兑现——它给你的不是灵感,而是一个稳定的排除顺序。
第 2 章先从那个"双重身份"的砝码聊起——激活函数凭什么能给网络注入非线性。