模型训练常见曲线变化分析
在进行模型训练时,学会从模型损失和正确率曲线中获取当前模型的状态信息是一个非常重要的技能,本文将对在模型训练中可能遇到的各种训练曲线进行总结。
学习率与损失曲线
学习率对模型的训练非常重要:
学习率高的情况
- 当学习率非常大时(对应黄色曲线),损失曲线会迅速下降,而后上升。
- 学习率较高时(对应绿色曲线),损失曲线会迅速下降,然后趋于平缓,到达局部最小值。
学习率低的情况
- 学习率低时(对应蓝色曲线),损失曲线下降缓慢。
上图为实际训练过程中的损失曲线,通过该曲线可以获得以下信息:
- 总体曲线呈现线性下降,说明学习率较低,需要增大学习率。
- 总体曲线在刚开始下降后,短时间内趋于平缓,说明学习率过高,掉入局部最小值点。
- 损失曲线的上下宽度过大,说明batch_size过小,应该增大batch_size。
训练后期,验证集损失和正确率同时上升
当模型训练到后期时,经常会遇到模型在验证集上的损失曲线和正确率曲线同时上升的情况。
如上图所示,模型在训练集上的正确率在不断上升,同时,在测试集上的正确率也在不断上升,但同时,如下图的损失曲线所示,训练集上的损失曲线在持续下降,验证集的损失却在不断上升。
造成这一问题的可能原因有以下几点:
模型过拟合
训练后期,模型在训练集上的损失持续下降,但在验证集上的损失却在上升,这是典型的过拟合现象。但验证集损失在上升的同时,模型在验证集上的正确率却在上升,这是为什么?
在度量两个分布之间的差异时,我们常使用交叉熵损失。对于二分类问题,假设样本所属的正确类别对应的one-hot编码为[0, 1]时,考虑以下两种情况:
- 模型给出的预测为[0.1, 0.9],此时该样本的交叉熵损失为$-(0ln(0.1)+1ln(0.9))=0.105$,模型能够以较大的概率给出正确的预测结果,损失较小。
- 经过反向传播,梯度下降对参数进行调整后,模型给出的预测为[0.4, 0.6],此时该样本的交叉熵损失为$-(0ln(0.4)+1ln(0.6))=0.511$,整体损失变大,但模型仍旧给出了正确的预测结果。
在上述两种情况中,模型的准确率是相同的,但第二种情况的损失明显增大。
对于多个验证样本,也很有可能出现上述情况。模型对于验证集中各个样本所给出的属于其正确类别的概率降低,导致整体分类损失增大,但给出的概率未超过预测阈值,样本仍然被正确划分,验证集的正确率表现为不变或缓慢上升。
验证集曲线震荡
在模型训练中,经常会遇到模型在验证集上的损失曲线非常震荡的情况,可能有以下几点原因:
- batch_size过小,batch_size过小会导致每一个batch的数据之间的差距较大,损失变化较大。
- 学习率过大,学习率过大导致模型参数不稳定,性能震荡。
- 样本分布不均匀。
- 正则化参数设置不当,正则化参数设置不当导致模型能力不足,泛化能力较弱。