【深度学习】基础问题
一、梯度消失和梯度爆炸
1.基本原理
在深度神经网络中,通常采用BP方法更新权重,一般采用链式求导法则求得梯度来更新,导数项包括多个因式相乘,其中有激活函数的导数和初始值等。这时如果梯度过大连乘起来就会越来越大以至于超出范围无法收敛这叫做梯度爆炸,反之如果梯度过小连乘起来就会越来越小甚至为0导致权重无法更新,此时称为梯度消失。
梯度消失和爆炸:不合适的损失函数/不合适的激活函数/网络过深。
梯度爆炸:网络权值初始值太大。
2.解决方案
梯度消失和爆炸:预训练+微调;采用ELU(ReLU的变种)等激活函数;batchnorm(对每一层的输出规范为均值和方差一致来保证网络的稳定性,并加速收敛);
梯度爆炸:梯度剪切;权重正则化;
梯度消失:残差结构(短路机制可以无损地传播梯度,不会导致梯度消失)
3.参考资料
https://blog.csdn.net/qq_25737169/article/details/78847691
二、BN层
1.基本原理
直接做归一化学不到特征,加入可训练的参数做归一化
训练深度网络的时候经常发生训练困难的问题,因为每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难。
2.用处
加速神经网络训练,加速收敛速度及稳定性;是归一化的一种手段,能够减少绝对差异,突出相对差异;
不用BN时,需小心设计学习率和权重初值,有了BN可以采用大的学习率,加快训练;
本身是一种正则的方式,可以替代其他正则方法如droupout等;
3.流程
首先计算均值和方差,然后归一化,最后缩放和平移。
4.参考资料
https://blog.csdn.net/qq_25737169/article/details/79048516
三、预训练
1.目的
规则化,防止过拟合;压缩数据,去除冗余;强化特征,减小误差;加快收敛速度。而采用ReLu则不需要进行pre-training。
四、Dropout
1.原理
深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
用了dropout相当于每次在原模型中找到一个更瘦的网络,最后的网络可以看做模型的集合,训练的参数却是一样多的;相当于增加了样本集。
2.优缺点
优点:防止过拟合
缺点:训练时间稍长
3.注意点
训练的时候是用部分神经元,测试的时候没有dropout,而是全部都用,将输出结果进行缩小,即乘以训练时的1-p。
为了使用方便,我们不在测试时再缩小输出,而在训练时直接将输出放大1/(1-p)倍。
4.参考资料
https://blog.csdn.net/stdcoutzyx/article/details/49022443%20
https://blog.csdn.net/u012702874/article/details/45030991%20
https://www.cnblogs.com/welhzh/p/6648613.html
五、样本不均衡问题
1.控制比例
2.focal loss
六、难分样本
1.控制比例时,选择训练Loss高的样本
2.难分样本继续加入训练
3.OHEM
七、Loss=Nan
1.不当的Loss函数
2.梯度爆炸
3.输入数据问题
4.步长大于核大小
八、过拟合欠拟合
1.基本原理
对数据集希望对训练集有好的拟合且对测试集有好的泛化能力,欠拟合指的是模型在训练集表现差,即学习不到数据的规律。过拟合指的是在训练集学习很好但测试集很差。
2.原因及解决
过拟合
网络太复杂/数据太少/数据单一/噪声太多
控制模型复杂度/数据增强(旋转/缩放/裁切/加入噪声/镜像/颜色变换)/正则化(L1和L2,控制w不会太大)/Droupout/提前终止训练
欠拟合
网络太浅/噪声太多
增加网络深度/清洗数据
3.参考资料
https://zhuanlan.zhihu.com/p/72038532?ivk_sa=1024320u