欢迎访问我的博客首页。
归一化与正则化
机器学习的学习过程基于概率和统计学,学习到的知识能用于其它数据的一个基本假设是独立同分布(IID),因此把数据变成同分布是很有必要的。本文介绍深度学习中的归一化(normalization)和正则化(regularization)。
1. 权重归一化
1. 作用
不归一化特征,而是归一化权重。假设卷积核的向量形式是 w ⃗ \vec w w,感受野的向量形式是 x ⃗ \vec x x,偏置为 b b b。一个神经元的输出可以表示为:
y = ϕ ( w ⃗ ⋅ x ⃗ + b ) . y = \phi (\vec w \cdot \vec x + b). y=ϕ(w⋅x+b).
把 w ⃗ \vec w w写成 w ⃗ = g ∣ ∣ v ⃗ ∣ ∣ ⋅ v \vec w = \frac{g}{||\vec v||} \cdot v w=∣∣v∣∣g⋅v。因为 w ⃗ g = e ⃗ \frac{\vec w}{g} = \vec e gw=e,所以 ∣ ∣ w ⃗ ∣ ∣ = g ||\vec w|| = g ∣∣w∣∣=g。这样,权值向量 w ⃗ \vec w w的模长就是 g g g,方向就是 v ⃗ ∣ ∣ v ⃗ ∣ ∣ \frac{\vec v}{|| \vec v ||} ∣∣v∣∣v。模长和方向不再耦合,利于加速收敛。
2. 梯度
训练的过程中要更新
g
g
g和
v
⃗
\vec v
v,所以要计算损失函数对它们的导数。
损失函数关于
g
g
g的导数:
∇ g L = ∇ w L ⋅ ∇ w L ⋅ v ⃗ ∣ ∣ v ⃗ ∣ ∣ . \nabla_{g} L = \nabla_{w} L \cdot \frac{\nabla_{w}L \cdot \vec v}{||\vec v||}. ∇gL=∇wL⋅∣∣v∣∣∇wL⋅v.
损失函数关于 v ⃗ \vec v v的导数:
∇ v L = ∇ w L ⋅ ∂ w ∂ v ⃗ = ∇ w L ⋅ g ⋅ ( v ⃗ ′ ∣ ∣ v ⃗ ∣ ∣ − v ⃗ ∣ ∣ v ⃗ ∣ ∣ ′ ∣ ∣ v ⃗ ∣ ∣ 2 ) = ∇ w L ⋅ g ( 1 ∣ ∣ v ⃗ ∣ ∣ − v ⃗ ∣ ∣ v ⃗ ∣ ∣ 2 ⋅ v ⃗ ∣ ∣ v ⃗ ∣ ∣ ) = ∇ w L ⋅ g ⋅ 1 ∣ ∣ v ⃗ ∣ ∣ − ∇ w L ⋅ g ⋅ v ⃗ ∣ ∣ v ⃗ ∣ ∣ ⋅ v ⃗ ∣ ∣ v ⃗ ∣ ∣ 2 = g ∣ ∣ v ⃗ ∣ ∣ ⋅ ∇ w L − g ⋅ ∇ g L ∣ ∣ v ⃗ ∣ ∣ 2 ⋅ v ⃗ \begin{aligned} \nabla_{v}L &= \nabla_{w} L \cdot \frac{\partial w}{\partial \vec v} \\ &= \nabla_{w} L \cdot g \cdot (\frac{\vec v' ||\vec v|| - \vec v||\vec v||'}{||\vec v||^2}) \\ &= \nabla_{w} L \cdot g(\frac{1}{||\vec v||} - \frac{\vec v}{||\vec v||^2} \cdot \frac{\vec v}{||\vec v||}) \\ &= \nabla_{w} L \cdot g \cdot \frac{1}{||\vec v||} - \nabla_{w} L \cdot g \cdot \frac{\vec v}{||\vec v||} \cdot \frac{\vec v}{||\vec v||^2} \\ &= \frac{g}{||\vec v||} \cdot \nabla_{w} L - \frac{g \cdot \nabla_{g}L}{||\vec v||^2} \cdot \vec v \end{aligned} ∇vL=∇wL⋅∂v∂w=∇wL⋅g⋅(∣∣v∣∣2v′∣∣v∣∣−v∣∣v∣∣′)=∇wL⋅g(∣∣v∣∣1−∣∣v∣∣2v⋅∣∣v∣∣v)=∇wL⋅g⋅∣∣v∣∣1−∇wL⋅g⋅∣∣v∣∣v⋅∣∣v∣∣2v=∣∣v∣∣g⋅∇wL−∣∣v∣∣2g⋅∇gL⋅v
2. 特征归一化
特征归一化方法有 BN、LN、IN、GN、SN。
1. 归一化方法
- 求输入数据 i n p u t _ d a t a input\_data input_data的均值 μ \mu μ、方差 σ \sigma σ:
{ μ i = 1 m ∑ k ∈ S i x k , σ i = 1 m ∑ k ∈ S i ( x k − μ i ) 2 + ϵ . \begin{cases} \mu_i = \frac{1}{m} \sum_{k \in S_i} x_k,\\ \sigma_i = \sqrt { \frac{1}{m} \sum_{k \in S_i} (x_k - \mu _i)^2 + \epsilon}. \end{cases} {μi=m1∑k∈Sixk,σi=m1∑k∈Si(xk−μi)2+ϵ.
其中 ϵ \epsilon ϵ是一个值较小的常量, S i S_{i} Si是用于计算均值和标准差的像素集合, m m m是集合的大小。
- 把input_data通过线性变换 i n p u t _ d a t a − μ σ \frac{input\_data - \mu }{\sigma } σinput_data−μ化为均值为0、方差为1的标准正态分布:
x ^ i = 1 σ i ( x i − μ i ) . \hat x_{i} = \frac{1}{\sigma_i} (x_i - \mu_i). x^i=σi1(xi−μi).
- 使用可学习的参数 γ \gamma γ和 β \beta β,把 i n p u t _ d a t a input\_data input_data化为均值为 β \beta β、方差为 γ 2 \gamma^2 γ2的正态分布:
y i = γ x ^ i + β . y_{i}=\gamma \hat{x}_{i}+\beta. yi=γx^i+β.
均值和方差分别是:
{ E ( y i ) = γ E ( x ^ i ) + β = β , D ( y i ) = γ 2 D ( x ^ i ) = γ 2 . \begin{cases} E( y_{i}) = \gamma E(\hat{x}_{i}) +\beta = \beta,\\ D\left ( y_{i} \right ) = \gamma ^{2}D\left ( \hat{x}_{i} \right ) = \gamma ^{2}. \end{cases} {E(yi)=γE(x^i)+β=β,D(yi)=γ2D(x^i)=γ2.
所以归一化后的特征 y ∼ N ( β , γ 2 ) . y \sim N\left ( \beta ,\gamma ^{2} \right ). y∼N(β,γ2).
2. 归一化方法对比
四种特征归一化方法的区别在于 S i S_{i} Si不同,下图中蓝色的特征 S i S_{i} Si被归一化为相同的均值和方差。输入的特征维度是4维 ( N , C , H , W ) ( N,C,H,W) (N,C,H,W)的,下图中 H H H和 W W W用一维表示。
- BN中 S i = { k ∣ k C = i C } S_{i}=\left \{ k\mid k_{C}=i_{C} \right \} Si={k∣kC=iC}:C坐标相同的像素在一块归一化。
- LN中 S i = { k ∣ k N = i N } S_{i} = \left \{ k \mid k_{N}=i_{N} \right \} Si={k∣kN=iN}:N坐标相同的像素在一块归一化。
- IN中 S i = { k ∣ k N = i N , k C = i C } S_{i}=\left \{ k\mid k_{N}=i_{N},k_{C}=i_{C} \right \} Si={k∣kN=iN,kC=iC}:N坐标和C坐标都相同的像素在一块归一化。
- GN中 S i = { k ∣ k N = i N , ⌊ k C C / G ⌋ = ⌊ i C C / G ⌋ } 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 \} Si={k∣kN=iN,⌊C/GkC⌋=⌊C/GiC⌋}:N坐标相同的像素分为G组,组内的像素在一块归一化。
组数G是一个预定义的超参数。 C G \frac{C}{G} GC是每组的通道数。 ⌊ ⋅ ⌋ \left \lfloor \cdot \right \rfloor ⌊⋅⌋代表向下取整。最右的图中 C = 6 C=6 C=6, G = 2 G=2 G=2, k C k_{C} kC在 { 0 , 1 , 2 , 3 , 4 , 5 } \left \{ 0,1,2,3,4,5 \right \} {0,1,2,3,4,5}中取值时 ⌊ k C C / G ⌋ \left \lfloor \frac{k_{C}}{C/G} \right \rfloor ⌊C/GkC⌋的值为 { 0 , 0 , 0 , 1 , 1 , 1 } \left \{ 0,0,0,1,1,1 \right \} {0,0,0,1,1,1}, i C i_{C} iC同理,因此把 N N N坐标相同的像素分为 2 ( G ) 2(G) 2(G)组,每组的通道数是 3 ( C / G ) 3(C/G) 3(C/G)。
3. BN 优点
- 加快网络训练。BN使每层的数据具有相同的分布,这有利于网络更快地收敛。
- 抑制梯度消失与爆炸。BN 把隐藏层的输出控制在合理范围。一方面使激活函数的输入不至于过大引起激活函数饱和,从而抑制梯度消失。另一方面使激活函数的导数不至于过大,引起梯度爆炸。
- 抑制过拟合:BN 把一批样本关联在一起,使网络不会根据某个样本生成结果。
4. BN 缺点
- Batch size要足够大才能保证均值和方差与整体样本接近。
- 不能用于 RNN,RNN 使用 LN。
3. 损失函数正则化
损失函数正则化的目的是使参数矩阵稀疏化。
1. L0 正则化
定义:非 0 元素的个数。L0 范数使参数矩阵 W 的元素尽可能是 0。
2. L1 正则化
定义:各个元素的绝对值之和。
作用:L1 范数假设参数服从双指数分布(拉普拉斯分布),利于保证权值向量的稀疏性。
L1 范数也是使参数矩阵 W 的元素尽可能是 0。L1 范数在一定条件下等价于 L0 范数,且 L1 范数比 L0 范数容易优化求解。
3. L2 正则化
定义:各元素的平方和的平方根。
作用:L2 范数假设参数服从高斯分布,可以抑制过拟合
L2 范数使参数矩阵 W 的元素接近 0。
L2 正则化等价于权重衰减:
C = C 0 + λ 2 m ∑ i = 1 n w i 2 . C = C_0 + \frac{\lambda}{2m}\sum_{i=1}^{n}w^2_i. C=C0+2mλi=1∑nwi2.
C0 代表原始的代价函数,后面是 L2 正则化项。正则化项对所有权重参数 w 的平方求和,然后除以样本数量 m,为了计算方便再除以 2。 λ \lambda λ 称为权重衰减系数。