训练如何发生:损失、梯度与反向传播
- 区分预测误差、损失与梯度
- 说明学习率和参数更新的关系
输出错了之后需要什么
云朵工坊给每张训练卡片附上正确类别。网络看到一张圆形卡片,却给圆形较低分数,我们需要一个可以计算的数字表达这次表现有多差,这就是损失。不同任务采用不同损失:连续数值预测可考虑平方误差,分类常使用交叉熵。损失是训练优化的代理目标,不等于全部业务价值。即使平均损失下降,少数遮挡卡片仍可能变差,所以最终还要检查分类结果与不同情形的表现。
用一个小数值认识梯度
暂时把网络缩成只有一个权重的玩具模型。输入为二,预测值是权重乘二,目标为四,损失取预测误差的平方。当权重为一时,预测为二,损失为四。此处损失对权重的梯度为负八,表示在当前位置稍微增加权重,损失倾向下降。若学习率取零点一,更新规则是旧权重减去学习率乘梯度,新权重得到一点八。再预测得到三点六,平方误差为零点一六。这个微型例子展示方向,不代表真实网络每次更新都这样顺利。
反向传播不等于全部训练
前向传播先得到输出与损失;反向传播利用链式法则,把最终损失对各层参数的变化敏感度逐层计算出来。它负责高效求梯度,不负责独自选择数据,也不等于参数更新本身。优化器根据这些梯度执行更新,最简单的做法是梯度下降。完整训练还包括抽取小批次、前向计算、求损失、反向求梯度、更新参数和记录指标。不要把反向传播解释为把错误答案反着输入网络,它传播的是数学上的梯度信息。
学习率和批次影响什么
学习率控制每步更新幅度,过大可能跨过较好的区域甚至使损失发散,过小可能进展缓慢。小批次用部分样本估计整体方向,计算更可管理,但梯度会带有抽样波动。一次轮次表示训练数据按约定被遍历一遍,不保证每个样本恰好以同样方式出现,具体取决于采样规则。学习率、批次大小和轮次数是训练设置,不是网络从标签里自动确定的全部参数;比较实验时应把这些设置记录清楚。
怎样观察而不盲信曲线
工坊记录训练损失和验证集表现。如果训练损失下降而验证表现恶化,应怀疑过拟合,而不是单纯继续训练。如果两者都很差,还要排查标签、输入尺度与模型容量。随机初始化和小批次顺序会让结果有波动,单次漂亮曲线不足以证明方案稳定。梯度下降在复杂目标上不保证找到全局最好解,也不保证模型学到人们希望的特征。训练的意义是可核对地改进目标,同时保留对任务边界的警惕。
本节要点
- 损失表达训练目标,不能替代实际评估
- 反向传播求梯度,优化器据此更新参数
- 学习率决定更新幅度,训练曲线需要与验证表现一起看
动手练习:完成一轮手算训练与日志判断
- 用输入二、目标四、权重一和梯度负八,分别计算学习率零点一及零点五的新权重
- 计算两个更新后的预测值与平方损失,预期得到较温和更新和过度跨越的对比
- 写出训练损失持续下降、验证错误增加时应做的两项检查
自查清单
- 两组新权重与损失计算正确
- 准确区分求梯度和更新参数
- 检查建议包含数据问题与过拟合而非只增加轮次
先自己做,再查看参考答案
学习率为零点一时,新权重是一减去零点一乘负八,得到一点八,预测三点六,平方损失零点一六。学习率为零点五时,新权重变成五,预测十,平方损失三十六;虽然梯度方向正确,步幅太大仍可能越过较好位置。出现训练变好而验证变差的日志,应先检查同源卡片是否泄漏、训练与验证标签是否一致,再考虑减少训练轮次、适当正则化或增加更有代表性的数据。不能只凭一次验证波动就断言原因,更不能借助测试集反复选学习率;应保留设置、随机种子与验证记录,以便复查。