神经网络调参:loss 问题汇总(震荡/剧烈抖动,loss不收敛/不下降)

本文总结了神经网络训练中遇到的loss问题,包括模型不收敛和loss不下降的原因及解决方案。学习率过大可能导致loss飞涨,小数据库通常不会引起不收敛,而小模型更适合数据量少的情况。loss不下降可能源于loss函数不收敛,例如loss值恒定。解决方法包括检查数据和标签、合理设置学习率、选择合适网络结构、激活函数、优化算法、损失函数,以及数据归一化、正则化和处理样本不均衡等。

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

个人学习使用,参考:神经网络调参:loss 问题汇总(震荡/剧烈抖动,loss不收敛/不下降)_loss不下降_ytusdc的博客-CSDN博客

目录

1、模型不收敛主要原因

1.1、learning rate设大了会带来跑飞(loss突然一直很大)的问题

1.2、数据库太小一般不会带来不收敛的问题

1.3、尽量用小模型。

2、模型loss 不下降

2、Loss 函数不收敛

2.1、loss等于87.33不变

2.2、loss保持0.69左右

3、解决方法总结

3.1、数据和标签

3.2、学习率设定不合理

 3.3、网络设定不合理

3.4、数据集label的设置

3.5、数据归一化

3.6、正则化过度

3.7、选择合适的损失函数

3.8、训练时间不足


1、模型不收敛主要原因

loss不收敛主要有以下两种情况,一种是loss一直在震荡,一种是loss下降一点后不再下降到理想水平,而验证集上的表现保持不变。

首先排查方法:

1.保持需要的batchsize不变;
2.查看是否有梯度回传,查看代码如下:

for name, parms in model.named_parameters():
	print('-->name:', name, '-->grad_requirs:', parms.requires_grad, '--weight', torch.mean(parms.data), ' -->grad_value:', torch.mean(parms.grad))

主要有以下几个原因: 

1.1、learning rate设大了会带来跑飞(loss突然一直很大)的问题

 这个是新手最常见的情况——为啥网络跑着跑着看着要收敛了结果突然飞了呢?可能性最大的原因是你用了relu作为激活函数的同时使用了softmax或者带有exp的函数做分类层的loss函数。当某一次训练传到最后一层的时候,某一节点激活过度(比如100),那么exp(100)=Inf,发生溢出,bp后所有的weight会变成NAN,然后从此之后weight就会一直保持NAN,于是loss就飞起来辣。我的depth estimation相关项目的loss曲线,如下:

 可以看出跑飞了,(幸lr设的并不是非常大所以又拉了回来)。如果lr设的过大会出现跑飞再也回不来的情况。这时候你停一下随便挑一个层的weights看一看,很有可能都是NAN了。对于这种情况建议用二分法尝试。0.1~0.0001.不同模型不同任务最优的lr都不一样。

1.2、数据库太小一般不会带来不收敛的问题

 只要你一直在train总会收敛(rp问题跑飞了不算)。反而不收敛一般是由于样本的信息量太大导致网络不足以fit住整个样本空间。样本少只可能带来过拟合的问题,你看下你的training set上的loss收敛了吗?如果只是validate set上不收敛那就说明overfitting了,这时候就要考虑各种anti-overfit的trick了,比如dropout,SGD,增大minibatch的数量,减少fc层的节点数量,momentum,finetune等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值