本节摘要:把 2.2 的账本接回实践,给出可执行的选型流程:隐藏层默认 ReLU 起步,遇死亡或饱和再升级到 Leaky/ELU/Swish;输出层先按任务类型定,二分类 Sigmoid、多分类 Softmax、回归线性。附一个图像分类与一个数值回归的完整选型决策过程。
前面两节给了"为什么"和"有哪些",这一节给"怎么办"。激活函数的选型没那么玄,它有一套稳定的思考顺序:先分清隐藏层和输出层,再按任务与现象逐级做决策。我们用两个真实项目把流程走一遍。
隐藏层的默认答案是明确的:ReLU 起步。 它便宜、供血稳、绝大多数任务够用。要动摇这个默认,得先碰到它特有的问题——死亡 ReLU(负区间梯度恒为 0,见 2.4)。一旦观察到某条路径权重的梯度长期为 0、训练停在半路,你就往"续命派"升级。
升级的顺序我们建议这样排:
关键在"多除非必要、不动默认"。盲目把所有层都换成 Swish 并不一定更好,还可能带来多一点的算力和未知的调参成本。
输出层的选择逻辑和你想的任务类型强绑定,基本是查表:
| 任务类型 | 输出层激活 | 理由 |
|---|---|---|
| 二分类 | Sigmoid | 输出压进 0–1,当正类概率 |
| 多分类 | Softmax | 输出和为 1 的概率分布 |
| 回归(无界实数) | 线性(不加) | 输出任意实数,直接当预测值 |
| 回归(有界) | 视边界用 Sigmoid/Tanh 缩放 | 把输出限制在目标范围 |
这里面最容易翻车的是"回归也套个 Sigmoid"——把本来无界的目标值硬压进 0–1,损失函数算出来的方向会和真实任务拧着来。判断依据永远是"我的标签长什么样"。
案例一:图像分类(CIFAR-10,十类)
背景是一个十类图片分类网络,用卷积堆叠。决策过程:
结果与解读:训练日志里验证精度稳定爬升,说明每层的非线性供给充足、梯度没有整体消失——ReLU 的默认决策在这里够用。
案例二:房价预测(回归,输出一个实数)
背景是预测一栋房子的成交价,最后输出一个连续金额。决策过程:
结果与解读:换用线性输出后,训练损失从半地下落到稳定收敛,误差指标明显改善。这个案例值得记住的经验是:先看输出层对不对,再回去检查隐藏层是否"死了一批"。
如果两个案例里最值钱的判断不是"用了哪个函数",而是"按任务定位输出层 + 按现象抓隐藏层",你的选型思路就对了。
⚠️ 常见坑:一上来就 ABC 三个激活函数各训一轮做对比实验,纯属烧时间。正确姿势是先按"输出层查表 + 隐藏层默认"装配,跑一个基线,遇到明确现象(死亡、饱和、不收敛)再定向替换。
图像与常规分类,ReLU 几乎躺赢;但你一旦碰 RNN/LSTM 这类带循环的结构,故事又不一样。循环结构在时间步上反复穿过同一个函数,如果那个函数梯度稍弱,几十步一乘就消失;若梯度稍强,又可能爆炸。
所以序列任务里常用的不是 ReLU,而是专门设计的带门控的结构(如 LSTM、GRU 内部的 Sigmoid/Tanh 门控),因为它们的"门"能在时间维度上记忆或遗忘信息。给这类网络硬塞 ReLU 隐藏层,往往效果反而不稳定。
| 网络类型 | 隐藏层激活建议 | 补充说明 |
|---|---|---|
| CNN/MLP 分类 | ReLU 起步,遇死换 Leaky/ELU | 计算便宜、供血足 |
| RNN/LSTM | 用门控单元内建激活 | 别裸用 ReLU 硬堆时间步 |
| 大规模深层 | Swish/SiLU 常试用 | 实验压过 ReLU,但算力更高 |
选型之后出问题,别急着换函数,先反问三句(都答完再动手):
这三句既是对本节选型的复盘,也是进入 2.4 前的一次热身——2.4 要正式拆梯度消失、爆炸与死亡 ReLU 这三顽疾。
选型还有个容易误会的角落:当你把隐藏层从 ReLU 换成 Swish,你以为只是"换个激活",但 Swish 曲线平滑、负区也不完全恒零,它同时放宽了梯度供给与可导性。这意味着换激活常常不是孤立动作,它常与"是否加 BatchNorm""是否加深"连在一起发生作用。 因此看别人复现结果时,不必把"他用 Swish"奉为金科玉律——那往往是一整套自洽配置的合称。你真正要复刻的,是那整台装配,而不是某一个函数名。想清这一点,你挑激活时就会少很多"照抄却失灵"的困惑。
输出层老提"概率",隐藏层动不动就"死一批"——这两个坑一旦真切发生在你日志里,就该去 2.4 讨个说法了。