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)

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

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

如果上述的公式当中, 没有后面的二阶项的时候, 得到的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, 让梯度的更新的表现比较好.(我也觉着这里很懵逼, 这个解释让我很方).

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

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/
posted @ 2018-12-18 09:47  lily19  阅读(461)  评论(0编辑  收藏  举报