神经网络模型训练集和测试集loss不下降原因汇总

1 训练的时候 loss 不下降

  1. 模型结构问题。当模型结构不好、规模小时,模型对数据的拟合能力不足。
  2. 训练时间问题。不同的模型有不同的计算量,当需要的计算量很大时,耗时也会很大
  3. 权重初始化问题。常用的初始化方案有全零初始化、正态分布初始化和均匀分布初始化等,合适的初始化方案很重要,之前提到过神经网络初始化为0可能会带来的影响
  4. 正则化问题。L1、L2以及Dropout是为了防止过拟合的,当训练集loss下不来时,就要考虑一下是不是正则化过度,导致模型欠拟合了。正则化相关可参考正则化之L1 & L2
  5. 激活函数问题。全连接层多用ReLu,神经网络的输出层会使用sigmoid 或者 softmax。激活函数可参考常用的几个激活函数。在使用Relu激活函数时,当每一个神经元的输入为负时,会使得该神经元输出恒为0,导致失活,由于此时梯度为0,无法恢复。
  6. 优化器问题。优化器一般选取Adam,但是当Adam难以训练时,需要使用如SGD之类的其他优化器。常用优化器可参考机器学习中常用的优化器有哪些?
  7. 学习旅问题。学习率决定了网络的训练速度,但学习率不是越大越好,当网络趋近于收敛时应该选择较小的学习率来保证找到更好的最优点。所以,我们需要手动调整学习率,首先选择一个合适的初始学习率,当训练不动之后,稍微降低学习率。
  8. 梯度消失和爆炸。这时需要考虑激活函数是否合理,网络深度是否合理,可以通过调节sigmoid -> relu,假如残差网络等,相关可参考为什么神经网络会有梯度消失和梯度爆炸问题?如何解决?
  9. batch size问题。过小,会导致模型损失波动大,难以收敛,过大时,模型前期由于梯度的平均,导致收敛速度过慢。
  10. 数据集问题。(1)数据集未打乱,可能会导致网络在学习过程中产生一定的偏见(2)噪声过多、标注有大量错误时,会导致神经网络难以学到有用的信息,从而出现摇摆不定的情况,噪声、缺失值、异常值(3)数据类别不均衡使得少数类别由于信息量不足,难以学到本质特征,样本不均衡相关可以看样本不均衡及其解决办法。
  11. 特征问题。特征选择不合理,会使网络学习难度增加。之前有提到过特征选择的文章,如何找到有意义的组合特征,特征选择方法

2 测试的时候 loss 不下降

  1. 训练的时候过拟合导致效果不好
    • 交叉检验,通过交叉检验得到较优的模型参数;
    • 特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;
    • 正则化,常用的有 L1、L2 正则。而且 L1正则还可以自动进行特征选择;
    • 如果有正则项则可以考虑增大正则项参数 λ \lambda λ;
    • 增加训练数据可以有限的避免过拟合;
    • Bagging ,将多个弱学习器Bagging 一下效果会好很多,比如随机森林等.
    • 早停策略。本质上是交叉验证策略,选择合适的训练次数,避免训练的网络过度拟合训练数据。
    • DropOut策略。
  2. 应用场景不同导致。本来训练任务是分类猫和狗,测试用的皮卡丘和葫芦娃。
  3. 噪声问题。训练数据大概率都是经过去噪处理的,而真实测试时也应该去除噪声。

欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

神经网络模型训练集和测试集loss不下降原因汇总_第1张图片

你可能感兴趣的:(神经网络,深度学习,机器学习,损失函数,loss)