神经网络小结
文章目录
- 神经网络小结
-
- 1. 这几篇大概在干什么
- 2. 常见流程
- 3. 动手前先核对几件事
-
- 3.1 数据
- 3.2 模型
- 3.3 指标
- 4. 换了网络,哪些事其实没变
- 5. 最后一层怎么接
- 6. 提交或上线前的核对项
- 7. 常见误区
- 8. 术语表
- 9. 延伸阅读
- 10. 小结与下一主题
摘要:第 23~27 篇已经把神经网络从结构讲到 Softmax。本文不引入新公式,把本单元串起来:各篇分别解决什么问题、浅层网络常见流程、输出层怎么接,以及划分、泄漏、过拟合这些旧问题为什么仍然重要。文末预告下一主题 Embedding——类别特别多时,One-Hot 往往不够用。
1. 这几篇大概在干什么
逻辑回归和线性模型适合边界接近直线或平面的情况。一旦分界面需要明显拐折,或者特征组合很难靠手工交叉穷尽,就常会用到神经网络。
第 23~27 篇补的就是这部分:
- 节点在算什么,前向怎么走(23)
- 非线性从哪里来,ReLU / Sigmoid 怎么选(24)
- 损失如何把梯度传回去(25)
- 浅层网络怎么搭建和训练,过拟合大致长什么样(26)
- 互斥多类标签时,输出怎样接到 Softmax(27)

| 23 | 节点、隐藏层、前向;逐层加权求和再向下传递 |
| 24 | ReLU、Sigmoid、tanh;隐藏层与输出层的激活要分开选 |
| 25 | 反向传播:用链式法则把梯度算回来 |
| 26 | 浅层网络实践:非线性可分数据、宽度深度与学习率 |
| 27 | 一对多与 Softmax;互斥多类优先 Softmax + 交叉熵 |
贯穿示例仍是汽车数据:用重量、马力等预测油耗高低,或轻 / 中 / 重。模型换成网络之后,数据划分和标准化方式与前面相同。换结构不等于可以省略这些步骤。
若刚读完 23~27,本文可当复习;若手头有分类或回归任务、准备用浅层网络,也可对照后面的核对项再动手。
2. 常见流程
神经网络项目里,较早出问题的地方往往不是层数,而是划分、缩放和指标。常见顺序如下:

先切 train / val / test
→ 缩放、词表只在训练集上 fit
→ 定层数、宽度、激活、最后一层输出形式
→ 训练,观察验证损失,必要时早停
→ 用验证集选择结构与学习率等
→ 测试集留到定稿后再评估
与线性模型相同的部分:
- 先切分再 fit 变换,避免全表标准化后再切分
- 验证集可反复查看,测试集尽量少碰
- 类别很不平衡时,不要只报告准确率
网络额外需要注意的:隐藏层激活可先试 ReLU;最后一层按任务选择(见第 5 节);参数增多后更容易过拟合,因此宜先浅后深、先窄后宽。
以汽车油耗为例:按车型或随机划分均可;StandardScaler 只在训练集上 fit;输入为标准化后的重量、马力等。二分类用一个 Sigmoid;轻 / 中 / 重互斥则用 Softmax。
结构上可先建立基线:逻辑回归或几乎无隐藏层的模型,再加一层隐藏层(宽度可先试 16~64),验证集确有提升后再考虑第二层。宽度同样宜先窄后宽。学习率、batch、epoch 可以后调;若划分错误或输出接错,只调这些超参数通常解决不了。泄漏存在时,训练曲线也可能看起来很好,因此要单独检查预处理是否只用了训练集信息。
3. 动手前先核对几件事
在加宽、加深或更换优化器之前,先确认数据和任务定义没有问题。否则验证曲线很难反映真实泛化情况。

3.1 数据
| 划分和泄漏 | 变换、词表只在训练集 fit | 18、19、22 |
| 特征和异常值 | 数值有缩放;类别编码正确 | 14~17 |
| 标签类型 | 二分类、互斥多类、多标签分清 | 13、27 |
| 样本比例 | 了解是否不平衡,并选择匹配的指标 | 20 |
3.2 模型
| 复杂度 | 先浅后深;宽度与样本量大致匹配 | 26 |
| 激活 | 隐藏层用 ReLU;输出按任务选择 | 24、27 |
| 训练过程 | 学习率合理;验证损失可解释 | 25、26 |
| 正则 | L2、早停;过拟合时可先缩小网络 | 21、26 |
3.3 指标
| 曲线 | 能区分「仍在学习」和「已经过拟合」 |
| 业务相关指标 | 不平衡时看 F1 / 召回 / AUC 等,不只看 accuracy |
| 测试集 | 定稿后再评估,避免反复用测试集调参 |
汽车例子:若「高效车」很少,验证时需同时看召回;若标签是轻 / 中 / 重,应看每类表现或混淆矩阵,而不是只看总准确率。
4. 换了网络,哪些事其实没变

相对线性模型,主要变化包括:
- 分界面可以非直线,不必完全依赖手工多项式或特征交叉
- 加宽加深会提高表达能力,同时也更容易过拟合
- 需要处理激活、反向传播和输出层接法
下列原则仍然适用:
- 训练好、验证差,仍是过拟合
- 全表先标准化再切分,仍是泄漏
- 类别很不平衡却只报准确率,结果仍可能误导
- 反复用测试集调参,测试集会退化成另一份验证集
神经网络提高的是函数的表达能力,并不替代数据划分与评估纪律。第 18~22 篇关于泛化的内容仍然适用。
特征工程也仍然需要:数值特征要缩放,类别词表要在训练集上构建。网络能学习特征组合,不等于可以把邮编当连续数值、把 ID 当有序量直接输入。第 14、17 篇提到的问题,换成 MLP 同样会出现,有时只是更难从损失曲线上直接看出来。
5. 最后一层怎么接
训练损失对接的是输出层。输出形式与任务不一致时,优化目标也会偏离实际问题。

| 二分类 | 1 × Sigmoid | 二元交叉熵 | 是否高效 |
| 互斥 K 类 | K × Softmax | 多类交叉熵 | 轻 / 中 / 重 |
| 多标签 | K × Sigmoid | 每个标签各自 BCE | 可同时标记「省油」与「进口」等 |
隐藏层继续使用 ReLU(或同类激活)即可,不必每层都使用 Softmax。Softmax 放在互斥多类的最后一层即可。
线性模型里一对多(每类一个二分类器)很常见;神经网络处理互斥多类时,更常用 Softmax。标签可以重叠时,再用多个 Sigmoid。细节见第 27 篇。
概念示意:
# 二分类
# y_hat = sigmoid(W @ h + b)
# 互斥三分类
# logits = W @ h + b # shape (3,)
# probs = softmax(logits) # 各分量之和约为 1
6. 提交或上线前的核对项
[ ] train / val / test 已划分;缩放只在 train 上 fit
[ ] 任务类型清楚:回归 / 二分类 / 互斥多类 / 多标签
[ ] 隐藏层激活已定(默认 ReLU);输出与任务一致
[ ] 已查看验证损失曲线;必要时使用早停
[ ] 指标与类别比例匹配;不只看 accuracy
[ ] 测试集未用于调参;终验尽量只做一次
[ ] (可选)已与逻辑回归或很浅的 MLP 对比
若某项不满足,应优先修正数据和任务定义,再考虑增加层数。同一套汽车数据上,可先跑逻辑回归,再跑一层或两层 MLP;仅当 MLP 在验证集上明显更好时,再考虑加深,避免网络很大、分数虚高却难以解释收益来自哪里。
7. 常见误区
| 使用神经网络后忽略划分和泄漏 | 参数更多时,泄漏通常更严重 |
| 隐藏层也使用 Softmax | Softmax 用于互斥多类输出;隐藏层用 ReLU |
| 互斥多类却用多个独立 Sigmoid 作为最终概率 | 概率之和不必为 1;互斥场景优先 Softmax |
| 验证损失已上升仍继续训练 | 停止训练,或回退到验证最优轮次 |
| 只报告训练集准确率 | 至少报告验证集;不平衡时补充 F1 / 召回 |
| 上万维 One-Hot 直接接全连接 | 权重规模过大;更适合用 Embedding |
第 26 篇中线性不可分的数据,浅层网络可以分开,并不意味着越深越好。样本较少时,较浅的网络配合正则,往往比盲目加深更稳定。
8. 术语表
| 前向传播 | 从输入计算到输出(以及损失) |
| 反向传播 | 用链式法则回传梯度并更新权重 |
| 激活函数 | 引入非线性;隐藏层与输出层常使用不同激活 |
| 隐藏层 | 位于输入与输出之间的层 |
| 过拟合 | 训练集表现好,新数据上表现差 |
| 早停 | 验证指标变差时停止,或回退到较好轮次 |
| Softmax | 将 logits 变成各分量之和为 1 的多类概率 |
| 输出头 | 最后一层激活,以及与之匹配的损失 |
| Embedding | 将离散 ID 映射为低维稠密向量(下一主题) |
9. 延伸阅读
| 专栏第 22 篇 | 上一单元回顾 |
| 专栏第 23~27 篇 | 本单元正文 |
| sklearn MLPClassifier | 浅层网络快速实验 |
| PyTorch nn.Module | 自定义层与训练循环 |
| NumPy | 手写前向 / Softmax 练习 |
10. 小结与下一主题
神经网络这几篇可以概括为三点:
划分、防泄漏和指标选择,与第 14~22 篇相同。表达能力增强,不意味着这些步骤可以省略。
下一主题是 Embedding。
当类别水平很多(用户 ID、商品、词、车型编码等)时,One-Hot 会带来明显负担:向量又长又稀疏,维数等于词表大小;第一层权重随之增加;相近类别在向量空间中几乎正交,模型难以直接利用相似性。Embedding 将每个类别映射为较短的稠密向量,使相近类别在空间中更接近,并减少参数量。

若汽车数据中品牌或车系有上千个水平,不必先做成上千维 One-Hot 再接很宽的全连接层。可以先学习低维品牌向量,再与重量、马力等数值特征拼接后输入后续层。下一篇从稀疏表示的问题开始说明 Embedding 的用途。
本单元到此结束。后续 Embedding 等内容会默认已熟悉划分、防泄漏、输出接法与验证曲线。若这些环节仍不清晰,可先重读第 22 篇。
系列导航:
- 上一篇:【机器学习】(27)—— 神经网络多分类
- 下一篇(预告):Embedding:类别很多时为什么还要稠密向量
如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。
网硕互联帮助中心





评论前必须登录!
注册