神经网络调参:loss震荡过于明显/loss剧烈抖动

前言

在训练网络的时候,常常会出现loss出现非常明显的剧烈抖动情况,虽然大多数情况可以继续训练下去,但是实际上还是预示着问题存在。而且,有不同维度的问题,这也需要不同的解决方法,但是具体究竟是哪一种,还得具体情况具体分析。

无过拟合

  1. 是否找到合适的loss函数:在深度学习里面,不同的loss针对的任务是有不同的,有些loss函数比较通用例如L1/L2等,而如perceptual loss则比较适合在图像恢复/生成领域的任务上。当loss出现问题的适合,想一想,是不是loss设置的有问题,别人在此领域的任务的方法是否也使用和你一样的loss。
  2. batch size是否合适:batch size的问题一般是较大会有比较好的效果,一是更快收敛,二是可以躲过一些局部最优点。但是也不是一味地增加batch size就好,太大的batch size 容易陷入sharp minima,泛化性不好。较小的batch size可能会使得网络有明显的震荡。
  3. 是否使用合适的激活函数:一般来说,都几乎使用RELU作为全局激活函数,尽可能少的使用sigmoid激活函数(激活范围太小),容易造成梯度弥散、消失
  4. 学习率:学习率太大,一步前进的路程太长,会出现来回震荡的情况,但是学习率太小,收敛速度会比较慢。
  5. 是否选择合适的优化算法:一般来说,我都使用Adam作为优化器(默认参数)。如果经过仔细调整的SGD算法性能可能更好,但是时间上不太允许这样做。

过拟合

  1. **通过提前终止确定最优模型:**在训练的过程中,可能会出现训练到最后的精度竟然还不如前面的epoch高,那么可以直接终止训练,然后将之前的model作为best model,之后使用这个model即可
    神经网络调参:loss震荡过于明显/loss剧烈抖动_第1张图片
  2. Regularization(正则化):通过正则化进行约束,一般的方法可以通过优化器的权重衰减方法,即训练到后期,通过衰减因子使权重的梯度下降越来越缓慢。或者BN、Dropout以及L1/L2
  3. 调整网络结构:一句话,你的网络结构出了问题,是错误的,没有科学性的
  4. 增加训练数据量:数据集太小太少,且没有进行数据增强,就可能导致过拟合
    参考来自:
    https://www.cnblogs.com/Mrzhang3389/p/10164241.html

你可能感兴趣的:(python,PyTorch,知识分享,深度学习,人工智能,pytorch,tensorflow,机器学习)