云计算百科
云计算领域专业知识百科平台

【机器学习】(27)—— 神经网络小结

神经网络小结

文章目录

  • 神经网络小结
    • 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. 小结与下一主题

神经网络这几篇可以概括为三点:

  • 隐藏层加激活后,分界面可以非直线。
  • 反向传播负责更新参数;泛化仍依赖验证损失与早停。
  • 二分类用 Sigmoid,互斥多类用 Softmax,多标签用多个 Sigmoid。
  • 划分、防泄漏和指标选择,与第 14~22 篇相同。表达能力增强,不意味着这些步骤可以省略。

    下一主题是 Embedding。

    当类别水平很多(用户 ID、商品、词、车型编码等)时,One-Hot 会带来明显负担:向量又长又稀疏,维数等于词表大小;第一层权重随之增加;相近类别在向量空间中几乎正交,模型难以直接利用相似性。Embedding 将每个类别映射为较短的稠密向量,使相近类别在空间中更接近,并减少参数量。

    请添加图片描述

    若汽车数据中品牌或车系有上千个水平,不必先做成上千维 One-Hot 再接很宽的全连接层。可以先学习低维品牌向量,再与重量、马力等数值特征拼接后输入后续层。下一篇从稀疏表示的问题开始说明 Embedding 的用途。

    本单元到此结束。后续 Embedding 等内容会默认已熟悉划分、防泄漏、输出接法与验证曲线。若这些环节仍不清晰,可先重读第 22 篇。

    系列导航:

    • 上一篇:【机器学习】(27)—— 神经网络多分类
    • 下一篇(预告):Embedding:类别很多时为什么还要稠密向量

    如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【机器学习】(27)—— 神经网络小结
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!