深度学习归一化 (normalization) 方法总结: BN, LN, WN, IN, GN, SN

1 均值

样本均值是由一个或多个随机变量中得到的统计量,样本均值是一个向量,其中的每个元素是在所有样本中对应的元素求的算术平均数,若只考虑一个随机变量,则样本均值为一个标量,假如有 n n n个样本,每个样本 X i ∈ R d X_i \in R^d XiRd,则样本的均值计算如下:
E ( X ) = ∑ i = 1 n X i n E(X) = \frac{\sum_{i=1}^nX_i}{n} E(X)=ni=1nXi
其中 E ( X ) ∈ R d E(X) \in R^d E(X)Rd,其中每个元素代表的是每个维度的特征在所有样本中的算术平均数。
样本均值反映的是样本集合的中心点,所表达的信息量有限,所以我们需要其它的计算指标去衡量样本的特性。

2 方差

在概率论和统计学中,一个随机变量的方差描述的是它的离散程度,也就是该变量离其期望值 (即均值) 的距离。每个样本与样本平均值之差的平方的平均数得到的就是样本的方差,通常用 s 2 , V a r ( X ) s^2, Var(X) s2,Var(X)表示,计算公式如下:
V a r ( X ) = E [ ( X − σ ) 2 ] Var(X) = E[(X-\sigma)^2] Var(X)=E[(Xσ)2]
其中 σ = E ( X ) \sigma=E(X) σ=E(X),对于 n n n个样本,其中均值为 σ \sigma σ,则方差具体计算公式如下:
s 2 = ∑ i = 1 n ( X i − σ ) 2 n s^2 = \frac{\sum_{i=1}^n(X_i -\sigma)^2}{n} s2=ni=1n(Xiσ)2

3 标准差

标准差是方差的算术平方根,方差和我们的原始数据衡量的单位不一致的,方差对差值做了一个平方,不好衡量与真实数据的客观差距,而标准差在方差上做了算术平方根,和原始数据保持了单位一致,更好的放映了数据与均值的偏离程度。一般用符号 σ \sigma σ, s s s表示,计算公式如下:
s = ∑ i = 1 n ( X i − σ ) 2 n s = \sqrt{\frac{\sum_{i=1}^n(X_i -\sigma)^2}{n}} s=ni=1n(Xiσ)2

4 协方差

协方差用于衡量两个随机变量的联合变化程度,若一个变量变大,另外一个变量也变大,说明两个变量是同方向变化的,这时协方差就是正,相反,若一个变量变大,另外一个变量变小,两个变量是反向变化的,则协方差就是负的。而协方差的数值大小表示的两个变量同向或者反向的程度。协方差计算公式如下:
C o v ( X , Y ) = E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] Cov(X,Y) = E[(X-E(X))(Y-E(Y))] Cov(X,Y)=E[(XE(X))(YE(Y))]
上述公式直观解释就是,每个时刻,X值与其均值之差乘以Y值与其均值之差得到一个乘积,然后对这些所有新的乘积值求均值,也就是期望,得到的就是协方差。若X=Y,则就是所谓的方差了,方差是自己和自己的一个协方差

5 协方差矩阵

假设 X X X是一个 n n n个随机变量组成的列向量,如下:
X = [ X 1 X 2 . . . X n ] X=\begin{bmatrix} X_1 \\ X_2 \\. \\. \\.\\ X_n \end{bmatrix} X=X1X2...Xn
并且 σ i \sigma_i σi X i X_i Xi的期望值,即 σ i = E ( X i ) \sigma_i=E(X_i) σi=E(Xi)协方差矩阵中的第 ( i , j ) (i,j) (i,j)元素是由 X X X中第 i i i个元素 X i X_i Xi与第 j j j个元素 X j X_j Xj两个变量之间的协方差计算得来的,每两个变量之间计算得到的协方差构成了协方差矩阵,定义形式如下:
∑ i j = c o v ( X i , X j ) = E [ ( X i − σ i ) ( X j − σ j ) ] \sum{ij} = cov(X_i, X_j) = E[(X_i - \sigma_i)(X_j - \sigma_j)] ij=cov(Xi,Xj)=E[(Xiσi)(Xjσj)]
协方差矩阵整体计算如下:
∑ = E [ ( X − E ( X ) ( X − E ( X ) ) T ] = \sum = E[(X-E(X)(X-E(X))^T]= =E[(XE(X)(XE(X))T]=
[ E [ ( X 1 − σ 1 ) ( X 1 − σ 1 ) ] E [ ( X 1 − σ 1 ) ( X 2 − σ 2 ) ] . . . E [ ( X 1 − σ 1 ) ( X n − σ n ) ] E [ ( X 2 − σ 2 ) ( X 1 − σ 1 ) ] E [ ( X 2 − σ 2 ) ( X 2 − σ 2 ) ] . . . E [ ( X 2 − σ 2 ) ( X n − σ n ) ] . . . . . . . . . . . . E [ ( X n − σ n ) ( X 1 − σ 1 ) ] E [ ( X n − σ n ) ( X 2 − σ 2 ) ] ] . . . E [ ( X n − σ n ) ( X n − σ n ) ] ] \begin{bmatrix} E[(X_1 - \sigma_1)(X_1 - \sigma_1)] & E[(X_1 - \sigma_1)(X_2 - \sigma_2)] & ... & E[(X_1 - \sigma_1)(X_n - \sigma_n)] \\ E[(X_2 - \sigma_2)(X_1 - \sigma_1)] & E[(X_2 - \sigma_2)(X_2 - \sigma_2)] & ... & E[(X_2 - \sigma_2)(X_n - \sigma_n)] \\. & . &. &.\\. & . & . & . \\. &. &.&.\\ E[(X_n - \sigma_n)(X_1 - \sigma_1)] & E[(X_n - \sigma_n)(X_2 - \sigma_2)]] & ... & E[(X_n - \sigma_n)(X_n - \sigma_n)] \end{bmatrix} E[(X1σ1)(X1σ1)]E[(X2σ2)(X1σ1)]...E[(Xnσn)(X1σ1)]E[(X1σ1)(X2σ2)]E[(X2σ2)(X2σ2)]...E[(Xnσn)(X2σ2)]]............E[(X1σ1)(Xnσn)]E[(X2σ2)(Xnσn)]...E[(Xnσn)(Xnσn)]

矩阵中的第 ( i , j ) (i,j) (i,j)个元素是 X i X_i Xi X j X_j Xj的协方差。

6 PCA (Principal Component Analysis)

主成分分析是一种统计分析,简化数据集的方法。它利用正交变换来对一系列可能相关的变量的观测值进行线性变换,从而投影为一系列不相关变量的值,这些不相关变量称为主成分,是一种使用广泛的数据降维算法。

6.1 特征向量 & 特征值定义

一个矩阵与向量的乘法 A x Ax Ax从几何意义来讲就是通过矩阵 A A A对向量 x x x做一个变换,包括旋转和伸缩的变换,得到一个在方向或者长度大多不同的新的向量。若对这个向量不产生方向的变换,只做伸缩的变换,则这个向量就称为这个矩阵的特征向量,伸缩的比例就是特征值,数学公式表达如下:
A x = λ x Ax = \lambda x Ax=λx
其中 x x x称为矩阵 A A A对应的特征值 λ \lambda λ的特征向量。

6.2 特征向量 & 特征值求解

接下来我们来看下怎么求解一个矩阵的特征值和特征向量。
A x = λ x → A x = λ E x → ( λ E − A ) x = 0 Ax = \lambda x \to Ax = \lambda Ex \to (\lambda E - A)x = 0 Ax=λxAx=λEx(λEA)x=0

∣ λ E − A ∣ = ∣ λ − a 11 − a 12 . . . − a 1 n − a 21 λ − a 22 . . . − a 2 n . . . . . . . . . . . . − a n 1 − a n 2 . . . λ − a n n ∣ = 0 \begin{vmatrix} \lambda E - A \end{vmatrix} = \begin{vmatrix} \lambda - a_{11} & -a_{12} & ... & -a_{1n} \\ -a_{21} & \lambda -a_{22} & ... & -a_{2n} \\ ... & ...& ... & ... \\ -a_{n1} & -a_{n2} & ... & \lambda - a_{nn} \end{vmatrix}=0 λEA=λa11a21...an1a12λa22...an2............a1na2n...λann=0
假设:
A = [ 4 2 − 5 6 4 − 9 5 3 − 7 ] A = \begin{bmatrix} 4 & 2 & -5 \\ 6 & 4 & -9 \\ 5 & 3 & -7 \end{bmatrix} A=465243597
则:
∣ λ E − A ∣ = ∣ λ − 4 − 2 5 − 6 λ − 4 9 − 5 − 3 λ + 7 ∣ = 0 \begin{vmatrix} \lambda E - A \end{vmatrix} = \begin{vmatrix} \lambda-4 & -2 & 5 \\ -6 & \lambda -4 & 9 \\ -5 & -3 & \lambda+7 \end{vmatrix} = 0 λEA=λ4652λ4359λ+7=0
根据行列式,求解化简得到:
λ 2 ∗ ( λ − 1 ) = 0 \lambda^2*(\lambda-1)=0 λ2(λ1)=0
计算得到特征值为:
λ 1 = 1 , λ 2 = λ 3 = 0 \lambda_1 = 1, \lambda_2=\lambda_3=0 λ1=1,λ2=λ3=0
λ 1 = 1 \lambda_1=1 λ1=1代入到方程中:
( λ E − A ) x = ( E − A ) x = 0 ( \lambda E - A )x = (E - A)x=0 (λEA)x=(EA)x=0
其中 E = [ 1 0 0 0 1 0 0 0 1 ] E=\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0& 1 \end{bmatrix} E=100010001
( E − A ) = [ − 3 − 2 5 − 6 − 3 9 − 5 − 3 8 ] = [ 1 0 − 1 0 1 − 1 0 0 0 ] (E -A) = \begin{bmatrix} -3 & -2 & 5 \\ -6 & -3 & 9 \\ -5 & -3& 8 \end{bmatrix} =\begin{bmatrix} 1 & 0 & -1 \\ 0 & 1 & -1 \\ 0 & 0& 0 \end{bmatrix} (EA)=365233598=100010110
则:
( E − A ) x = [ 1 0 − 1 0 1 − 1 0 0 0 ] [ x 1 x 2 x 3 ] = 0 (E -A)x = \begin{bmatrix} 1 & 0 & -1 \\ 0 & 1 & -1 \\ 0 & 0& 0 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}=0 (EA)x=100010110x1x2x3=0
→ { x 1 − x 3 = 0 x 2 − x 3 = 0 \to \begin{cases} x_1-x_3=0\\\\ x_2-x_3= 0 \end{cases} x1x3=0x2x3=0
x 1 = 1 x_1=1 x1=1则, x 2 = x 3 = 1 x_2=x_3=1 x2=x3=1,则特征值 λ 1 = 1 \lambda_1=1 λ1=1对应的特征向量为:
ε 1 = [ 1 1 1 ] \varepsilon_1 = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} ε1=111
同理,当 λ 2 = λ 3 = 0 \lambda_2=\lambda_3=0 λ2=λ3=0,得到对应的特征向量如下:
ε 2 = ε 3 = [ 1 3 2 ] \varepsilon_2=\varepsilon_3 = \begin{bmatrix} 1 \\ 3 \\ 2 \end{bmatrix} ε2=ε3=132

6.3 PCA原理和求解过程

主成分分析(PCA)是重要的降维方法之一,核心思想是找出数据最主要的方面来代替原始数据,假如数据有 n n n维,共有 m m m个数据 ( x 1 , x 2 , . . . , x m ) (x^1, x^2, ..., x^m) (x1,x2,...,xm),我们希望将这m个数据的维度从 n n n维降到 k k k维( n > k n >k n>k),尽可能保持原有数据的信息,减少损失。如下图所示:

在这里插入图片描述
有5个数据点(已经做过预处理,均值为0),假如我们将数据投影到某一维上,用一条原点的直线表示:
在这里插入图片描述
假设选择两条不同的直线做投影,如上所示,从直观来看,左边的投影会更好。理由主要有两点,第一点:样本点到这个直线的距离足够近(最小平方误差),第二点:投影后的样本点之间的方差最大(最大方差理论)
让我们用最大方差理论来进行求解PCA。假设 u u u是投影向量,则 x i x^i xi点投影后的值为: x ( i ) T u x^{(i)^T}u x(i)Tu这里由于样本点的每一维特征均值都为0,因此投影到 u u u上后的样本点均值也为0,则 m m m个样本的投影后的方差为: 1 m ∑ i = 1 m ( x ( i ) T u ) 2 \frac{1}{m}\sum_{i=1}^m(x^{(i)^T}u)^2 m1i=1m(x(i)Tu)2,公式转换如下:
1 m ∑ i = 1 m ( x ( i ) T u ) 2 = 1 m ∑ i = 1 m u T x ( i ) x ( i ) T u \frac{1}{m}\sum_{i=1}^m(x^{(i)^T}u)^2 = \frac{1}{m}\sum_{i=1}^mu^Tx^{(i)}x^{(i)^T}u m1i=1m(x(i)Tu)2=m1i=1muTx(i)x(i)Tu
         = u T ( 1 m ∑ i = 1 m x ( i ) x ( i ) T ) u \text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }=u^T(\frac{1}{m}\sum_{i=1}^mx^{(i)}x^{(i)^T})u         =uT(m1i=1mx(i)x(i)T)u
可以看出 1 m ∑ i = 1 m x ( i ) x ( i ) T \frac{1}{m}\sum_{i=1}^mx^{(i)}x^{(i)^T} m1i=1mx(i)x(i)T就是样本特征的协方差矩阵(这里 x ( i ) x^{(i)} x(i)已经均值为0了),我们用 λ \lambda λ表示 1 m ∑ i = 1 m ( x ( i ) T u ) 2 \frac{1}{m}\sum_{i=1}^m(x^{(i)^T}u)^2 m1i=1m(x(i)Tu)2, ∑ \sum 表示 1 m ∑ i = 1 m x ( i ) x ( i ) T \frac{1}{m}\sum_{i=1}^mx^{(i)}x^{(i)^T} m1i=1mx(i)x(i)T,则上面的公式重新表达为 (因为 u u u为单位向量,则 u T u = 1 u^Tu=1 uTu=1):
λ = u T ∑ u → u λ = λ u = u u T ∑ u = ∑ u \lambda = u^T\sum u \to u\lambda = \lambda u = uu^T\sum u = \sum u λ=uTuuλ=λu=uuTu=u
即:
∑ u = λ u \sum u = \lambda u u=λu
回到矩阵的特征值和特征向量定义中,我们可以知道 u u u是矩阵 ∑ \sum 的特征向量,而 λ \lambda λ是特征向量对应的特征值。所以,如果我们希望 λ \lambda λ尽可能的最大,则需要求出原始协方差矩阵 ∑ \sum 的特征值,最佳的投影直线就是最大的特征值对应的特征向量,其次是第二大的特征值对应的向量,依次类推。若我们希望将维度降低到 k k k维度,则对协方差矩阵进行特征值分解,取前 k k k个最大的特征值对应的特征向量组成新的矩阵 U ∈ R n × k U \in R^{n\times k} URn×k,然后对样本 X ∈ R m × n X \in R^{m \times n} XRm×n在k个特征向量上进行投影,得到降维后的向量表示如下:
Y = X U Y = XU Y=XU
其中 Y ∈ R m × k Y \in R^{m \times k} YRm×k表示的是m个样本,每个样本是一个 k k k维的向量。
所以我们整理下整个PCA计算步骤:

  • step 1: 对所有样本进行减去均值归一化, x ( i ) = x ( i ) − 1 m ∑ j = 1 m x ( j ) x^{(i)} = x^{(i)} - \frac{1}{m}\sum_{j=1}^mx^{(j)} x(i)=x(i)m1j=1mx(j)
  • step 2: 计算样本的协方差矩阵 1 m X X T \frac{1}{m}XX^T m1XXT
  • step 3: 求解矩阵 1 m X X T \frac{1}{m}XX^T m1XXT的特征值和特征向量
  • step 4: 取出特征值最大的前k个特征值对应的特征向量组成新的矩阵 W = ( w 1 , w 2 , . . . , w k ) ∈ R n × k W=(w_1, w_2, ..., w_k) \in R^{n \times k} W=(w1,w2,...,wk)Rn×k
  • step 5: 对m个样本 X ∈ R n × m X \in R^{n\times m} XRn×m进行矩阵乘法, Y = X T W Y=X^TW Y=XTW其中 Y ∈ R m × k Y \in R^{m \times k} YRm×k表示的是m个样本每个样本降维后得到的新的 k k k维向量表示。

6.4 与神经网络模型的关联

神经网络中的自编码(autoencoder)源于主成分的概念,基于重构误差,其中encoder W会在decoder复用,自编码的网络学习,它用于非线性主成分的无监督学习,中间层的隐藏单元创建了一个瓶颈,并学习输入的非线性表示,输出层的权重矩阵是输入层的权重矩阵的转置,因此该网络试图用这种限制性表示再现输入。稀疏编码的一个重要用途是预训练,得到的权重初始化监督神经网络,由于神经网络的目标函数为非凸函数,因而这些起始权重可显著改善最终解的质量。

7 DL常用归一化方法

7.1 Batch Normalization

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

How Does Batch Normalization Help Optimization

7.1.1 动机

训练深度神经网络是比较复杂和困难的,由于每一层的参数不一样,神经网络的每一层的输入值的分布会发生偏移或者变化, 这种现象叫做 internal covariate shift (ICS),而这种不断的变化会导致模型收敛变慢或者模型发散,原因是,若输入值的分布变化大,会往非线性函数的取值区间的上下限两端靠近(比如对于sigmoid函数,wx+b计算是一个很大的正数或者负数,则函数的导数接近0)也叫非线性函数的饱和区间(saturating nonlinearities),反向传播时候,导致低层神经网络的梯度消失,模型收敛变慢,学习困难。为了解决这个问题,提出了batch normalization,主要通过对网络的每一层输入经过归一化,使得分布服从均值为0,方差为1的标准正态分布,从而保证了输入区间落在了非线性函数的敏感区间,避免饱和区间,防止梯度消失,加快模型的收敛速度。

7.1.2 实现

对于一个输入为 d d d维的 x = ( x ( 1 ) . . . x ( d ) ) x=(x^{(1)}...x^{(d)}) x=x(1)...x(d))(已经经过了 w x + b wx+b wx+b的转换),每一维的归一化操作如下:
x ^ ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ] \hat{x}^{(k)} = \frac{x^{(k)} -E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}} x^(k)=Var[x(k)] x(k)E[x(k)]
变化后 x x x服从了均值为0,方差为1的正态分布,主要目的把值往后续进行的非线性变化的敏感区拉动,增大导数值,保证反向传播的梯度不会消失,加快模型训练的收敛速度。但是这样会导致网络表达能力下降,因为都把值映射到一个相同的标准正态分布区间里,为了加大网络的表达能力,用两个需要学习的参数对变化后的值进行缩放和偏移,对于每个值 x ( k ) x^{(k)} x(k),用两个参数 γ ( k ) , β ( k ) \gamma^{(k)}, \beta^{(k)} γ(k),β(k)进行变化:
y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) y^{(k)} = \gamma^{(k)}\hat{x}^{(k)} + \beta^{(k)} y(k)=γ(k)x^(k)+β(k)
这些参数和模型参数一样,在整个训练过程中,需要进行学习。batch normalization训练过程如下:
在这里插入图片描述
测试的时候,整个网络的均值和方差都固定了,其值为训练过程中每个batch的均值和方差的平均,计算形式如下:
E ( x ) ← E B [ μ B ] E(x) \gets E_B[\mu_B] E(x)EB[μB]
V a r [ x ] ← m m − 1 E B [ σ B 2 ] Var[x] \gets \frac{m}{m-1}E_B[\sigma_B^2] Var[x]m1mEB[σB2]
其中 B B B是在训练过程中的所有mini-batch数。则测试阶段,进行归一化操作如下:
y = γ V a r [ x ] + ε . x + ( β − γ E ( x ) V a r [ x ] + ε ) y = \frac{\gamma}{\sqrt{Var[x]+\varepsilon}} . x+(\beta - \frac{\gamma E(x)}{\sqrt{Var[x]+\varepsilon}}) y=Var[x]+ε γ.x+(βVar[x]+ε γE(x))

7.1.3 总结

  • 通过归一化操作,将输入值映射到非线性变换函数的敏感区域,增加梯度值,防止bp过程梯度消失,加快模型收敛
  • 调参过程会更简单,对于初始化参数不会过于敏感,可以使用大的学习率进行学习等
  • 由于进行归一化操作,神经元的输入值差距不会太大,进而限制神经元有过高的权重,类似dropout这种防止过拟合的作用,所以不用dropout也可以达到相同的效果
  • BN的本质是让优化问题更加平滑,使得梯度更新更加稳定,减少由于梯度消失或者梯度爆炸导致模型发散,收敛到局部最优等问题

7.2 Layer Normalization

Layer Normalization

7.2.1 动机

Batch Normalization (BN) 存在一些问题:第一,BN是对一个batch样本计算均值和方差,如果batch样本很少(比如在线学习,资源受限等原因导致),则计算出来的均值和方差不能代表整个样本的均值和方差,这样BN效果反而不好;第二,BN对这种序列模型RNN效果不好,主要由于一个batch的每个样本长度不一,越往后的step,样本数据越少,统计出来的信息不能放映全局的分布,而且测试的时候,若序列长度超过了训练的所有长度,则没有提前计算好的统计信息,无法运行BN。为了解决这些问题,提出了Layer Normalization。

7.2.2 实现

Layer Normalization不依赖batch size的算法,所以解决了BN存在的问题,LN通过对每个样本的所有特征数做归一化操作,计算的归一化维度和BN不一样。在MLP中,假设 H H H是第 l l l层的神经元数量,则LN的计算过程如下:
第一:计算当前层神经元所有特征的均值(在非线性激活之前的值)
μ l = 1 H ∑ i = 1 H a i l \mu^l=\frac{1}{H}\sum_{i=1}^Ha_i^l μl=H1i=1Hail
第二:计算标准差
σ l = 1 H ∑ i = 1 H ( a i l − μ l ) 2 \sigma^l = \sqrt{\frac{1}{H}\sum_{i=1}^H(a_i^l - \mu^l)^2} σl=H1i=1H(ailμl)2
第三:归一化操作:减均值,除以标准差
a ^ l = a l − μ l ( σ l ) 2 + ε \hat{a}^l = \frac{a^l - \mu^l}{\sqrt{(\sigma^l)^2 + \varepsilon}} a^l=(σl)2+ε alμl
第四:类似BN的 γ , β \gamma, \beta γ,β,用增益(gain)   g \text{ }g  g和偏置 (bias) b b b进行缩放
h l = f ( g l ⊙ a ^ l + b l ) h^l = f(g^l \odot \hat{a}^l + b^l) hl=f(gla^l+bl)
对于RNN模型,我们可以看做在每个输入的step时间片做LN操作。

7.2.3 总结

  • 通过归一化操作,Layer Normazation同样可以减轻ICS问题
  • BN通过对不同样本的同一个特征进行归一化,而LN是对同一个样本的不同特征进行归一化,LN不受batch size影响
  • LN 不受batch size影响,也适用于RNN等序列模型

7.3 Weight Normalization

Weight Normalization: A Simple Reparameterization
to Accelerate Training of Deep Neural Networks

7.3.1 动机

受batch normazation的启发,但为了解决batch normalization在序列模型例如RNN等,以及一些对噪声较敏感的深度强化学习和生成模型等应用场景,由于batch normalization受mini batch样本量的影响,导致效果不佳等问题,提出了weight normalization。

7.3.2 实现

首先我们来看下,一个神经节点的计算如下:
y = ϕ ( w ⋅ x + b ) y = \phi(w \cdot x + b) y=ϕ(wx+b)
其中 w w w是一个k维度的权重向量,b是一个偏置标量, x x x是一个k维度的输入特征, ϕ ( ⋅ ) \phi(\cdot) ϕ()表示的是非线性激活函数,最终神经元输出的 y y y是一个标量值。最后会根据loss,然后基于随机梯度方法对参数 w , b w, b w,b进行更新。在这个过程中,为了加快模型的收敛过程,weight normalization通过对 w w w参数进行归一化操作,用参数向量 v v v和一个标量参数 g g g来进行归一化,变化形式如下:
w = g ∣ ∣ v ∣ ∣ v w = \frac{g}{||v||}v w=vgv
其中 v v v也是一个k维度的向量, g g g是一个标量, ∣ ∣ v ∣ ∣ ||v|| v表示的是向量 v v v的欧氏距离。当 v = w v=w v=w g = ∣ ∣ w ∣ ∣ g=||w|| g=w的时候,weight normalization还原为普通的计算,所以经过weight normalization后的权重可变范围是大于归一化之前的,而且 ∣ ∣ w ∣ ∣ = ∣ ∣ g ∣ ∣ ||w||=||g|| w=g,与参数向量 v v v是独立的。
关于权重归一化在一些早点的工作就有涉及,不过主要是在每次随机梯度更新时候,对权重进行归一化。而weight normalization用两个新的参数变量 v , g v,g v,g直接参与到每次的梯度更新来。那weight normalization为什么可以加快收敛速度? 通过解耦权重向量 v ∣ ∣ v ∣ ∣ \frac{v}{||v||} vv方向和范数 g g g来加速收敛,而且把方向和范数独立出来后,优化的范围会有更多的选择空间。
但是通常不是直接优化 g g g,而是通过优化 g g g的log级的参数 s s s g = e s g=e^s g=es,其中 s s s是需要通过梯度下降学习的参数变量。之所以用指数形式去表示 g g g,最直观的解释是指数形式能够有更广的取值范围(但是论文的试验结论是直接去优化 g g g,比这种指数形式效果反而好点)。
梯度计算: 接下来我们来看下weight normalization中,引入新的参数 v , g v,g v,g后,如何计算梯度值。
首先我们定义: ∇ w L \nabla_wL wL为没有做weight归一化之前的损失函数 L L L w w w的梯度,那损失函数对新的变量 v , g v,g v,g的梯度怎么计算?推到计算形式如下:
∂ L ∂ g = ∂ L ∂ w ∂ w ∂ g = ∇ w L ∂ ( g ∣ ∣ v ∣ ∣ v ) ∂ g = ∇ w L ⋅ v ∣ ∣ v ∣ ∣ \frac{\partial L}{\partial g} = \frac{\partial L}{\partial w} \frac{\partial w}{\partial g} = \nabla_wL \frac{\partial (\frac{g}{||v||}v)}{\partial g} =\frac{\nabla_wL \cdot v}{||v||} gL=wLgw=wLg(vgv)=vwLv
∂ L ∂ v = ∂ L ∂ w ∂ w ∂ v = ∇ w L ∂ ( g ∣ ∣ v ∣ ∣ v ) ∂ v = ∇ w L ⋅ g ( v ′ ∣ ∣ v ∣ ∣ − v ∣ ∣ v ∣ ∣ ′ ∣ ∣ v ∣ ∣ 2 ) \frac{\partial L}{\partial v} = \frac{\partial L}{\partial w} \frac{\partial w}{\partial v}= \nabla_wL \frac{\partial (\frac{g}{||v||}v)}{\partial v} = \nabla_wL \cdot g(\frac{v^{'}||v|| - v||v||^{'}}{||v||^2}) vL=wLvw=wLv(vgv)=wLg(v2vvvv)
= ∇ w L ⋅ g ( ∣ ∣ v ∣ ∣ ∣ ∣ v ∣ ∣ 2 − v ⋅ v ∣ ∣ v ∣ ∣ 2 ⋅ ∣ ∣ v ∣ ∣ ) = \nabla_wL \cdot g(\frac{||v||}{||v||^2}-\frac{v \cdot v}{||v||^2 \cdot ||v||}) =wLg(v2vv2vvv)
(说明:其中v的二范数导数 ∣ ∣ v ∣ ∣ ′ = v ∣ ∣ v ∣ ∣ ) ||v||^{'}=\frac{v}{||v||}) v=vv)
= g ∣ ∣ v ∣ ∣ ∇ w L − ∇ w L ⋅ v ∣ ∣ v ∣ ∣ ⋅ g v ∣ ∣ v ∣ ∣ 2 =\frac{g}{||v||} \nabla_wL - \nabla_wL \cdot \frac{v}{||v||} \cdot \frac{gv}{||v||^2} =vgwLwLvvv2gv
= g ∣ ∣ v ∣ ∣ ∇ w L − g ∇ g L ∣ ∣ v ∣ ∣ 2 v =\frac{g}{||v||} \nabla_wL - \frac{g\nabla_gL}{||v||^2}v =vgwLv2ggLv
= g ∣ ∣ v ∣ ∣ ( I − v v ′ ∣ ∣ v ∣ ∣ 2 ) ∇ w L = g ∣ ∣ v ∣ ∣ ( I − w w ′ ∣ ∣ w ∣ ∣ 2 ) ∇ w L = g ∣ ∣ v ∣ ∣ M w ∇ w L =\frac{g}{||v||}(I - \frac{vv^{'}}{||v||^2}) \nabla_wL =\frac{g}{||v||}(I - \frac{ww^{'}}{||w||^2}) \nabla_wL=\frac{g}{||v||}M_w \nabla_wL =vg(Iv2vv)wL=vg(Iw2ww)wL=vgMwwL
从最后的公式可以看出,weight normalization主要有如下两个特征性质:

  • 第一:用 g ∣ ∣ v ∣ ∣ \frac{g}{||v||} vg对梯度值进行缩放
  • 第二:用 M w M_w Mw对梯度向量 ∇ w L \nabla_wL wL进行投影,使得梯度远离当前权重向量 w w w方向

首先我们来看下第一点,如果梯度有噪声,则 ∣ ∣ v ∣ ∣ ||v|| v会很快变大,则缩放因子 g ∣ ∣ v ∣ ∣ \frac{g}{||v||} vg会变小,梯度更新值变小,有self-stabilizes (自我稳定)的作用,减弱由于样本数据集不平衡,对权重产生的影响;而第二点,由于 ∇ v L \nabla_vL vL的方向远离当前权重 w w w的向量,一定程度上可以减少在这个方向上的噪声干扰。

与BN的关系
对于BN,在激活函数之前,会对输入值进行减去均值,除以方差进行归一化操作:
t ′ = t − μ [ t ] σ [ t ] t^{'} = \frac{t-\mu[t]}{\sigma[t]} t=σ[t]tμ[t]
其中 t t t是在经过激活函数之前的值,我们令 t = v ⋅ x t=v \cdot x t=vx。则变换形式如下:
t ′ = t − μ [ t ] σ [ t ] = v σ [ t ] x − μ [ t ] σ [ t ] t^{'} = \frac{t-\mu[t]}{\sigma[t]}=\frac{v}{\sigma[t]}x - \frac{\mu[t]}{\sigma[t]} t=σ[t]tμ[t]=σ[t]vxσ[t]μ[t]
若只有一层layer,且均值为 μ [ t ] = 0 \mu[t]=0 μ[t]=0,方差为 σ [ t ] = ∣ ∣ v ∣ ∣ \sigma[t]=||v|| σ[t]=v的情况下,weight normalization和batch normalization等价。
初始化
由于weight normalization只是对参数进行归一化,并没有对输出值进行归一化,所以模型对初始化值较敏感,需要慎重一点,论文中作者建议的初始化方法如下:

  • 对于 v v v,使用均值为0,标准差为0.05的正态分布进行初始化
  • g g g和偏置 b b b使用第一批样本的统计量进行初始化:
    g ← 1 σ [ t ]     b ← − μ [ t ] σ [ t ] g \gets \frac{1}{\sigma[t]} \text{ }\text{ }\text{ } b \gets \frac{-\mu[t]}{\sigma[t]} gσ[t]1   bσ[t]μ[t]

7.3.3 总结

  • weight normalization通过对权重进行归一化,进而加快模型的收敛速度
  • 不依赖于batch size,对噪声不敏感,所以适应于序列模型RNN,RL强化学习等模型和场景
  • 对学习率有更好的适应性
  • 由于是对参数权重进行归一化,而不像BN是对特征值进行约束,所以对参数的初始化值较敏感

7.4 Instance Normalization

Instance Normalization:The Missing Ingredient for Fast Stylization

7.4.1 动机

在图像风格迁移等这类任务中,对图像的每个像素信息都非常重要。但BN归一化操作会对一个batch的所有样本进行归一化操作,这样会丢失单个样本的独特细节信息;而LN虽然针对单个样本,但是会对单个样本的图像所有通道进行归一化操作,会损失不同通道的差异信息。为了解决这些问题,作者提出了Instance Normalization (IN)。IN归一化主要是对单个样本,单个通道的所有元素进行归一化,从而保留了单个样本的单个通道的个性化差异。
(说明:一般一张图像是一个三维的矩阵: C × W × H C \times W \times H C×W×H,RGB图像,则 C = 3 C=3 C=3

7.4.2 实现

首先我们来看下BN在图像上的操作计算,我们定义 x ∈ R T × C × W × H x \in \mathbb{R}^{T \times C \times W \times H} xRT×C×W×H为包含 T T T个样本的一个batch的输入,其中 C C C是通道数量,若是RGB图像,则代表颜色通道, W , H W, H W,H表示的是样本的宽和高。 x t i j k x_{tijk} xtijk表示在 t i j k tijk tijk-th个元素。则BN在图像的归一化计算方式:
y t i j k = x t i j k − μ i σ i 2 + ε y_{tijk} = \frac{x_{tijk} - \mu_i}{\sqrt{\sigma_i^2 + \varepsilon}} ytijk=σi2+ε xtijkμi
μ i = 1 H W T ∑ t = 1 T ∑ l = 1 W ∑ m = 1 H x t i l m \mu_i = \frac{1}{HWT}\sum_{t=1}^T\sum_{l=1}^W\sum_{m=1}^H x_{tilm} μi=HWT1t=1Tl=1Wm=1Hxtilm
σ i 2 = 1 H W T ∑ t = 1 T ∑ l = 1 W ∑ m = 1 H ( x t i l m − μ i ) 2 \sigma_i^2 = \frac{1}{HWT}\sum_{t=1}^{T}\sum_{l=1}^W\sum_{m=1}^H(x_{tilm}-\mu_i)^2 σi2=HWT1t=1Tl=1Wm=1H(xtilmμi)2
LN归一化计算方式如下:
y t i j k = x t i j k − μ t σ t 2 + ε y_{tijk} = \frac{x_{tijk} - \mu_t}{\sqrt{\sigma_t^2 + \varepsilon}} ytijk=σt2+ε xtijkμt
μ t = 1 C H W ∑ i = 1 C ∑ l = 1 W ∑ m = 1 H x t i l m \mu_t = \frac{1}{CHW}\sum_{i=1}^C\sum_{l=1}^W\sum_{m=1}^H x_{tilm} μt=CHW1i=1Cl=1Wm=1Hxtilm
σ t 2 = 1 C H W ∑ i = 1 C ∑ l = 1 W ∑ m = 1 H ( x t i l m − μ t ) 2 \sigma_t^2 = \frac{1}{CHW}\sum_{i=1}^{C}\sum_{l=1}^W\sum_{m=1}^H(x_{tilm}-\mu_t)^2 σt2=CHW1i=1Cl=1Wm=1H(xtilmμt)2

接下来我们看IN归一化计算方式:
y t i j k = x t i j k − μ t i σ t i 2 + ε y_{tijk} = \frac{x_{tijk} - \mu_{ti} }{\sqrt{\sigma_{ti}^2+\varepsilon}} ytijk=σti2+ε xtijkμti
μ t i = 1 H W ∑ l = 1 W ∑ m = 1 H x t i l m \mu_{ti} = \frac{1}{HW}\sum_{l=1}^W\sum_{m=1}^Hx_{tilm} μti=HW1l=1Wm=1Hxtilm
σ t i 2 = 1 H W ∑ l = 1 W ∑ m = 1 H ( x t i l m − μ t i ) 2 \sigma_{ti}^2 = \frac{1}{HW}\sum_{l=1}^W\sum_{m=1}^H(x_{tilm} - \mu_{ti})^2 σti2=HW1l=1Wm=1H(xtilmμti)2
从BN,LN和IN的公式对比,IN归一化操作相当于是BN和LN的结合,对单样本单个通道更细粒度进行归一化操作,最后也需要类似BN的 γ , β \gamma, \beta γ,β对归一化的结果进行变化,再经过非线性函数变化,得到最终的输出结果值。

7.4.3 总结

  • 在图像生成,风格迁移等对每个像素的差异特性要求保留较高的任务场景中,则IN更加适合
  • 但在MLP和RNN模型结构中,由于每个通道只有一个数据,则IN不能使用
  • 若Feature map较小,也就是 W , H W,H W,H较小的时候,计算的归一化统计量可能有偏差,不具有代表性

7.5 Group Normalization

Group Normalization

7.5.1 动机

解决BN中容易受batch size的影响,batch size较小的时候,计算的归一化统计量不能代表全局的统计量信息,影响模型的效果。所以,提出了独立于batch size的Group Normalization (GN),不同于IN是对单个样本单个通道进行归一化操作,GN是对单个样本每个group里所有通道(包含几个通道)进行归一化操作,主要出发点是因为图像的每个通道并不是完全独立的,具有相同特征分布的可以归为同一个group。从论文给出的实验对比来看,在batch size=2较小的时候,GN比BN的loss低10.6%,如下图所示:
在这里插入图片描述

7.5.2 实现

首先我们来看下BN, LN, IN和GN在图像上归一化操作,四者的区别,如下图所示:
在这里插入图片描述
其中 C C C表示图像的通道, N N N表示batch size, ( W , H ) (W, H) (W,H)表示的图像范围大小。从上图可以看出, LN,IN和GN都是独立于batch size的,都是为了解决BN中存在的问题,其中GN和IN的归一化范围主要区别是,在通道上,IN对单通道进行归一化,而GN对几个通道组成的一个group进行归一化。假设有 G G G个group,则每个group会有 C G \frac{C}{G} GC个通道,相比IN在单个通道上进行归一化,GN会在 C G \frac{C}{G} GC个通道范围上计算统计量,进行归一化。
下面是对比几种归一化操作,在train和val上的error对比:

在这里插入图片描述
整体来看,GN在训练error整体是最低的,不过在val上,BN比GN的error更低点,但整体GN都比IN效果更好,同时相对BN,GN不受batch size影响,对比如下:
在这里插入图片描述

7.5.3 总结

  • GN不受Batch size影响,对通道进行group划分,在每个group里进行归一化操作,不同于IN对单个通道进行归一化操作
  • 在图像领域,传统特征类似基于HOG, SIFT等特征,这些特征都具有按照group组表示,比如频率,灰度,纹理等,所以基于group组进行归一化是mask sense的,而且试验效果明显
  • group数量是超参数,需要自己定义
  • 同样,GN归一化操作不适合MLP和RNN模型结构中,每个通道只有一个数据

7.6 Switchable Normalization

DIFFERENTIABLE LEARNING-TO-NORMALIZE VIA
SWITCHABLE NORMALIZATION

7.6.1 动机

BN, LN和IN三种归一化方式各有各自的优势,那么有没有一种归一化方式可以结合三种归一化操作方法,不受batch size影响,同时有更好的效果?这就是论文提出的Swtitchable Normalization (SN),SN的思想很简单直了,对BN, LN和IN三者计算的统计量(均值和标准差)进行加权求和得到新的统计量信息,用来对数据进行归一化操作,而且通过三者之间的计算关系化简,SN复杂度并没有增加。

7.6.2 实现

首先,我们来定义下归一化公式,假设输入时一个4维的tensor ( N , C , H , W ) (N, C, H, W) (N,C,H,W),分别表示:样本数量,通道数量,一个通道的长和宽。 h n c i j h_{ncij} hncij表示的是元素值,假设经过归一化后元素值为 h ^ n c i j \hat{h}_{ncij} h^ncij,则归一化操作形式如下:
h ^ n c i j = γ h n c i j − μ σ 2 + ε + β \hat{h}_{ncij} = \gamma \frac{h_{ncij}-\mu}{\sqrt{\sigma^2+\varepsilon}} + \beta h^ncij=γσ2+ε hncijμ+β
其中 γ \gamma γ β \beta β是一个缩放和偏置参数, μ \mu μ是均值, σ \sigma σ是标准差, ε \varepsilon ε是一个很小的常量为了防止除法运算数值异常。在IN, LN和BN归一化操作中,大家归一化计算形式都一致,差异的是估计 μ , σ \mu, \sigma μ,σ的统计量不一致。我们用 k ∈ i n , l n , b n k \in {in, ln, bn} kin,ln,bn来区分表示不同的方法, I k I_k Ik表示的是计算统计量元素集合。
IN归一化:计算的统计量数量有 μ i n , σ i n 2 ∈ R N × C \mu_{in}, \sigma_{in}^2 \in \mathbb{R}^{N \times C} μin,σin2RN×C,其中 I i n = { ( i , j ) ∣ i ∈ [ 1 , H ] , j ∈ [ 1 , W ] } I_{in} = \{(i,j) |i \in [1, H], j \in [1, W]\} Iin={(i,j)i[1,H],j[1,W]},IN总共有 2 N C 2NC 2NC个统计量值,每个统计量都涉及 ( H , W ) (H, W) (HW)范围区间。
LN归一化:计算的统计量数量有 μ l n , σ l n 2 ∈ R N × 1 \mu_{ln}, \sigma_{ln}^2 \in \mathbb{R}^{N \times 1} μln,σln2RN×1, 其中 I l n = { ( c , i , j ) ∣ c ∈ [ 1 , C ] , i ∈ [ 1 , H ] , j ∈ [ 1 , W ] } I_{ln} = \{(c,i,j) |c \in [1, C], i \in [1, H], j \in [1, W]\} Iln={(c,i,j)c[1,C],i[1,H],j[1,W]}, LN总共有 2 N 2N 2N个统计量值,每个统计量都涉及 ( C , H , W ) (C, H, W) (C,HW)范围区间。
BN归一化:计算的统计量数量有 μ b n , σ b n 2 ∈ R C × 1 \mu_{bn}, \sigma_{bn}^2 \in \mathbb{R}^{C \times 1} μbn,σbn2RC×1, 其中 I b n = { ( n , i , j ) ∣ n ∈ [ 1 , N ] , i ∈ [ 1 , H ] , j ∈ [ 1 , W ] } I_{bn} = \{(n,i,j) |n \in [1, N], i \in [1, H], j \in [1, W]\} Ibn={(n,i,j)n[1,N],i[1,H],j[1,W]}, LN总共有 2 C 2C 2C个统计量值,每个统计量都涉及 ( N , H , W ) (N, H, W) (N,HW)范围区间。
SN是IN, LN和BN三个归一化操作计算的统计量的加权之后,计算公式表达如下:
h ^ n c i j = γ h n c i j − ∑ k ∈ Ω w k μ k ∑ k ∈ Ω w k ′ σ k 2 + ε + β \hat{h}_{ncij} = \gamma \frac{h_{ncij} - \sum_{k \in \Omega}w_k\mu_k}{\sqrt{\sum_{k \in \Omega}w_k^{'}\sigma_k^2 + \varepsilon}} + \beta h^ncij=γkΩwkσk2+ε hncijkΩwkμk+β
经过化简,IN, LN和BN三者的计算关系为:
在这里插入图片描述
所以,只要计算IN的统计信息值,IN和BN不需要再额外的重复计算,也就是说SN的复杂度并没有增加,为 O ( N C H W ) O(NCHW) O(NCHW)。额外需要学习6个权重参数,对于均值和方差,BN, IN和LN三个归一化方法算出来的值,每个有一个权重,约束条件如下:
∑ k ∈ Ω w k = 1 , ∑ k ∈ Ω w k ′ = 1 \sum_{k \in \Omega}w_k =1, \text{} \sum_{k \in \Omega}w^{'}_k =1 kΩwk=1,kΩwk=1
其中对于任意一个值 w k , w k ′ ∈ [ 0 , 1 ] w_k, w_k^{'} \in [0,1] wk,wk[0,1],计算如下:
w k = e λ k ∑ z ∈ { i n , l n , b n } e λ z  and  k ∈ { i n , b n , l n } w_k = \frac{e^{\lambda_k}}{\sum_{z\in\{in,ln,bn\}}e^{\lambda_z}} \text{ }\text{and } k \in \{in,bn,ln\} wk=z{in,ln,bn}eλzeλk and k{in,bn,ln}
其中 λ i n , λ l n , λ b n , λ i n ′ , λ l n ′ , λ b n ′ \lambda_{in}, \lambda_{ln}, \lambda_{bn}, \lambda^{'}_{in}, \lambda^{'}_{ln}, \lambda^{'}_{bn} λin,λln,λbn,λin,λln,λbn这6个参数是模型需要学习的。

7.6.3 总结

  • SN归一化不受batch size (具备LN和IN归一化不受batch size影响的特性)影响
  • SN除了可以应用与CNN模型结构,同时适应与RNN,MLP(具有LN这种不受NLP任务每个通道特征为1,以及batch size影响的特性)等多种模型
  • SN的归一化具有多样性,深度网络的不同层提取的特征代表的含义不一样,对不同的网络层可以通过归一化组合的权重变化而达到不同的归一化操作

8 参考

  1. https://blog.youkuaiyun.com/Junerror/article/details/80222540
  2. http://blog.codinglabs.org/articles/pca-tutorial.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值