深度学习中的Normalization

1. 为什么需要 Normalization

1.1 独立同分布与白化

独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力,所以经常认为数据应该满足独立同分布,independent and identically distributed,简称为 i.i.d 独立同分布并非所有机器学习模型的必然要求(比如 Naive Bayes 模型就建立在特征彼此独立的基础之上,而Logistic Regression 和 神经网络 则在非独立的特征数据上依然可以训练出很好的模型)。

所以在把数据喂给机器学习模型之前,“白化(whitening)”是一个重要的数据预处理步骤。白化一般包含两个目的:

(1)去除特征之间的相关性 —> 独立;

(2)使得所有特征具有相同的均值和方差 —> 同分布。

白化最典型的方法就是PCA

1.2 深度学习中的 Internal Covariate Shift

深度神经网络模型的训练为什么会很困难?其中一个重要的原因是,深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略,Google 将这一现象总结为 Internal Covariate Shift,简称 ICS.

1.3 ICS 会导致什么问题?

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

其一,上层参数需要不断适应新的输入数据分布,降低学习速度。

其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。

其三,每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。

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

以 BN 为代表的 Normalization 方法进行了简化的白化操作。基本思想是:在将 \bold{x} 送给神经元之前,先对其做平移和伸缩变换, 将 \bold{x} 的分布规范化成在固定区间范围的标准分布。(由于 ICS 问题的存在, \bold{x} 的分布可能相差很大。要解决独立同分布的问题,“理论正确”的方法就是对每一层的数据都进行白化操作。然而标准的白化操作代价高昂,特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度。

通用变换框架就如下所示:

h=f\left(\bold{g}\cdot\frac{\bold{x}-\bold{\mu}}{\bold{\sigma}}+\bold{b}\right)\\

我们来看看这个公式中的各个参数。

(1) \bold{\mu}平移参数(shift parameter), \bold{\sigma}缩放参数(scale parameter)。通过这两个参数进行 shift 和 scale 变换: \bold{\hat{x}}=\frac{\bold{x}-\bold{\mu}}{\bold{\sigma}}\\ 得到的数据符合均值为 0、方差为 1 的标准分布。

(2) \bold{b}再平移参数(re-shift parame

ter), \bold{g}再缩放参数(re-scale parameter)。将 上一步得到的 \bold{\hat{x}} 进一步变换为: \bold{y}=\bold{g}\cdot \bold{\hat{x}} + \bold{b}\\

最终得到的数据符合均值为 \bold{b} 、方差为 \bold{g}^2 的分布。

tip:

1.第一步都已经得到了标准分布,第二步为了保证模型的表达能力不因为规范化而下降。(第一步的规范化会将几乎所有数据映射到激活函数的非饱和区(线性区),仅利用到了线性变化能力,从而降低了神经网络的表达能力。而进行再变换,则可以将数据从线性区变换到非线性区,恢复模型的表达能力。)

经过这么的变回来再变过去,会不会跟没变一样?

不会。因为,再变换引入的两个新参数 g 和 b,可以表示旧参数作为输入的同一族函数,但是新参数有不同的学习动态。在旧参数中, \bold{x} 的均值取决于下层神经网络的复杂关联;但在新参数中, \bold{y}=\bold{g}\cdot \bold{\hat{x}} + \bold{b} 仅由 \bold{b} 来确定,去除了与下层计算的密切耦合。新参数很容易通过梯度下降来学习,简化了神经网络的训练。

3.分类(Normalization 几类主流算法)

对输入数据 \bold{x} 的变换:横着来是 LN(Layer Normalization ),纵着来是 BN(Batch Normalization)。

对模型参数 \bold{w} 的变换: WN(Weight Normalization )

对点积的变换:CN(Cosine Normalization)

4.Normalization 为什么会有效

4.1 Normalization 的权重伸缩不变性

权重伸缩不变性(weight scale invariance)指的是,当权重 \bold{W} 按照常量 \lambda 进行伸缩时,得到的规范化后的值保持不变,即:Norm(\bold{W'}\bold{x})=Norm(\bold{W}\bold{x})\\

其中 \bold{W'}=\lambda\bold{W}

上述规范化方法均有这一性质,这是因为,当权重 \bold{W} 伸缩时,对应的均值和标准差均等比例伸缩,分子分母相抵。

权重伸缩不变性可以有效地提高反向传播的效率

权重伸缩不变性还具有参数正则化的效果,可以使用更高的学习率

数据伸缩不变性(data scale invariance)指的是,当数据 \bold{x} 按照常量 \lambda 进行伸缩时,得到的规范化后的值保持不变,即:Norm(\bold{W}\bold{x'})=Norm(\bold{W}\bold{x})\\

其中 \bold{x'}=\lambda\bold{x}

数据伸缩不变性仅对 BN、LN 和 CN 成立。因为这三者对输入数据进行规范化,因此当数据进行常量伸缩时,其均值和方差都会相应变化,分子分母互相抵消。而 WN 不具有这一性质。

数据伸缩不变性可以有效地减少梯度弥散,简化对学习率的选择

注:

我仅仅根据自己情况做了大部分摘录,若有不明,请参见原文章:

https://zhuanlan.zhihu.com/p/33173246

猜你喜欢

转载自blog.csdn.net/ya0017230/article/details/88954042