自学内容网 自学内容网

2025-07-16 李沐深度学习10——数值稳定性与模型初始化

1 数值稳定性

1.1 梯度计算基础

​ 在深度神经网络中,梯度计算遵循链式法则。对于一个 d d d层网络
h t = f t ( h t − 1 ) a n d y = ℓ ∘ f d ∘ … ∘ f 1 ( x ) \mathbf{h}^t=f_t(\mathbf{h}^{t-1})\quad\mathrm{and}\quad y=\ell\circ f_d\circ\ldots\circ f_1(\mathbf{x}) ht=ft(ht1)andy=fdf1(x)
​ 损失函数 L L L关于第 t t t层权重 W t W_t Wt的梯度可以表示为:
∂ ℓ ∂ W t = ∂ ℓ ∂ h d ∂ h d ∂ h d − 1 ⋅ ⋅ ⋅ ∂ h t + 1 ∂ h t ∂ h t ∂ W t {\frac{\partial\ell}{\partial{\bf W}^{t}}}={\frac{\partial\ell}{\partial{\bf h}^{d}}}{\frac{\partial{\bf h}^{d}}{\partial{\bf h}^{d-1}}}\cdot\cdot\cdot\frac{\partial{\bf h}^{t+1}}{\partial{\bf h}^{t}}{\frac{\partial{\bf h}^{t}}{\partial{\bf W}^{t}}} Wt=hdhd1hdhtht+1Wtht
​ 其中每个 ∂ h k + 1 ∂ h k \displaystyle{∂h_{k+1}\over ∂h_k} hkhk+1都是一个雅可比矩阵(向量对向量的导数)。这意味着我们需要进行 d − t d-t dt次矩阵乘法。

image-20250716031051039

1.2 核心问题

​ 当这些矩阵连续相乘时,会出现两种极端情况:

  1. 梯度爆炸:当矩阵乘积的元素值持续大于1时,梯度呈指数级增长
  2. 梯度消失:当矩阵乘积的元素值持续小于1时,梯度呈指数级衰减
image-20250716031519784

1.3 梯度爆炸分析

image-20250716031909245

​ 以使用ReLU作为激活函数的多层感知机(MLP)为例:

  • ReLU的导数为:输入 > 0 >0 >0时为 1 1 1,否则为 0 0 0
  • 梯度计算中的对角矩阵元素为 0 0 0 1 1 1
  • 梯度值主要来自权重矩阵 W W W的元素的连乘
image-20250716031957172

具体例子
如果每层权重元素值都 > 1 >1 >1(如 1.5 1.5 1.5), 100 100 100层后的梯度大小约为 1. 5 100 ≈ 4 × 1 0 17 1.5^{100} ≈ 4×10^{17} 1.51004×1017,远超典型浮点数的表示范围。

影响

  1. 数值溢出:特别是使用16位浮点数(数值范围 6 e − 5 ∼ 6 e 4 6e^{-5}\sim 6e^4 6e56e4)时极易发生
  2. 学习率敏感
    • 学习率稍大→参数更新过大→梯度更大→恶性循环
    • 学习率过小→训练进展缓慢
  3. 调参困难:需要在很窄的学习率范围内工作
image-20250716032043507

1.4 梯度消失分析

image-20250716032216338

​ 以Sigmoid作为激活函数为例:

  • Sigmoid导数最大为 0.25 0.25 0.25(在 x = 0 x=0 x=0时),输入绝对值增大时导数迅速趋近 0 0 0
  • 对于 ∣ 输入 ∣ = 6 |输入|=6 输入=6的情况,导数 ≈ 0 ≈0 0
image-20250716032230092

具体例子
即使每层梯度为 0.8 0.8 0.8 100 100 100层后的梯度大小约为 0. 8 100 ≈ 2 × 1 0 − 10 0.8^{100}≈ 2×10^{-10} 0.81002×1010,在16位浮点数下被视为 0 0 0

梯度消失的影响

  1. 训练停滞:底部层(靠近输入的层)梯度几乎为0,无法更新参数
  2. 深度无效:底部层无法学习,使深度网络退化为浅层网络
  3. 学习率无效:梯度为0时任何学习率都无法产生有效更新
image-20250716032250762

1.5 提升稳定性的三大策略

​ 目前有三种主要策略来提升训练稳定性:

1.5.1 将乘法运算变为加法

  • ResNet:通过残差连接将深层网络的矩阵乘法转换为元素加法
  • LSTM:通过门控机制将长序列的乘法运算转换为加法运算
  • 效果:将100次乘法转换为100次加法,大幅降低数值不稳定的风险

1.5.2 梯度归一化与裁剪

  • 梯度归一化:将梯度调整为均值为0、方差为1的分布
  • 梯度裁剪:设定阈值(如±5),强制梯度不超过该范围
  • 优势:简单有效,不依赖特定网络结构

1.5.3 合理的权重初始化与激活函数

​ 这是下节重点讲解的内容,下面将详细展开。

image-20250716032554421

3 权重初始化

image-20250716033426883

3.1 理论基础

​ 为了保持网络各层的输出和梯度稳定,我们目标是让每一层的输出和梯度都看作随机变量,需要确保 ∀ i , t \forall i,t i,t

  1. 正向传播:每层输出的均值为 0 0 0,方差为常数 a a a
    E [ h i t ] = 0 Var ⁡ [ h i t ] = a \mathbb{E}[h_{i}^{t}]=0\quad {\operatorname{Var}[h_{i}^{t}]=a} E[hit]=0Var[hit]=a

  2. 反向传播:每层梯度的均值为 0 0 0,方差为常数 b b b
    E [ ∂ ℓ ∂ h i t ] = 0 V a r [ ∂ ℓ ∂ h i t ] = b \mathbb{E}\left[\frac{\partial\ell}{\partial h_i^t}\right]=0\quad\mathrm{Var}\left[\frac{\partial\ell}{\partial h_i^t}\right]=b E[hit]=0Var[hit]=b

image-20250716033025686

3.2 假设

​ 在无激活函数的条件下,考虑一个多层感知机(MLP),假设:

  • 权重 w t i , j w_t^i,j wti,j是独立同分布(i.i.d)的, E ( w ) = 0 , V a r ( w ) = γ t E(w)=0,Var(w)=γ_t E(w)=0Var(w)=γt
  • 当前层权重与输入 h t − 1 h^{t-1} ht1独立。

正向传播分析
h t i = ∑ j w i , j t h j t − 1 h_t^i = \sum_j w_{i,j}^t h_j^{t-1} hti=jwi,jthjt1
​ 计算期望和方差:

  • $E(h_t^i) = \displaystyle\sum_j E(w_{i,j}t)E(h_j{t-1}) = 0 (因为 (因为 (因为E(w)=0$)
  • V a r ( h t i ) = E [ ( h t i ) 2 ] − E [ ( h t i ) ] 2 = n t − 1 γ t V a r ( h j t − 1 ) Var(h_t^i) = E[(h_t^i)^2] - E[(h_t^i)]^2 = n_{t-1}γ_t Var(h_j^{t-1}) Var(hti)=E[(hti)2]E[(hti)]2=nt1γtVar(hjt1)
image-20250716033911407 image-20250716034402037

​ 要使 V a r ( h t t ) = V a r ( h j t − 1 ) Var(h_t^t)=Var(h_j^{t-1}) Var(htt)=Var(hjt1),则需要 n t − 1 γ t = 1 n_{t-1}γ_t=1 nt1γt=1

反向传播分析
通过类似推导可得需要 n t γ t = 1 n_tγ_t=1 ntγt=1

3.3 Xavier初始化

​ 由于很难同时满足 n t − 1 γ t = 1 n_{t-1}γ_t=1 nt1γt=1 n t γ t = 1 n_tγ_t=1 ntγt=1(除非 n t − 1 = n t n_{t-1}=n_t nt1=nt),Xavier提出折中方案:
γ t ( n t − 1 + n t ) / 2 = 1 γ_t(n_{t-1}+n_t)/2=1 γt(nt1+nt)/2=1
​ 这意味着权重初始化的方差应根据该层的输入维度( n t − 1 n_{t-1} nt1)和输出维度( n t n_t nt)来调整。

​ 具体实现:

  • 正态分布: N ( 0 , ( 2 / ( n t − 1 + n t ) ) N(0,\sqrt{(2/(n_{t-1}+n_t)}) N(0,(2/(nt1+nt) )
  • 均匀分布: U ( − ( 6 / ( n t − 1 + n t ) ) , ( 6 / ( n t − 1 + n t ) ) ) U\Big(-\sqrt{(6/(n_{t-1}+n_t))}, \sqrt{(6/(n_{t-1}+n_t)})\Big) U((6/(nt1+nt)) ,(6/(nt1+nt) ))

​ Xavier初始化的优势在于它能自适应不同层的维度变化,特别是当各层输入输出维度差异较大时,能自动调整初始化范围。

image-20250716034940119

4 激活函数的选择与调整

4.1 理想激活函数的特性

​ 假设激活函数为 σ ( x ) = α x + β σ(x)=αx+β σ(x)=αx+β,为保证数值稳定性,需要:

  1. 正向传播

    • E ( σ ( x ) ) = α E ( x ) + β = β = 0 ⇒ β = 0 E(σ(x)) = αE(x)+β = β = 0 ⇒ β=0 E(σ(x))=αE(x)+β=β=0β=0
    • V a r ( σ ( x ) ) = α 2 V a r ( x ) ⇒ Var(σ(x)) = α²Var(x) ⇒ Var(σ(x))=α2Var(x) 要使 V a r ( σ ( x ) ) = V a r ( x ) Var(σ(x))=Var(x) Var(σ(x))=Var(x)需要 α 2 = 1 ⇒ α = ± 1 α²=1 ⇒ α=±1 α2=1α=±1
    image-20250716035206054
  2. 反向传播

    ​ 类似推导也要求 α = 1 , β = 0 α=1,β=0 α=1β=0

​ 这意味着理想的激活函数应该是 f ( x ) = x f(x)=x f(x)=x(恒等函数),但这缺乏非线性。

4.2 常用激活函数分析

​ 通过泰勒展开分析常用激活函数在0点附近的表现:

  1. tanh
    tanh ⁡ ( x ) = 0 + x − x 3 3 + O ( x 5 ) \tanh(x) =0+x-\frac{x^3}{3} + O(x^5) tanh(x)=0+x3x3+O(x5)
    在0点附近近似 f ( x ) = x f(x)=x f(x)=x,满足要求

  2. ReLU
    ReLU ( x ) = 0 + x \text{ReLU}(x) = 0+x ReLU(x)=0+x
    x > 0 x>0 x>0时就是 f ( x ) = x f(x)=x f(x)=x,满足要求

  3. Sigmoid
    s i g m o i d ( x ) = 1 2 + x 4 − x 3 48 + O ( x 5 ) \mathrm{sigmoid}(x)={\frac{1}{2}}+{\frac{x}{4}}-{\frac{x^{3}}{48}}+O(x^{5}) sigmoid(x)=21+4x48x3+O(x5)
    原始 sigmoid \text{sigmoid} sigmoid不满足 f ( 0 ) = 0 f(0)=0 f(0)=0,但可以调整:
    σ ′ ( x ) = 4 σ ( x ) − 2 σ'(x) = 4σ(x)-2 σ(x)=4σ(x)2
    这样 σ ′ ( 0 ) = 0 σ'(0)=0 σ(0)=0,且在0点附近导数 ≈ 1 ≈1 1

激活函数原始形式0点值0点导数是否需要调整
tanh ( e x − e − x ) / ( e x + e − x ) (e^x-e^{-x})/(e^x+e^{-x}) (exex)/(ex+ex) 0 0 0 1 1 1
ReLU m a x ( 0 , x ) max(0,x) max(0,x) 0 0 0 1 ( x > 0 ) 1(x>0) 1(x>0)
Sigmoid 1 / ( 1 + e − x ) 1/(1+e^{-x}) 1/(1+ex) 0.5 0.5 0.5 0.25 0.25 0.25是(可调整为 4 σ ( x ) − 2 4σ(x)-2 4σ(x)2

为什么关注0点附近?因为神经网络权重初始化通常接近0,大部分激活输入也在0附近。


原文地址:https://blog.csdn.net/zheliku/article/details/149379854

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!