网络优化与正则化总结

大量参考自《神经网络与深度学习》

优化算法

对于标准的SGD,常见的改进算法从两个方面进行:学习率衰减&梯度方向优化。
记$g_t$为t时刻的导数:

学习率衰减

AdaGrad算法

通过计算历次的梯度平方累计值进行学习率衰减。
$G_t$是累计值:

更新值则为:

缺点:随着迭代次数的增加学习率递减。在经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点。

RMSprop算法

对AdaGrad的改进,唯一的区别在于$G_t$的计算,将历史信息和当前信息进行线性加权,使得学习率可以动态改变而不是单调递减:

β为衰减率,通常取0.9。也即历史信息占主导。

AdaDelta算法

同样是对AdaGrad的改进。
每次计算:

也即历史更新差和上一时刻的更新差的加权(RMSprop是历史梯度和当前梯度)。

最终更新差值为:

其中$G_t$计算方法和RMSprop一致。

梯度方向优化

利用历史的梯度(方向)调整当前时刻的梯度。

动量(Momentum)法

动量法(Momentum Method)是用之前积累动量来替代真正的梯度。每次迭代的梯度可以看作是加速度。

也即上一时刻的更新差值和当前梯度共同决定当前的更新差值。$ρ$为动量因子,通常为0.9。也即动量占了主导。

当某个参数在最近一段时间内的梯度方向不一致时,其真实的参数更新幅度变小;相反,当在最近一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速作用。一般而言,在迭代初期,梯度方法都比较一致,动量法会起到加速作用,可以更快地到达最优点。在迭代后期,梯度方法会取决不一致,在收敛值附近震荡,动量法会起到减速作用,增加稳定性。

Nesterov加速梯度

动量法的改进版本。

前面提到的动量法,是上一步的更新方向$\Delta \theta_{t-1}$与当前梯度$-g_t$的加和。因此可以理解成,先根据$∆θ_{t−1}$更新一次得到参数θ,再用$g_t$进行更新。亦即:

上式的第二步中,$g_t$是在$ \theta_{t-1}$上的梯度。我们将该步改为在$\theta_{t}$的梯度。
因此,有:

和动量法相比,相当于提前走了一步。

Adam&Nadam

Adam一方面计算梯度平方的加权,同时还计算梯度的加权:

通常$β_1=0.9$,$β_2=0.99$
也即历史信息占了主导。

在初期$M_t$与$G_t$会比真实均值和方差要小(想象$M_0=0$,$G_0=0$时)。因此对其进行修正,即:

因此最终有:

同理有Nadam。

Adam = Momentum + RMSprop
Nadam = Nesterov + RMSprop

梯度截断 gradient clipping

分为按值截断与按模截断。

参数初始化

初始值选取很关键。假设全部初始化为0,则后续更新导致所有的激活值相同,也即对称权重现象。

原则:不能过大,否则激活值会变得饱和,如sigmoid;不能过小,否则经过多层信号会逐渐消失,并且导致sigmoid丢失非线性的能力(在0附近基本近似线性)。如果一个神经元的输入连接很多,它的每个输入连接上的权重就应该小一些,这是为了避免输出过大。

Gaussian分布初始化

同时考虑输入输出,可以按 $N(0,\sqrt{\frac{2}{n_{in} + n_{out}}})$ 高斯分布来初始化。

均匀分布初始化

在$[-r,r]$区间均匀分布初始化,其中r可以按照神经元数量自适应调整。

Xavier初始化方法

自动计算超参r。r的公式为:

其中$n^l$代表第$l$层的神经元个数。

为什么是这个式子(推导见参考资料):综合考虑了①输入输出的方差要一致;②反向传播中误差信号的方差不被放大或缩小。

归一化

将数据分布归一化,使得分布保持稳定。

假设数据有四维(N,C,H,W)。N代表batch;C代表channel;H,W代表height和width。

Batch Normalization

沿着通道进行归一化,亦即每个通道都有自己的均值和方差。

其中缩放平移变量是可学习的。

缺点:
①对batch size敏感,batch size太小则方差均值不足以代表数据分布
②对于不等长的输入如RNN来说,每一个timestep都需要保存不同的特征。

Layer Normalization

对一个输入进行正则化,亦即每个输入都有自己的方差、均值。这样不依赖于batch大小和输入sequence的深度。

对RNN效果比较明显,但CNN中不如BN

Instance Normalization

对HW进行归一化

Group Normalization

将channel分为多个group,每个group内做归一化

Reference

《神经网络与深度学习》
https://blog.csdn.net/liuxiao214/article/details/81037416