深度学习模型训练快收敛时loss值突然暴增现象

文章探讨了深度学习模型在快速收敛时loss值突然增大的现象,发现这可能与Adam优化器的自适应学习率调整有关。作者观察到使用SGD、RMSprop或Adagrad等优化器时,loss值波动不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习模型训练快收敛时loss值突然暴增现象

自己深度学习模型训练快收敛时loss值突然暴增,我就记录下来了各个参数数值和梯度,并绘制了曲线图,供大家参考

自己用的是图卷积神经网络,3层,总共12个参量,也是特地参量设少点方便观察所有参量的参数

'conv1.w1.weight' 'conv1.w2.weight' 'conv1.w1.bias' 'conv1.w2.bias'
'conv2.w1.weight' 'conv2.w2.weight' 'conv2.w1.bias' 'conv2.w2.bias'
'conv3.w1.weight' 'conv3.w2.weight' 'conv3.w1.bias' 'conv3.w2.bias'

figure中多个子图每一行就是一个卷积层,分别是conv1,conv2,conv3,每一列分别是w1,w2,b1.b2

是和上面参数名称排列对应的

参数获取方式:

model_parameters = model.state_dict()

这样获取参数,然后plot

参数梯度获取方式:

for name, param in model.named_parameters():
    if param.grad is not None:
        print(f"{name}: {param.grad}")
       else:
        print(f"{name}: No gradient")

一、参数变化曲线:

1.正常状态:

epoch:0-150

2.loss值突然变大时:

epoch:3400-3600

epoch:4150-4350

二、参数梯度变化曲线:

1.正常状态:

epoch:0-250

epoch:600-800

epoch:1000-1200

2.loss值突然变大时:

epoch:9450-9650

总结

微观上到底是怎么引起的loss值突然变大还不好说,可以看出相比于参数数值本身,梯度和loss值突然变大是有直接关系的,但是梯度又为什么会突然摆动呢?.........

目前发现这个好想和优化器选择是有关系的,我上面训练用的是Adam优化器,它的特点是会自适应调整每个参数的学习率,如果用其他优化器比如SGD/RMSprop/Adagrad不会出现上面loss值突然增大的现象,出现的是收敛时一直摆动像波浪一样的现象

# optimizer = torch.optim.SGD(model.parameters(), lr=lr, momentum=0.9)
# optimizer = torch.optim.RMSprop(model.parameters(), lr=lr)
# optimizer = torch.optim.Adagrad(model.parameters(), lr=lr)

个人分析Adam优化器会自适应调整每个参数的学习率,快收敛时一定有某个参数最先到达一种状态,就是传递到它这的loss值很小了趋近0了,这个时候在Adam优化器作用下这个参数的学习率突然变大,打乱了该参数乃至整个模型的训练,loss值和梯度急剧振荡

这个其实也可以理解成optimizer的自我调整,有的时候loss值暴增后降下来会在暴增前最低值基础上继续降低,当然有的时候loss值暴增后再也不会出现暴增前的最低loss值了

还有待进一步挖掘观察...

训练模型loss的变化是正常。Loss是衡量模型训练期间预测结果与实际结果之间差异的指标。在训练过程中,优化法试图通过调整模型的参数来小这个差异,从而使loss最小化。 有候,loss会在训练过中出现波动,包括突然变大又变小的情况。这可能是由于以下原因之一: 1. 初始阶段:在训练开始模型的参数是随机初始化的,它们可能不够准确。因此,初始阶段的loss可能会有较大的波动。随着训练的进行,模型逐渐学习到更好的表示,并且loss趋向于稳定。 2. 学习率调整:学习率是控制模型参数更新步长的参数。如果学习率设置得过大,可能会导致模型在参数空间中跳跃过大区域,从而产生较大的loss波动。通过适当调整学习率大小和衰减策略,可以减小loss的波动。 3. 数据噪声或不平衡:如果训练数据存在噪声或不平衡性,模型可能会在特定样本或数据分布上表现不稳定,导致loss的波动。 4. 模型复杂性:复杂的模型可能更容易陷入局部最优解,导致loss的波动。在这种情况下,可以尝试使用正则化技术或模型简化方法来减少模型的复杂性。 如果loss的波动持续较大或无法收敛,可以考虑调整训练参数、增加训练数据量、改进数据预处理等方法来优化模型训练过程。同,监控其他指标如准确率、验证集上的表现等也是评估模型训练效果的重要参考。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值