写这一篇的缘由是之前只知道一个Batch Normalization,自觉得懂了。结果最近看文章,又发现一个Layer Normalization,一下就懵逼了。搞不懂这二者的区别。后来是不查不知道,一查吓一跳,Normalization的方法五花八门,Batch Normalization, Layer Normalization, Weight Normalization, Cosine Normalization, Instance Normalization, Group Normlization, Switchable Normlization.... 估计我没看到的还有不少。并且郁闷的是,感受越看越不懂了...网络
这里简单记录一下目前的理解与问题。函数
白化的目的是但愿特征符合独立同分布i.i.d条件。包括:spa
这里我有了第一个问题。什么叫作去除特征之间的相关性?
好比,有两个输入向量,X1=(x11,x12,x13,x14), X2=(x21,x22,x23,x24)
去除特征之间的相关性,只是去除x11,x12,x13,x14之间的相关性,仍是去除x11和x21的相关性?.net
\[h=f(g\frac{x-\mu}{\sigma}+b)\]3d
\(\mu\):均值
\(\sigma\):方差根
\(b\): 再平移参数,新数据以\(b\)为均值
\(g\): 再缩放参数,新数据以\(g^2\)为方差
归一化后的目标就是统一不一样\(x\)之间的均值和方差orm
加入\(g\)和\(b\)的目的是使数据必定程度偏离激活函数的线性区,提升模型表达能力。由于均值是0的话正好落在sigmoid函数的线性部分。blog
第二个问题,g和b是根据什么肯定的,是trainable的吗?get
Batch Normalization是针对不一样batch致使的数据偏移作归一化的方式。好比,一个batch有3个输入,每一个输入是一个长度为4的向量。
\(X1=(x11,x12,x13,x14)\)
\(X2=(x21,x22,x23,x24)\)
\(X3=(x31,x32,x33,x34)\)it
在上述条件下,归一化时的均值是:
\(\mu=(\frac{x11+x21+x31}{3},\frac{x12+x22+x32}{3},\frac{x13+x23+x33}{3},\frac{x14+x24+x34}{3})\)io
这里主要展现一下计算时的方向,即对于每一个元素位置,对不一样的输入作归一化。方差同理。
第三个问题,不少文章都说batch norm须要在batch size较大,不一样batch之间均值方差相差不大的状况下效果好。
即batch的均值方差跟总体的均值方差一致时效果好。
这我就不懂了,不管以前每一个batch的分布是怎样的,通过归一化,都已是相同分布了。为何必定要原始batch之间分布类似呢?
Batch norm有个缺点,即须要记录每个batch输入的均值和方差,对于变长的RNN网络来讲计算麻烦。
第四个问题:为何要记录每一个batch的均值和方差?对RNN效果很差仅仅由于麻烦吗?
我我的理解BN在RNN上效果很差的缘由是,虽然RNN训练时网络深度很深,但实际上只有一个神经元节点,至关于把全部层的神经元的均值和方差设定为相同的值了,致使效果不佳。
若是是图像,则输入是一个四维矩阵,(batch_size, channel_size, weight, height),此时batch norm是针对同一个batch的不一样输入中属于同一通道的元素作归一化。以下图,是一个batch_size=2, channel_size=6, weight=5, height=3的例子。一次batch norm是对全部橙色部分元素作归一化。
Layer Normalization是针对同一个输入的不一样维度特征的归一化方式。仍是用上面的例子。
对于\(X1\)来讲,layer norm的归一化均值是: \(\mu=\frac{x11+x12+x13+x14}{4}\)
对于图像来讲,则是对一个输入的全部元素作归一化。以下图橙色部分:
对一个输入图像的一个通道中的全部元素作归一化。以下图橙色部分:
对于一个输入图像的多个通道元素作归一化。以下图橙色部分:
前面的归一化方法都是从不一样维度对输入数据作归一化,而weight norm则是对权重作归一化。
抛弃了权重和输入点积的计算方式,改用其余函数。