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