Bootstrap

深度学习中的归一化(normalization)和正则化(regularization)

机器学习的学习过程基于概率和统计学,学习到的知识能用于其它数据的一个基本假设是独立同分布(IID),因此把数据变成同分布是很有必要的。


A.权重归一化: WN

不归一化特征,而是归一化权重。

假设卷积核的向量形式是\vec{w},感受野的向量形式是\vec{x},偏置为b。一个神经元的输出可以表示为:y=\phi \left ( \vec{w}\cdot \vec{x}+b \right )。把权值\vec{w}写成:\vec{w}= \frac{g}{\left \| \vec{v} \right \|} \vec{v},因为\frac{\vec{w}}{g}=\vec{e},所以\left \| \vec{w} \right \|=g。这样,权值向量\vec{w}的模长就是g,方向就是\frac{\vec{v}}{\left \| \vec{v} \right \|}。模长和方向不再耦合,可以加速收敛。

损失函数关于g的导数:

\triangledown _{g}L=\triangledown _{w}L\cdot \frac{\partial \vec{w}}{\partial g}=\frac{\triangledown _{w}L\cdot \vec{v}}{\left \| \vec{v} \right \|}

损失函数关于\vec{v}的导数:

\triangledown _{v}L=\triangledown _{w}L\cdot \frac{\partial w}{\partial \vec{v}}=\triangledown _{w}L\cdot g\cdot \left ( \frac{​{\vec{v}}' \left \| \vec{v} \right \|-\vec{v}{\left \| \vec{v} \right \|}'}{\left \| \vec{v} \right \|^{2}} \right )=\triangledown _{w}L\cdot g\left ( \frac{1}{\left \| \vec{v} \right \|}-\frac{\vec{v}}{\left \| \vec{v} \right \|^{2}} \cdot \frac{\vec{v}}{\left \| \vec{v} \right \|} \right )=\triangledown _{w}L\cdot g\cdot \frac{1}{\left \| \vec{v} \right \|} - \triangledown _{w}L\cdot g\cdot \frac{\vec{v}}{\left \| \vec{v} \right \|} \cdot \frac{\vec{v}}{\left \| \vec{v} \right \| ^{2}}= \frac{g}{\left \| \vec{v} \right \|}\cdot \triangledown _{w}L - \frac{g\cdot \triangledown _{g}L}{\left \| \vec{v} \right \| ^{2} }\cdot \vec{v}

B.特征归一化: BNLNINGNSN

归一化操作

特征归一化就是:

  1. 求输入数据input_data的均值\mu、方差\sigma
  2. 把input_data通过线性变换\frac{input\_data - \mu }{\sigma }化为均值为0、方差为1的标准正态分布。
  3. 使用可学习的参数\gamma\beta,把input_data化为均值为\beta、方差为\gamma^{2}的正态分布。

BN、LN、IN、GN这一系列方法的作用可以表示为:\hat{x}_{i}=\frac{1}{\sigma }_{i}\left ( x_{i}-\mu _{i} \right )(1),其中x是某层中的特征,i是一个索引。对2维图像来说,i=\left ( i_{N},i_{C},i_{H},i_{W} \right )是一个按\left ( N,C,H,W \right )顺序索引特征的4维向量,其中N是batch轴,C是通道轴,HW是高度和宽度轴。

\mu\sigma是均值和标准差,计算方式是:\mu _{i} = \frac{1}{m} \sum_{k\in S_{i}}^{ } x_{k}\sigma _{i} = \sqrt{ \frac{1}{m} \sum_{k\in S_{i}}^{ } \left ( x_{k} - \mu _{i} \right ) ^{2} + \epsilon },其中\epsilon是一个值较小的常量,S_{i}是用于计算均值和标准差的像素集合,m是集合的大小。

\hat{x}_{i}是标准正态分布。归一化后的特征就是:y_{i}=\gamma \hat{x}_{i}+\beta,其中\gamma\beta是可学习的变量,其均值E\left ( y_{i} \right ) = \gamma E\left ( \hat{x}_{i} \right ) +\beta = \beta,方差D\left ( y_{i} \right ) = \gamma ^{2}D\left ( \hat{x}_{i} \right ) = \gamma ^{2}。所以归一化后的特征F\sim N\left ( \beta ,\gamma ^{2} \right )

实现区别

四种特征归一化实现方法的区别在于S_{i}不同。

图1.归一化方法。蓝色的像素被归一化为相同的均值和方差。
  1. BN中S_{i}=\left \{ k\mid k_{C}=i_{C} \right \}C坐标相同的像素在一块归一化。
  2. LN中S_{i} = \left \{ k \mid k_{N}=i_{N} \right \}N坐标相同的像素在一块归一化。
  3. IN中S_{i}=\left \{ k\mid k_{N}=i_{N},k_{C}=i_{C} \right \}N坐标和C坐标都相同的像素在一块归一化。
  4. GN中S_{i} = \left \{ k\mid k_{N}=i_{N},\left \lfloor \frac{k_{C}}{C/G} \right \rfloor = \left \lfloor \frac{i_{C}}{C/G} \right \rfloor\right \}N坐标相同的像素分为G组,组内的像素在一块归一化。组数G是一个预定义的超参数。\frac{C}{G}是每组的通道数。\left \lfloor \cdot \right \rfloor代表向下取整。图1最右的图中C=6G=2k_{C}\left \{ 0,1,2,3,4,5 \right \}中取值时\left \lfloor \frac{k_{C}}{C/G} \right \rfloor的值为\left \{ 0,0,0,1,1,1 \right \}i_{C}同理,因此把N坐标相同的像素分为2(G)组,每组的通道数是3(C/G)。

如公式(1),BN、LN、IN学习各通道的线性变换以补偿表征能力的可能损失:y_{i}=\gamma \hat{x}_{i}+\beta,其中\gamma\beta是可训练的尺度和偏移。

作用区别

图2.设置batch size为32/CPU时的误差曲线比较。模型是ResNet-50,数据集是ImageNet。左图是训练误差,右图是验证误差。

BN

BN是唯一依赖batch size的归一化方法,在batch size较小时误差急剧增大。由于内存限制,检测、分割、视频识别这类任务的batch size一般都较小,所以BN就不合适。

对训练集这个大样本做归一化最符合归一化的目的,但难以实现。一个batch size是大样本中的一个小样本,于是对每个小样本归一化就成为一个可行的选择,所以BN是最常用的方法。当各batch size同分布时,它们较小的分布差异会增加健壮性,但分布差异大时一个batch size就难以代表整个样本的分布,所以训练前需要shuffle。

图2.ImageNet分类误差和batch size大小。图示的模型是ResNet-50,用8个GPU在ImageNet训练集上训练,在验证集上评估。BN的误差随batch size减小而急剧增大,GN的误差和batch size变化无关。当batch size为2时,GN的误差比BN小10%。

GN

GN是LN和IN的复合,性能优于LN和IN。如图2,GN对batch size不敏感,因此可以用于batch size较小的情况。

SN

虽然LN、IN对batch size不敏感,但其归一化能力较弱,当batch size较大时不如BN。因此SN组合LN、IN、BN,让网络学习权重参数以自动选择归一化方法:batch size越小,SN中BN的权重系数越小,IN和LN的权重系数越大;batch size越大,SN中BN的权重系数越大,IN和LN的权重系数越小。


[参考1][参考2]

;