背景
最近在看一篇讲解DnCNN的文章,发现自己有好多基础概念都不明白,于是特地去学习了一下
梯度下降算法
梯度下降算法(Gradient Descent简称GD)就是找到最拟合函数的调参方式,考虑到内存限制和迭代速度,一般用随机梯度下降算法(Stochastic Gradient Descent简称SGD),为了在非凸问题中更好的找到损失函数最小值,引入了动量,为了在训练过程中保持好的学习率又发明了自适应学习AdaGrad和RMSPorp算法,结合动量和自适应算法,得到了目前应用最广的Adam算法
反向传播算法
反向传播算法(Back-Propagation简称BP),可以快速计算神经网络中的梯度值,再利用梯度下降算法快速训练整个神经网络
激活函数
激活函数必须是非线性函数,如sigmoid、tanh、ReLU
其中前两都是饱和函数,ReLU是非饱和函数,但是sigmoid函数的缺点是不易收敛、会出现梯度消失,tanh也会出现梯度消失,而ReLU算法就没有以上问题,我学习的U-Net实现图像分割和DnCNN的代码中都是用的ReLU算法。不过ReLu函数也有缺点,会出现神经元坏死现象,于是科学家又提出了Leaky ReLU、Parametric ReLU
参数初始化
参数初始化可以减缓梯度爆炸和梯度消失的问题,tanh一般用Xavier初始化方法,ReLU和其变种,用Kainming初始化方法
批量归一化
批量归一化(Barch Normalization检测BN)可以加速神经网络收敛,使训练过程中对学习率的参数初始化更加鲁棒,BP算法缺点是在Batch中包含数据量较多才有效,对循环网络(RNN)或序列数据(Sequence)性能较差,分布式运算时影响效率,针对这些问题,又提出了Layer Normalization、Instance Normalization算法,不过由于我使用的是U-Net且地震数据不属于序列化数据,因此,我可以使用BP进行数据归一化