A21

训练技巧

点击正文段落选定收藏或划线位置;未选定时使用屏幕内第一段。

课内目录

训练模型时,最容易产生的错觉是:只要训练损失不断下降,模型就越来越有用。实际项目中,客户流失模型可能把真正会流失的客户漏掉,图像模型可能只记住拍摄背景,短文本模型也可能把重复评论背成答案。训练技巧要把参数更新、数据处理和评估连起来,让每次调整都能回答明确的问题。

本课以表格客户流失预测为主线,穿插 Fashion-MNIST 图像分类与公开短文本分类任务。重点是建立可比较的实验、看懂曲线并处理常见失败。优化器内部推导、复杂调度策略与分布式训练细节留到后续。学完后,你应能说明某次调整为什么值得尝试,以及需要什么证据才能保留它。

1 训练技巧要回答什么

设想使用公开的 Telco Customer Churn 数据练习分类。输入包括在网月数、月费用、合同类型、网络服务类型与支付方式,目标是预测客户是否流失。先说清楚预测时点:如果任务是在月初识别未来可能流失的客户,就只能使用月初已经知道的信息。公开数据通常是静态快照,未必足以严格还原这样的时间关系,因此适合教学演示,不能直接证明未来部署效果。

训练技巧首先回答“学到了没有”。损失函数把预测偏差转成可优化的数值,训练程序据此调整参数。但损失下降不等于每项分类指标都上升,也不保证未知客户上的表现改善。其次要回答“用了多少代价”:训练多久、占用多少内存、需要多少次实验。最后还要回答“结论能否重现”:数据划分、随机种子和停止条件是否明确。

把数据分成训练集、验证集与测试集,例如比例为 70%、15%、15%。训练集用于拟合参数,验证集用于选择学习率、停止轮次与分类阈值,测试集用于方案锁定后的最终评估。如果同个客户有多条记录,应按客户分组,避免同人的记录跨集合;如果预测未来,应优先采用符合使用情境的时间划分,而不是机械套用随机比例。

从任务定义到训练对照的整体路径
从任务定义到训练对照的整体路径

评价流失模型时,先把“流失”定义为正类。precision 表示被判为流失的客户中实际流失的比例,recall 表示实际流失客户中被找出的比例,F1 是 precision 与 recall 的调和平均。ROC-AUC 衡量跨阈值的排序能力,不能直接替代某个阈值下的召回要求。后文的 AUC 均指 ROC-AUC;类别严重不平衡时,还可补充 PR 曲线及对应面积。

训练技巧不是到处搜寻能让分数升高的按钮。合格的调整应有观察、假设和对照:例如验证损失剧烈震荡,怀疑学习率过大,于是在其他条件固定时降低学习率。若同时换模型、重分数据并修改指标,即使结果改善,也很难知道原因。建立朴素基线的价值,就在于给后续改动提供可信的参照。

2 数据管线、批大小与学习率

模型看到的不是硬盘上的文件,而是数据管线交付的数值。表格任务需要处理缺失值、类别编码和数值缩放;图像任务需要读取、解码并调整尺寸;短文本任务需要分词、截断与组成批次。任何会从数据中学习统计量的预处理,都应只在训练集拟合,再用同套规则变换验证集和测试集。提前用全部数据计算均值,也会让评估混入额外信息。

以月费用和在网月数为例,两列的数值范围可能不同。对依赖梯度更新的简单模型,适当缩放有助于稳定训练,但不能把它理解成所有模型的统一要求。累计费用还可能存在空字符串,必须确认它究竟表示缺失还是数值 0。标签编码同样需要核对:正负类颠倒时,训练程序可能正常运行,业务解释却完全相反。

训练、验证与测试的数据边界
训练、验证与测试的数据边界

批大小是每次更新使用的样本数。若训练集有 640 条、批大小为 64,那么完整看过训练集 1 遍需要 10 次更新,这 1 遍称为 1 个 epoch,也就是训练轮次。若不能整除,最后可能留下较小批次;是否丢弃末批必须记录。计算整轮平均损失时,应按各批样本数加权,避免把小批次和大批次赋予相同权重。

较小批次的梯度估计通常波动较大,但每次占用的内存较少;较大批次可能更充分利用设备,却会减少同轮数下的更新次数。不能仅凭“批次更大”断言训练更好,也不能把同样 10 轮当成完全相同的优化过程。比较时需要明确固定的是轮数、更新次数还是总时间,并同时报告其他数量。

学习率控制每次更新的步幅。用普通梯度更新作入门示意,可以写成“新参数 = 旧参数 − 学习率 × 梯度”。学习率过大时可能越过较合适的区域,出现震荡甚至发散;过小时可能下降缓慢,在有限预算内尚未学好。这个公式用于理解方向和步幅,实际优化器可能还保存历史状态,不能据此推断所有实现细节。

训练数据通常每轮重新打乱,以减少固定排列对批次的影响。图像的随机裁剪等增强通常只用于训练;验证时采用固定处理和评估模式,才能比较不同轮次。文本任务若按词表编码,词表也应由训练数据建立。先让管线稳定交付正确样本,再谈更复杂的训练配置,否则模型会非常高效地学习错误输入。

数据如何组成批次并进入参数更新
数据如何组成批次并进入参数更新

3 正则、早停与过拟合边界

过拟合常见的外观是训练表现持续改善,验证表现却停滞或变差。模型逐渐利用了训练样本中的偶然关联,例如把背景颜色当成衣物类别线索,或者记住少数客户的特殊组合。但曲线之间有差距本身并不能证明过拟合:训练使用随机增强、验证不使用,或训练损失包含正则项时,两条损失的含义就可能不同,必须先核对记录口径。

正则化可以理解为限制模型过度迎合训练样本的办法。入门阶段可先比较较简单的模型、适量的权重衰减,以及适合任务的数据增强。权重衰减会对过大的参数施加约束,具体实现需要查看所用优化器的说明;不要把它与所有形式的正则项视为完全相同。每次只调整有限因素,并观察是否以训练拟合稍弱换来验证表现更稳定。

数据增强必须保留标签含义。Fashion-MNIST 的轻微平移可用来模拟位置变化,但过度裁剪可能切掉关键衣物轮廓。短文本的随意删词可能删掉否定词,把“并不好用”变成“好用”。客户流失表格也不适合任意扰动合同类型。增强是关于真实变化范围的假设,不是让样本看起来越不同越好。

早停是在训练过程中监控预定的验证指标,并在足够长时间没有改善后停止。例如每轮验证 1 次,监控验证损失,连续 5 次未达到预先约定的最小改善就停止,同时恢复验证损失最低时的检查点。停止的轮次与最终恢复的轮次可能不同,报告中要区分。耐心值也依赖验证频率,不能脱离“每隔多久验证”单独解释。

如果任务优先保证流失召回率,可以提前指定主要选择指标与约束,例如在验证集上选择满足召回要求的阈值,再比较 precision。不要看到哪个指标上涨就临时换用哪个指标。F1 对阈值敏感,AUC 则汇总多个阈值的排序表现;它们可能在不同轮次达到最佳,必须在实验前确定用于选择检查点的规则。

正则和早停都不能修复泄漏。若训练输入包含客户取消服务后才产生的字段,验证分数再稳定也缺乏实际意义。它们同样不能保证抵抗分布变化:新地区客户、不同设备拍摄的图片或新出现的网络用语,都可能超出训练经验。先守住数据与评估边界,再讨论模型应受多强的约束,才有可靠依据。

4 动手:对照一次训练曲线诊断

准备 1 个简洁的表格分类模型,冻结数据划分、预处理与随机种子。将训练预算设为最多 30 轮,每轮记录训练损失、验证损失、precision、recall、F1 与 AUC,同时保存检查点。阈值先固定为 0.5 以便观察训练过程;如果之后需要调阈值,应把它作为验证集上的独立选择步骤。下面的数值是诊断练习用的示意记录,不是数据集实测成绩。

轮次训练损失验证损失验证 F1验证 AUC
10.610.600.480.70
50.480.490.590.80
100.400.460.620.83
150.330.490.600.82
200.270.550.570.80

先读趋势:训练损失持续下降,验证损失在第 10 轮附近较低,随后回升,F1 与 AUC 也没有继续受益。这支持“继续拟合训练样本未改善验证表现”的判断,但尚不足以确定唯一原因。先检查训练与验证是否使用相同损失定义、验证模式是否正确,以及某轮指标是否只来自部分样本。

用曲线形态组织诊断顺序
用曲线形态组织诊断顺序

接着做 2 个独立对照。实验 A 沿用原训练配置,按照事先确定的早停规则选取检查点;实验 B 从相同初始状态开始,增加适量权重衰减。不能把 B 接在原来第 20 轮的参数上继续训练,再当成公平对照。保留每个实验的完整曲线,观察验证损失的最低值、波动范围以及主要分类指标,而不是只摘出最漂亮的点。

然后查看错误样本。假设验证集有 200 名实际流失客户,模型找出 140 名,并把 60 名未流失客户误报为流失,则 precision 为 140÷200=0.70,recall 为 140÷200=0.70,F1 为 0.70。这个例子中两个分母恰好相同,实际一般不同。混淆矩阵能帮助识别漏报和误报的构成,不能只看汇总分数。

按合同类型、在网时长分组检查错误,可能发现新客户召回偏低。此时应检查训练数据是否覆盖足够的新客户,以及对应特征在预测时是否可用。不要立即添加更复杂模型。对于图像,可查看错分图片是否模糊或被裁断;对于短文本,可查看否定表达和少数类别。诊断要把数字重新连接到样本,才能形成下一项可检验的假设。

5 算力利用率与收敛取舍

训练耗时可以粗略拆成数据准备、模型计算、验证和保存。设备利用率低时,可能是读取文件或解码拖慢了输入,也可能是模型太小、每批计算不足;利用率高也不意味着实验有效,模型仍可能在错误数据上高速训练。先测量完整流程,再决定优化哪里。只测单次模型计算,会遗漏真实任务中等待数据的时间。

对于大量小图片,适量预取和缓存可能减少等待;对于短文本,批次内长度差异过大,会让大量计算花在补齐位置上。可以比较按长度组织批次的方案,但应保留适当随机性并记录规则。加载并行度也不是越高越好,过多进程可能争用内存和存储。每次调整后要同时看样本吞吐、总耗时与验证质量。

在固定预算下定位耗时来源
在固定预算下定位耗时来源

吞吐量表示单位时间处理多少样本,收敛则关注训练是否逐步到达有用的参数区域。批大小从 64 增至 256 后,每秒样本数可能增加,但同轮数的更新次数会减少,原学习率也未必仍然合适。因此“每轮更快”和“达到目标验证指标更快”是不同结论。后者需要观察达到目标所花的总时间,并确认目标是在同套验证规则下定义的。

比较训练配置时,可以先固定轮数看曲线,再在明确预算下比较最终结果,但应把这两种实验分开记录。若总时间预算为 30 分钟,数据加载优化可能让模型完成更多更新;若固定更新次数,收益主要表现为更快结束。不能把额外更新带来的分数变化全部归因于管线本身,也不能用不同预算声称某个优化器必然更好。

还要为验证留出时间。数据量很大时,频繁全量验证可能占据明显成本,但验证太稀疏又会错过较好的检查点。可在开发初期用固定的小规模训练子集排查流程,再回到正式划分完成实验;子集结果不能充当最终成绩。低精度计算、梯度累积等方法有各自的数值与状态要求,本课只要求知道它们不能凭名称保证提速或等价,深入机制留到后续。

6 常见坑:只追训练损失忽视验证

最常见的坑是训练日志只有损失,没有独立验证。模型可能记住训练集中的重复文本,训练损失接近 0,却无法识别新的表达。即使已经划分验证集,也应检查跨集合重复和近似重复。客户记录按行随机划分、同来源图片的相似副本分散到不同集合,都可能让验证任务比真实使用容易得多。

泄漏还可能藏在处理顺序里。先对全部数据做特征选择,再划分集合,会让验证标签参与特征决策;先把少数类复制多份再随机划分,可能把相同样本分到训练与验证。正确顺序是先建立划分,再只在训练部分拟合处理规则或进行重采样。验证与测试应保留能代表目标使用条件的分布,不能为了分数好看而随意平衡。

类别不平衡会让准确率产生误导。假设 1000 条记录只有 100 条流失,始终预测“不流失”也能得到 90% 准确率,但流失 recall 为 0。这里 precision 与 F1 的零分母处理要遵循评估工具的明确约定。使用类别权重或训练重采样可能帮助关注少数类,但应重新检查 precision、recall 与阈值,不能只看损失是否下降。

只调整阈值也不能代替训练诊断。降低正类阈值通常会找出更多正类,同时带来更多误报;这改变决策取舍,并未自动提高排序能力。若 AUC 长期接近随机水平,应该检查特征、标签和任务定义。若 AUC 尚可但固定阈值的 recall 很低,可以在验证集上比较阈值,并在锁定后报告测试结果。

另个陷阱是频繁窥看测试集。每次看完测试成绩再改学习率,测试集就逐渐变成了开发反馈。此时所谓最终分数可能偏乐观。团队应记录每次配置选择使用了什么证据,并保留独立测试边界。多次验证试验同样存在挑选偶然高分的风险,所以应控制无目的的尝试,重要结论可用预定的多个种子检查稳定性。

最后,验证集稳定也不代表分布永远稳定。过去客户的合同组合与未来不同,图像采集背景变化,文本中出现新话题,都可能使性能下降。应检查分组表现和时间变化,并在上线后获得标签时持续复评。训练技巧能帮助模型利用已有证据,无法凭空补足没有覆盖的人群和场景。

7 案例:学习率过大导致发散

继续使用表格流失分类练习。团队建立了完成缺失值处理与数值缩放的简单神经网络,批大小固定为 64。学习率设为 0.1 后,训练损失没有稳定下降,反而由约 0.71 上升至 1.36、2.10,验证损失也同步恶化。这些数字仅用于说明现象。此时首先应暂停无效训练,保存日志和配置,不必等到所有轮次结束。

“两条损失都升高”只是线索,不能立即定案。检查输入是否包含非有限数值、累计费用是否被错误解析、标签范围是否正确,以及输出与损失函数是否匹配。例如某些损失要求输入未经概率转换的分数,重复转换可能改变数值行为。先用少量样本确认前向计算和损失值合理,再开展学习率对照。

训练发散时的排查与对照路径
训练发散时的排查与对照路径

在输入与实现检查通过后,恢复相同初始权重与优化器初始状态,保持数据划分、批大小和样本顺序一致,仅把学习率从 0.1 降至 0.01。若训练损失逐步降至 0.67、0.63、0.60,验证损失也趋于下降,就支持“原学习率在当前条件下过大”的假设。不能从这次成功进一步推断 0.01 对其他模型或其他缩放方式也最好。

如果降低学习率后仍然异常,就需要回到证据链,检查输入极值、损失配置和数值计算。若只在极少数批次跳高,可以检查这些批次的样本及类别组成;单个批次的较大损失也可能只是遇到了难样本。只有持续趋势、多个相关信号和可重复对照共同支持时,才应把问题归为发散,不能见到曲线的每次起伏就修改配置。

完整记录应包含失败运行,而不是只留下成功结果。写清原配置、观察窗口、排查结果、唯一改动与对照表现;若更换随机种子后结论不稳定,也要保留。案例的收益不仅是让训练继续进行,更是把“碰巧调好了”转成可供下次使用的判断方法。接下来仍需完成验证、选择检查点并检查错误样本,才知道稳定下降是否带来了有用模型。

8 把训练假设写进实验方案

实验方案应从可被否定的陈述开始。“希望提高效果”太宽泛;“在固定数据划分下,降低学习率将减少早期损失震荡,并改善同更新预算内的验证损失”则可以检查。假设应指明观察对象、预期变化与比较条件。若结果只减少震荡却没有改善验证指标,可以保留其中得到支持的部分,不能把整项假设都算成功。

给每次运行保存最少但足够的身份信息:数据版本、划分索引、特征列表、预处理规则、模型配置、学习率、批大小、随机种子与代码版本。还应记录设备、训练精度、更新次数和耗时,以便解释效率差异。随机种子帮助重现抽样与初始化,但某些设备运算仍可能存在差异,不宜承诺设置种子就得到逐位相同的结果。

把观察转化为可审查的训练实验
把观察转化为可审查的训练实验

预先指定主要指标、辅助指标与停止规则。例如以验证 AUC 选择检查点,再在该检查点的验证预测上按召回约束选择阈值,同时报告 F1。若主要目标更适合直接使用 F1,也可以这样选择,但必须提前固定阈值规则。不同选择方式回答不同问题,比较实验时应保持一致,避免在结果出来后重新定义成功。

对照表还应写出不变条件与改动项。学习率对照保持模型、批大小与更新预算相同;批大小对照需要说明固定预算,并记录更新次数的变化。每次运行都从约定状态启动。若采用继续训练,必须明确恢复了哪个检查点和优化器状态,不能把继续训练结果与从头训练结果当成相同起点。

结论可以分成观察和解释来写:“验证损失在第 10 轮后回升”是观察,“模型可能开始过拟合”是解释,“采用预定早停规则并对照权重衰减”是下一步。把这几类内容写清楚,能避免团队把猜测当事实。保存混淆矩阵、分组指标与少量代表性错误样本,通常比增加大量没有解释的日志更有帮助。

当差异很小时,不要急于宣布胜负。小验证集上的少数样本就可能改变 F1,随机初始化也会影响结果。可以对重要候选使用预先约定的 3 个种子,报告均值和波动范围,并保留每次运行结果。若改动带来的改善小于波动,应诚实写成证据不足,同时比较训练成本,而不是只展示最高分的种子。

9 从训练技巧走向正则化与泛化(A22)

训练技巧解决的是如何组织更新、观察信号并在预算内完成可信实验。泛化进一步追问:模型为什么能把训练经验用于未见样本,哪些限制有助于这种迁移。训练损失下降主要说明模型在优化所见数据;独立验证提供有关未见数据的证据,但这个证据始终受样本规模、划分方式和分布代表性限制。

在客户流失任务中,应追问合同类型与标签的关系是否会随时间改变;在 Fashion-MNIST 中,应追问固定尺寸灰度图上的成绩能否代表手机拍摄的衣物;在公开短文本分类中,应追问训练与评估是否共享重复句子或特定来源。跨场景应用通常需要新的代表性数据评估,不能仅凭当前验证分数外推。

还可以用训练子集的学习曲线判断下一步该补数据还是先改训练。例如固定验证集,分别使用训练集的 25%、50% 和 100%,各自重新拟合预处理并从头训练,保持模型和检查点选择规则一致。若训练损失很低,验证损失却随样本增加而下降,说明增加同分布数据可能有帮助;若两者都高,应先检查优化是否充分、特征是否有效,不能直接加强正则。各规模都要留足收敛预算并记录更新次数,否则小子集因为每轮更新更少而欠训练,会误导判断。训练损失还应在固定评估模式下重算,排除随机增强带来的口径差异。这组实验提供方向性证据,不保证继续增加数据仍有相同收益。

进入 A22 前,应保留可信基线、可解释的曲线,以及清晰的实验边界。接下来比较模型复杂度、正则强度和数据规模时,仍使用本课的方法:提出假设,固定条件,观察训练与验证的共同变化,检查样本,再决定是否保留改动。这样,正则化就成为有证据支持的设计选择,而不是训练不顺时随手添加的选项。

放进方案里

本项目以客户流失分类为练习任务,明确正类为流失,输入限于预测时可获得的在网月数、月费用、合同类型等字段。使用公开静态数据时,注明其时间信息限制,不把离线成绩视为未来部署承诺。数据按 70%、15%、15% 划分训练、验证与测试;存在重复客户时按客户分组,面向未来的任务优先采用时间划分。缺失填补、缩放和编码只在训练集拟合。

先建立简单基线,记录数据版本、划分、随机种子、模型、学习率、批大小与代码版本。每轮汇总训练损失,在固定评估模式下记录验证损失、precision、recall、F1 和 AUC,并保存检查点。提前指定主要选择指标、阈值规则和早停条件;如按验证损失早停,可约定连续 5 次无有效改善后停止并恢复最佳检查点。

每次实验只改变待检验因素。对学习率过大的怀疑,先检查输入、标签与损失配置,再从相同初始状态比较 0.1 和 0.01,保持批大小及更新预算相同。对过拟合的怀疑,结合验证曲线、分组指标和错误样本,分别比较早停或适量正则。效率报告同时给出总耗时、样本吞吐与更新次数,不用设备利用率代替效果结论。

类别不平衡时保留真实验证分布,结合混淆矩阵解释漏报和误报;重采样仅作用于训练集。方案锁定后再运行测试评估,报告选择后的阈值、主要指标和限制。重要候选可用预先约定的 3 个种子检查稳定性,记录失败运行及波动。后续获得新时期标签时复评,发现分布变化则更新数据假设,并衔接 A22 的正则化与泛化实验。

验收时重新加载选定检查点及配套预处理,核对固定验证样本的预测与保存结果在约定数值容差内一致。若召回约束为 0.80,须附所选阈值、混淆矩阵和漏报样本数;没有阈值满足约束时,记录未通过,不临时降低要求。

10 小结:下一步正则化与泛化(A22)

训练技巧的核心是让数据、参数更新、验证证据与计算预算相互对应。管线决定模型看到什么,批大小影响每次更新的样本数,学习率影响步幅,正则与早停帮助控制拟合过程;最终仍要由合适的独立评估判断是否有用。

自测时可以回答:为什么批大小变大后,相同轮数不代表相同更新次数?为什么验证损失回升时不能只盯着训练损失?为什么重采样应在划分之后进行?为什么降低学习率的对照要恢复相同初始状态?若能用具体实验回答这些问题,就已具备继续学习 A22「正则化与泛化」的基础。

同阶段相关课

AI 答疑

默认关闭。启用后,只发送本课标题、最近阅读的屏幕内正文摘录(最多 6000 字)与本次问题。

配置自己的服务