一、通用核心规则(先记这 4 句)
- 隐藏层 :只负责非线性,不跟损失 / 优化器绑定
- 输出层激活 + 损失函数 = 必须严格配对
- 优化器通用 :绝大多数任务优先用 Adam
- 损失只算在输出层,梯度自动回传更新所有
二、全套配对速查表(直接背 / 直接用)
| 任务场景 | 隐藏层激活(推荐) | 输出层激活 | 标准损失函数 | 推荐优化器 |
|---|---|---|---|---|
| 回归(任意实数) | ReLU / GELU | 无(线性) | MSE / MAE / HuberLoss | Adam / SGD |
| 回归(输出≥0) | ReLU / GELU | ReLU | MSE | Adam |
| 二分类(0/1) | ReLU / GELU | Sigmoid | BCE(二元交叉熵) | Adam |
| 多分类(互斥类别) | ReLU / GELU | Softmax | CrossEntropyLoss(交叉熵) | Adam |
| 多标签分类(多标签同时存在) | ReLU / GELU | Sigmoid(逐标签) | BCEWithLogitsLoss / BCE | Adam |
| Transformer / LLM / 大模型 | GELU(主流) | 任务决定(分类用 Softmax,生成用 Linear+Logits) | 对应任务损失 | AdamW(比 Adam 更稳) |
三、极简口诀(10 秒记住)
- 回归:线性输出 + MSE
- 二分类:Sigmoid + BCE
- 多分类:Softmax + 交叉熵
- 隐藏层:ReLU 传统,GELU 现代
- 优化器:默认 Adam,大模型用 AdamW
四、关键易错点(必看)
- CrossEntropyLoss 内部自带 Softmax 。 PyTorch:模型输出层不要手动写 Softmax,直接输 logits 即可
- BCEWithLogits = Sigmoid + BCE同样:输出层可以不写 Sigmoid,直接丢进损失
- 隐藏层永远不用 Sigmoid / Tanh(梯度消失)
- 优化器只管更新参数,和任务无关,只影响训练速度 / 稳定性
五、一句话终极总结
- 隐藏层:ReLU / GELU(加非线性)
- 输出层:按任务选激活
- 损失:和输出激活严格配对
- 优化器:默认 Adam 通吃
四大场景终极对比(背这个就够)
| 场景 | 输出性质 | 简单例子 | 输出层激活 | 常用损失 |
|---|---|---|---|---|
| 回归 | 连续数值 | 房价 238.6 万、气温 26.8℃ | 线性 / ReLU | MSE |
| 二分类 | 二选一(是 / 否) | 图片是猫?是 / 否 | Sigmoid | BCE |
| 多分类(互斥) | 多选一 | 动物:猫 / 狗 / 鸟(只选一个) | Softmax | CrossEntropy |
| 多标签分类 | 多选多(共存) | 图片:猫 + 狗 + 沙发(同时存在) | Sigmoid | BCE |