【机器学习】(27)—— 神经网络小结
神经网络小结文章目录神经网络小结1. 这几篇大概在干什么2. 常见流程3. 动手前先核对几件事3.1 数据3.2 模型3.3 指标4. 换了网络哪些事其实没变5. 最后一层怎么接6. 提交或上线前的核对项7. 常见误区8. 术语表9. 延伸阅读10. 小结与下一主题摘要第 2327 篇已经把神经网络从结构讲到 Softmax。本文不引入新公式把本单元串起来各篇分别解决什么问题、浅层网络常见流程、输出层怎么接以及划分、泄漏、过拟合这些旧问题为什么仍然重要。文末预告下一主题 Embedding——类别特别多时One-Hot 往往不够用。1. 这几篇大概在干什么逻辑回归和线性模型适合边界接近直线或平面的情况。一旦分界面需要明显拐折或者特征组合很难靠手工交叉穷尽就常会用到神经网络。第 2327 篇补的就是这部分节点在算什么前向怎么走23非线性从哪里来ReLU / Sigmoid 怎么选24损失如何把梯度传回去25浅层网络怎么搭建和训练过拟合大致长什么样26互斥多类标签时输出怎样接到 Softmax27篇次大概讲了什么23节点、隐藏层、前向逐层加权求和再向下传递24ReLU、Sigmoid、tanh隐藏层与输出层的激活要分开选25反向传播用链式法则把梯度算回来26浅层网络实践非线性可分数据、宽度深度与学习率27一对多与 Softmax互斥多类优先 Softmax 交叉熵贯穿示例仍是汽车数据用重量、马力等预测油耗高低或轻 / 中 / 重。模型换成网络之后数据划分和标准化方式与前面相同。换结构不等于可以省略这些步骤。若刚读完 2327本文可当复习若手头有分类或回归任务、准备用浅层网络也可对照后面的核对项再动手。2. 常见流程神经网络项目里较早出问题的地方往往不是层数而是划分、缩放和指标。常见顺序如下先切 train / val / test → 缩放、词表只在训练集上 fit → 定层数、宽度、激活、最后一层输出形式 → 训练观察验证损失必要时早停 → 用验证集选择结构与学习率等 → 测试集留到定稿后再评估与线性模型相同的部分先切分再fit变换避免全表标准化后再切分验证集可反复查看测试集尽量少碰类别很不平衡时不要只报告准确率网络额外需要注意的隐藏层激活可先试 ReLU最后一层按任务选择见第 5 节参数增多后更容易过拟合因此宜先浅后深、先窄后宽。以汽车油耗为例按车型或随机划分均可StandardScaler只在训练集上fit输入为标准化后的重量、马力等。二分类用一个 Sigmoid轻 / 中 / 重互斥则用 Softmax。结构上可先建立基线逻辑回归或几乎无隐藏层的模型再加一层隐藏层宽度可先试 1664验证集确有提升后再考虑第二层。宽度同样宜先窄后宽。学习率、batch、epoch 可以后调若划分错误或输出接错只调这些超参数通常解决不了。泄漏存在时训练曲线也可能看起来很好因此要单独检查预处理是否只用了训练集信息。3. 动手前先核对几件事在加宽、加深或更换优化器之前先确认数据和任务定义没有问题。否则验证曲线很难反映真实泛化情况。3.1 数据看什么怎样算大致过关相关篇划分和泄漏变换、词表只在训练集 fit18、19、22特征和异常值数值有缩放类别编码正确1417标签类型二分类、互斥多类、多标签分清13、27样本比例了解是否不平衡并选择匹配的指标203.2 模型看什么怎样算大致过关相关篇复杂度先浅后深宽度与样本量大致匹配26激活隐藏层用 ReLU输出按任务选择24、27训练过程学习率合理验证损失可解释25、26正则L2、早停过拟合时可先缩小网络21、263.3 指标看什么怎样算大致过关曲线能区分「仍在学习」和「已经过拟合」业务相关指标不平衡时看 F1 / 召回 / AUC 等不只看 accuracy测试集定稿后再评估避免反复用测试集调参汽车例子若「高效车」很少验证时需同时看召回若标签是轻 / 中 / 重应看每类表现或混淆矩阵而不是只看总准确率。4. 换了网络哪些事其实没变相对线性模型主要变化包括分界面可以非直线不必完全依赖手工多项式或特征交叉加宽加深会提高表达能力同时也更容易过拟合需要处理激活、反向传播和输出层接法下列原则仍然适用训练好、验证差仍是过拟合全表先标准化再切分仍是泄漏类别很不平衡却只报准确率结果仍可能误导反复用测试集调参测试集会退化成另一份验证集神经网络提高的是函数的表达能力并不替代数据划分与评估纪律。第 1822 篇关于泛化的内容仍然适用。特征工程也仍然需要数值特征要缩放类别词表要在训练集上构建。网络能学习特征组合不等于可以把邮编当连续数值、把 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) # 各分量之和约为 16. 提交或上线前的核对项[ ] train / val / test 已划分缩放只在 train 上 fit [ ] 任务类型清楚回归 / 二分类 / 互斥多类 / 多标签 [ ] 隐藏层激活已定默认 ReLU输出与任务一致 [ ] 已查看验证损失曲线必要时使用早停 [ ] 指标与类别比例匹配不只看 accuracy [ ] 测试集未用于调参终验尽量只做一次 [ ] 可选已与逻辑回归或很浅的 MLP 对比若某项不满足应优先修正数据和任务定义再考虑增加层数。同一套汽车数据上可先跑逻辑回归再跑一层或两层 MLP仅当 MLP 在验证集上明显更好时再考虑加深避免网络很大、分数虚高却难以解释收益来自哪里。7. 常见误区常见问题更稳妥的做法使用神经网络后忽略划分和泄漏参数更多时泄漏通常更严重隐藏层也使用 SoftmaxSoftmax 用于互斥多类输出隐藏层用 ReLU互斥多类却用多个独立 Sigmoid 作为最终概率概率之和不必为 1互斥场景优先 Softmax验证损失已上升仍继续训练停止训练或回退到验证最优轮次只报告训练集准确率至少报告验证集不平衡时补充 F1 / 召回上万维 One-Hot 直接接全连接权重规模过大更适合用 Embedding第 26 篇中线性不可分的数据浅层网络可以分开并不意味着越深越好。样本较少时较浅的网络配合正则往往比盲目加深更稳定。8. 术语表术语含义前向传播从输入计算到输出以及损失反向传播用链式法则回传梯度并更新权重激活函数引入非线性隐藏层与输出层常使用不同激活隐藏层位于输入与输出之间的层过拟合训练集表现好新数据上表现差早停验证指标变差时停止或回退到较好轮次Softmax将 logits 变成各分量之和为 1 的多类概率输出头最后一层激活以及与之匹配的损失Embedding将离散 ID 映射为低维稠密向量下一主题9. 延伸阅读资源适合看什么专栏第 22 篇上一单元回顾专栏第 2327 篇本单元正文sklearn MLPClassifier浅层网络快速实验PyTorch nn.Module自定义层与训练循环NumPy手写前向 / Softmax 练习10. 小结与下一主题神经网络这几篇可以概括为三点隐藏层加激活后分界面可以非直线。反向传播负责更新参数泛化仍依赖验证损失与早停。二分类用 Sigmoid互斥多类用 Softmax多标签用多个 Sigmoid。划分、防泄漏和指标选择与第 1422 篇相同。表达能力增强不意味着这些步骤可以省略。下一主题是Embedding。当类别水平很多用户 ID、商品、词、车型编码等时One-Hot 会带来明显负担向量又长又稀疏维数等于词表大小第一层权重随之增加相近类别在向量空间中几乎正交模型难以直接利用相似性。Embedding 将每个类别映射为较短的稠密向量使相近类别在空间中更接近并减少参数量。若汽车数据中品牌或车系有上千个水平不必先做成上千维 One-Hot 再接很宽的全连接层。可以先学习低维品牌向量再与重量、马力等数值特征拼接后输入后续层。下一篇从稀疏表示的问题开始说明 Embedding 的用途。本单元到此结束。后续 Embedding 等内容会默认已熟悉划分、防泄漏、输出接法与验证曲线。若这些环节仍不清晰可先重读第 22 篇。系列导航上一篇【机器学习】27—— 神经网络多分类下一篇预告Embedding类别很多时为什么还要稠密向量如果本篇对你有帮助欢迎点赞、收藏、关注博主机器学习专栏持续更新中下次更新不迷路。