normalization

Covariate shift:
在learning algorithm学习的过程中, input values的改变的现象.
这种问题也存在与train和test数据不一样源的问题.
因为当input distribution改变的时候, machine learning algorithm的表现会改变,这就是这个问题影响性能缘由.网络

Basic reason: 当变量中间高阶相关的时候, 合适的学习率变化很大.(the appropriate learning rate changes wildly when there are high-order interactions between variables)app

从convex optimization解释:
loss function: f(w), 进行二阶泰勒展开, g表示梯度, H表示Hessian矩阵关于(f(w))的dom

利用梯度降低, 朝着梯度的方向走, 学习率是, 更新weight以后的loss function为ide

若是上述的公式当中, 没有后面的二阶项的时候, 获得的loss function是严格降低的. 可是, 若是后面的二阶项的值很大的时候, 最后获得的loss function可能会增大, 也就是说在二阶影响超过一阶影响的时候, 会起到反的效果.函数

当loss曲面很陡的时候, 若是说学习率很大, 那么,可能会让loss增长.可是若是loss曲面光滑, 就能够利用相对而言比较大的学习率
“ill-conditioning” Hessian Matrix:
当梯度是H的最大特征值的特征向量的时候, H=P^(inverP). 这个时候Hg = lambda*g, 由于Hessian矩阵须要是非奇异的对称阵.在这里, 若是学习率足够大的化,loss就多是朝着正向方向发展的.性能

因此按照上面的状况分析, 只有小的学习率尺度才能保证loss稳步降低.学习

这里只是引入了二阶分析, 当更高阶的影响引入的时候, 梯度的更新会带来更加没法预期的变化.优化

从这个角度理解Batch Normalization:
BN让每一层的输入和他们自己的值无关, 这就抑制了高阶项的影响.
原博文做者在这里的解释:
多是因为NN当中的激活函数, 以及激活函数的量级(magnitudes)(magnitudes of activations decided by the mean and variance).由于这个range of magnitudes, 让梯度的更新的表现比较好.(我也觉着这里很懵逼, 这个解释让我很方).ui

BN最大的优势是让mean和variance不是让多层的交互决定的, 而是由gamma和beta这两个参数决定的. 这也是BN最大的特性以及提高性能的主要缘由.code

BN的局限性: 对mini-batch的依赖性.
这个依赖性会致使两个主要问题:(这里的mean和variance在不一样的mini-batch之间会变化)

a. mini-batch的size越小, 会增大方差的估计, 在BN当中用SGD的时候, 须要当心的选择batch_size

b. 这致使了, 这个在RNN当中很难将这个应用到recurrent connections当中.
在RNN当中, 每一个时间步有不一样的统计值. 也就是说, 必须在不一样的时间步分开计算BN. 并且根据BPTT的更新, 咱们必须在每一个时间步都记录这些统计量.

这里, mini-batch的值不能过小, 致使了在online learning(每次处理一个样本)以及对噪声极度敏感的reinfocement learning不大使用, 也让它在RNN当中不使用.

WEIGHT NORMALIZATION:(openai)
对每一层的权重进行normalization:

weight normalizaton: separates the norm of the weight vector from its direction, 这里是对weight的各个不一样的方向分别进行归一化.
这里利用梯度降低对g和v同时进行优化.

优势:
weight normalization比BN的速度快.
在CNN当中, CNN的权重数量远小于输入数量, 因此weight normalization的计算损耗比较小.

在论文当中(本身没有看论文):
做者在WN以后加了mean-only BN(虽然比单纯的WN损耗大, 可是不用除以std, 因此计算损耗要小一点)

做者说他这样作的优势有:

  1. 让activations的mean和v无关:
    单独的(independently) WN不可以让每一层层从weights中计算获得的activations的均值互相隔离, 会致使不一样层间的high-level的相关性, Mean-only batch normalization能够解决这个问题.

  2. 在activations加入”gentle noise”:
    BN的一个很差的地方是, 因为在mini-batch计算利用了noisy estimates, 因此在activations引入了随机噪声.
    这个在一些应用当中有regularization effect, 可是在某一些noise-sensitive domain会有潜在的坏处, 相似于reinforcement learning.这个噪声因为均值估计产生.因为大数定理,activations祭祀与normally distributed, 因此能够说是gentler noise.

(感受仍是对weight normalization略懵逼,)

Layer Normalization:(Geoffery Hinton)
BN是在batch dimension的维度上面normalize the input features;
LN 是在features’ dimensions上面normalize输入.
Xij 是输入的第i,j-th元素, 第一个维度表示batch, 第二个维度表示features.
BN:

LN:

区别:
layer normalization的统计计算在不一样的样本之间不相关. 因此LN不是简单的从新参数化网络(reparameterization of the network).
LN通常用于RNN.

参考文献:  
图见这里吧, 之后补.天知道为啥我加了weight normalization个人网络为何那么渣
http://mlexplained.com/2018/01/10/an-intuitive-explanation-of-why-batch-normalization-really-works-normalization-in-deep-learning-part-1/
http://mlexplained.com/2018/01/13/weight-normalization-and-layer-normalization-explained-normalization-in-deep-learning-part-2/
相关文章
相关标签/搜索