归一化与正则化

欢迎访问我的博客首页


  机器学习的学习过程基于概率和统计学,学习到的知识能用于其它数据的一个基本假设是独立同分布(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 ∣∣gv。因为 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 ∣∣wLv .

  损失函数关于 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=wLv w=wLg(∣∣v 2v ∣∣v ∣∣v ∣∣v )=wLg(∣∣v ∣∣1∣∣v 2v ∣∣v ∣∣v )=wLg∣∣v ∣∣1wLg∣∣v ∣∣v ∣∣v 2v =∣∣v ∣∣gwL∣∣v 2ggLv

2. 特征归一化


  特征归一化方法有 BN、LN、IN、GN、SN。

1. 归一化方法

  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=m1kSixk,σi=m1kSi(xkμi)2+ϵ .

  其中 ϵ \epsilon ϵ是一个值较小的常量, S i S_{i} Si是用于计算均值和标准差的像素集合, m m m是集合的大小。

  1. 把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).

  1. 使用可学习的参数 γ \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 ). yN(β,γ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用一维表示。

四种归一化

  1. BN中 S i = { k ∣ k C = i C } S_{i}=\left \{ k\mid k_{C}=i_{C} \right \} Si={kkC=iC}:C坐标相同的像素在一块归一化。
  2. LN中 S i = { k ∣ k N = i N } S_{i} = \left \{ k \mid k_{N}=i_{N} \right \} Si={kkN=iN}:N坐标相同的像素在一块归一化。
  3. 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={kkN=iN,kC=iC}:N坐标和C坐标都相同的像素在一块归一化。
  4. 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={kkN=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 优点

  1. 加快网络训练。BN使每层的数据具有相同的分布,这有利于网络更快地收敛。
  2. 抑制梯度消失与爆炸。BN 把隐藏层的输出控制在合理范围。一方面使激活函数的输入不至于过大引起激活函数饱和,从而抑制梯度消失。另一方面使激活函数的导数不至于过大,引起梯度爆炸。
  3. 抑制过拟合:BN 把一批样本关联在一起,使网络不会根据某个样本生成结果。

4. BN 缺点

  1. Batch size要足够大才能保证均值和方差与整体样本接近。
  2. 不能用于 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=1nwi2.

  C0 代表原始的代价函数,后面是 L2 正则化项。正则化项对所有权重参数 w 的平方求和,然后除以样本数量 m,为了计算方便再除以 2。 λ \lambda λ 称为权重衰减系数。

4. 参考


  1. BN
  2. LN
  3. IN
  4. GN
  5. SN
  6. 权重归一化
  7. BN 的特点
  8. 损失函数正则化
  9. 权重衰减
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值