从目标函数到优化过程
说明训练为何可写成优化问题,以及梯度、学习率、局部结构和数值稳定性如何影响结果。
从目标函数到优化过程
模型训练常被写成“最小化损失”,但目标函数只是把学习要求转成可计算问题。优化过程还受到参数化方式、数据批次、学习率、停止条件和数值精度影响。损失下降说明算法更好地满足了训练目标,不等于系统已经解决真实任务。
目标函数规定训练在追求什么
监督学习通常比较模型输出与标签,用损失函数量化差异。回归任务可能关心平方误差,分类任务常使用对数损失。选择不同损失,会对大误差、类别不平衡和概率校准产生不同影响。
目标函数还可能包含正则项,用来限制参数规模或结构。正则化不是给模型增加一个抽象的“简单偏好”,而是在数据有限时改变可接受解的范围。它是否有效,需要通过独立验证判断。
梯度给出局部变化方向
梯度由目标函数对各参数的偏导数组成,描述参数发生微小变化时目标怎样改变。梯度下降沿负梯度方向更新参数,希望逐步减小目标值。这个方向是局部信息,不保证一步就接近全局最优。
学习率决定更新步长。过大可能越过较好区域或导致发散,过小则训练缓慢,也可能在平坦区域几乎不动。参数尺度、损失曲面和批次噪声都会改变合适步长,因此不存在适用于所有任务的固定学习率。
随机优化用噪声换取计算效率
完整数据集上的梯度计算成本较高,随机梯度及小批量方法用部分样本估计更新方向。估计会有波动,却可以更频繁地更新并利用硬件并行。批次大小同时影响梯度噪声、内存占用和吞吐,不能只按“越大越稳定”选择。
样本抽取方式也属于优化条件。时间序列被随机打乱可能造成信息泄漏,类别极不平衡时普通抽样可能让少数类很少进入批次。优化器看到的数据顺序会影响训练轨迹。
非凸问题不只有一个答案
深层网络的目标通常是非凸的,包含鞍点、平坦方向和多个参数解。不同初始化和训练顺序可能得到不同参数,却产生相近性能。工程上更关心解在独立数据上的表现、稳定性和资源成本,而不是声称找到了唯一最优参数。
自适应优化、动量和学习率计划改变更新方式,但不能修复错误标签、数据泄漏或不合适目标。scikit-learn 文档中的优化参数属于具体估计器实现,使用时要结合版本,不应当作普遍理论结论。
停止训练需要外部证据
训练损失持续下降时,验证表现可能已经停止改善。早停使用独立验证信号控制训练长度,检查点则保留可恢复状态。停止条件应与最终任务指标一致,并避免反复依据测试集调参。
优化日志至少应记录数据版本、随机种子、目标函数、优化器、学习率、批次和停止原因。只有这些条件可追溯,训练结果才能被复现和比较。
资料依据
- Ian Goodfellow、Yoshua Bengio、Aaron Courville:《Deep Learning》在线版,https://www.deeplearningbook.org/
- scikit-learn Project:User Guide,https://scikit-learn.org/stable/user_guide.html