Optimizer and BN

2019-03-18  本文已影响0人  MadCoder

Deep Learning

Optimizers

optimizers 通用参数

SGD

现在通用的SGD通常指代mini-batch SGD,其迭代次数为每个batch的个数n。对于每次迭代,SGD对每个batch求样本的梯度均值然后进行梯度更新。

                    $$w_{t+1} = w_t - a \cdot \frac {1} {n} \sum \nabla f(w_t)$$

SGD-Momentum

AdaGrad

自适应学习率

实质上,learning rate 由 a 变成了 \frac{a} {\sqrt{V_t}} 随着迭代时候二阶动量越大,学习率越小

RMSProp

只关注过去一段时间的梯度变化而非全部变化,这里区别于AdaGrad。避免二阶动量持续累积,导致训练提前结束。

Adam

adaptive + Momentum

结合了一阶动量和二阶动量

实际使用过程,参数默认:\beta_1 = 0.9;\beta_2 = 0.999​

Comparison

Batch Normalization

优势:

  1. 减少了人为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数;
  2. 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
  3. 可以不再使用局部响应归一化。BN 本身就是归一化网络(局部响应归一化在 AlexNet 网络中存在)
  4. 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高 1% 的精度)。
  5. 减少梯度消失,加快收敛速度,提高训练精度。

算法流程:

下面给出 BN 算法在训练时的过程

输入:上一层输出结果 X=x1,x2,...,xm,学习参数 γ,β

  1. 计算上一层输出数据的均值,其中,m 是此次训练样本 batch 的大小。

\mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i)

  1. 计算上一层输出数据的标准差

\sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2

  1. 归一化处理,得到

\hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon}​

其中 ϵ 是为了避免分母为 0 而加进去的接近于 0 的很小值

  1. 重构,对经过上面归一化处理得到的数据进行重构,得到

y_i = \gamma \hat x_i + \beta​

其中,γ,β 为可学习参数。

注:上述是 BN 训练时的过程,但是当在投入使用时,往往只是输入一个样本,没有所谓的均值 μβ 和标准差 σ2β。此时,均值 μβ 是计算所有 batch μβ 值的平均值得到,标准差 σ2β 采用每个batch σ2β 的无偏估计得到。

上一篇 下一篇

猜你喜欢

热点阅读