对比深度学习中的Normalization,BN/LN/WN

0. 说明

这几天看的一直涉及到normalization, 是不是每次layer后均加一个BN呢?

注: BN, LN的目的均是为了层与层之间的输入数据分布来看, 稳定不变. 不要和某一层输出的向量能量Norm弄混, 是没关系的

借助: https://zhuanlan.zhihu.com/p/33173246  来快速了解下

谢谢作者~(表示感谢, 把人家的原文中的注, 放过来~)

1. 目的

既不用normalization存在的问题

1.1 独立同分布与白化

NN输入希望是iid, 所以数据预处理有两步, Juliuszh称之为白化(whitening)

我习惯拆分两类去理解

数据与数据之间的iid:

  • 去除特征之间的相关性 —> 独立;猜测: 维度之间去相关性
  • 使得所有特征具有相同的均值和方差 —> 同分布; 猜测: 假设数据不同人/语言下condition的x和影响到的数值服从norm, 所以简单的同均值和方差既同分布了, 去除了人(condition)的影响

上面这个好理解, 就是尽量保持训练时每个batch的分布一致, 预测时的分布也相同

一个数据内每个值间的iid:

  • 去除特征之间的相关性 —> 独立;
  • 使得所有特征具有相同的均值和方差 —> 同分布; 

上面这个不太好理解, 就是保持每一维的数字均是norm(0, 1), 并且相互独立开, 不相关, 对应到神经元参数w时, 比较平等

比如使用 PCAWhitening, 不过没见过神经网络输入使用PCA先预处理输入数据的

http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/

作者也说了:

最好的理论正确的方法就是对每一层的数据都进行白化操作。然而标准的白化操作代价高昂,特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度;

所以就有了Normalization

1.2 深度学习中的 Internal Covariate Shift

每一层有一个重要的现象就是 Internal Covariate Shift(内部协变量移位, ICS), 是不好的:

  • 深度神经网络模型的训练为什么会很困难, 深度神经网络涉及到很多层的叠加
  • 接近输入的叫底层, 接近输出的叫高层
  • 而每一层的参数更新会导致它的高层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈
  • 这就使得高层需要不断去重新适应底层的参数更新
  • 为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略

简而言之,每个神经元的输入数据不再是“独立同分布”。

  • 其一,上层参数需要不断适应新的输入数据分布,降低学习速度; 每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎
  • 其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。TODO不懂, 去问下

2. Normalization 的通用框架与基本思想

这部分有空再看

十分注意g和b! 再平移和再缩放, 在不同方案是不同的

2.1. 基本思想

2.2. Batch Normalization

其规范化针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元的均值和方差,因而称为 Batch Normalization

所以:

每一个 mini-batch 彼此之间,以及和整体数据,都应该是近似同分布的。分布差距较小的 mini-batch 可以看做是为规范化操作和模型训练引入了噪声,可以增加模型的鲁棒性;但如果每个 mini-batch的原始分布差别很大,那么不同 mini-batch 的数据将会进行不一样的数据变换,这就增加了模型训练的难度

要求:

  • 每个 mini-batch 比较大
  • 数据分布比较接近
  • 在进行训练之前,要做好充分的 shuffle

在运行过程中统计每个 mini-batch 的一阶统计量和二阶统计量, 同时也会保存两个值, 供is_training=False用

十分注意g和b! 再平移和再缩放, BN的每一个神经元都有一个g和b, 用来再变为梯度回传训出来的范围. 所以整个向量的不同维度上的数scale不一样; 但是batch中, sample之间, 同一个神经元的对应的维度对应的数一个scale

注意具体思考batch中有不同分布的情况

2.3. Layer Normalization

不明白为甚么Layer Normalization可以用于RNN, 而Batch Normalization不行

十分注意g和b! 再平移和再缩放, LN的这一层所有神经元共用一个g和b, 用来再变为梯度回传训出来的范围. 所以整个向量的不同维度上的数scale一样

注意具体思考batch中有不同分布的情况

感觉LN不好.. 具体遇到再说吧

2.3. Other Normalizations

猜你喜欢

转载自blog.csdn.net/u013625492/article/details/112527816
今日推荐