模型训练技巧和可能出现的问题
1、导致训练不收敛的原因有哪些?
一、数据和标签
数据分类标注是否准确?数据是否干净?数据库太小一般不会带来不收敛的问题,只要你一直在train总会收敛(跑飞了不算)。反而不收敛一般是由于样本的信息量太大导致网络不足以fit住整个样本空间。样本少只可能带来过拟合的问题。
二、学习率设定不合理
在自己训练新网络时,可以从0.1开始尝试,如果loss不下降的意思,那就降低,除以10,用0.01尝试,一般来说0.01会收敛,不行的话就用0.001. 学习率设置过大,很容易震荡。不过刚刚开始不建议把学习率设置过小,尤其是在训练的开始阶段。
在开始阶段我们不能把学习率设置的太低否则loss不会收敛。我的做法是逐渐尝试,从0.1,0.08,0.06,0.05 …逐渐减小直到正常为止,有的时候学习率太低走不出低估,把冲量提高也是一种方法,适当提高mini-batch值,使其波动不大。
三、网络设定不合理
如果做很复杂的分类任务,却只用了很浅的网络,可能会导致训练难以收敛,换网络换网络换网络,重要的事情说三遍,或者也可以尝试加深当前网络。
2、数据集不好怎么办?
数据集是训练一个好的网络的前提条件,如果数据集的质量得不到保证的话,很难得到一个很好的网络参数,所以需要重新在数据集上进行下功夫。
3、深度学习中网络训练时loss不降的可能原因和解决方法?
其实这个问题和第一个问题是一样的,详细解释请看第一个问题答案。下面给出一些训练时常出现的问题。
train loss 不断下降,test loss不断下降,说明网络仍在学习;
train loss 不断下降,test loss趋于不变,说明网络过拟合;
train loss 趋于不变,test loss不断下降,说明数据集100%有问题;
train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;
train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。
4、Batch size对模型训练有什么影响?其大小是怎么选取的?
一般来说,在合理的范围之内,越大的 batch size 使下降方向越准确,震荡越小;batch size 如果过大,则可能会出现局部最优的情况(这也是其中的一个缺点吧)。小的 bath size 引入的随机性更大,难以达到收敛,极少数情况下可能会效果变好。
会影响训练的稳定性,Batch size过小会使Loss曲线振荡的比较大,大小一般按照2的次幂规律选择,这是为了硬件计算效率考虑的。
5、在深度学习中,通常会finetuning已有的成熟模型,再基于新数据,修改最后几层神经网络权值,为什么?
迁移学习任务就是从相似性出发,将旧领域学习过的模型应用在新领域上。
为什么需要迁移学习:
\1) 大数据与少标注的矛盾
虽然有大量的数据,但往往都是没有标注的,无法训练机器学习模型。人工进行数据标定太耗时。
\2) 大数据与弱计算的矛盾
普通人无法拥有庞大的数据量与计算资源。因此需要借助于模型的迁移。
\3) 普适化模型与个性化需求的矛盾
即使是在同一个任务上,一个模型也往往难以满足每个人的个性化需求,比如特定的隐私设置。这就需要在不同人之间做模型的适配。
\4) 特定应用(如冷启动)的需求
迁移学习可以初步初始化网络,因为对一些比较类似的任务,其实模型参数的值基本上相同,而且这些参数经过大量的训练,已经有很好的特征提取能力,将backbone参数使用这类模型进行权重的初始化,后面做training的时候,模型收敛速度会更快。
**负迁移问题:**负迁移(Negative Transfer)指的是,在源域上学习到的知识,对于目标域上的学习产生负面作用。
产生负迁移的原因主要有:
1、数据问题:源域和目标域压根不相似,谈何迁移?
2、方法问题:源域和目标域是相似的,但是,迁移学习方法不够好,没找到可迁移的成分。
负迁移给迁移学习的研究和应用带来了负面影响。在实际应用中,找到合理的相似性,并且选择或开发合理的迁移学习方法,能够避免负迁移现象。
6、样本不均衡你会怎么处理(重采样/Focal loss)
样本不均衡的方法无非有两种,一种是增强训练数据,另外一种是采用focal loss。
通过某种方法使得不同类别的样本对于模型学习中的Loss(或梯度)贡献是比较均衡的。具体可以从数据样本、模型算法、目标函数、评估指标等方面进行优化,其中数据增强、代价敏感学习及采样+集成学习是比较常用的,效果也是比较明显的。其实,不均衡问题解决也是结合实际再做方法选择、组合及调整,在验证中调优的过程。
https://zhuanlan.zhihu.com/p/494220661
7、为什么深层神经网络难以训练?
在深度神经⽹络中的梯度是不稳定的,在前⾯的层中或会消失,或会激增。这种不稳定性才是深度神经⽹络中基于梯度学习的根本问题。
1、梯度消失
梯度消失是指通过隐藏层从后向前看,梯度会变的越来越小,说明前面层的学习会显著慢于后面层的学习,所以学习会卡住,除非梯度变大。梯度消失的原因受到多种因素影响,例如学习率的大小,网络参数的初始化,激活函数的边缘效应等。在深层神经网络中,每一个神经元计算得到的梯度都会传递给前一层,较浅层的神经元接收到的梯度受到之前所有层
梯度的影响。如果计算得到的梯度值非常小,随着层数增多,求出的梯度更新信息将会以指数形式衰减,就会发生梯度消失。
2、梯度爆炸
在深度网络或循环神经网络(Recurrent Neural Network, RNN)等网络结构中,梯度可在网络更新的过程中不断累积,变成非常大的梯度,导致网络权重值的大幅更新,使得网络不稳定;在极端情况下,权重值甚至会溢出,变为NaN值,再也无法更新。
3、权重矩阵的退化导致模型的有效自由度减少
参数空间中学习的退化速度减慢,导致减少了模型的有效维数,网络的可用自由度对学习中梯度范数的贡献不均衡,随着相乘矩阵的数量(即网络深度)的增加,矩阵的乘积变得越来越退化。在有硬饱和边界的非线性网络中(例如 ReLU 网络),随着深度增加,退化过程会变得越来越快。
解决方案:
https://zhuanlan.zhihu.com/p/72589432
8.深度前馈网络与Xavier初始化原理
https://zhuanlan.zhihu.com/p/27919794