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(ht−1)andy=ℓ∘fd∘…∘f1(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∂ℓ=∂hd∂ℓ∂hd−1∂hd⋅⋅⋅∂ht∂ht+1∂Wt∂ht
其中每个
∂
h
k
+
1
∂
h
k
\displaystyle{∂h_{k+1}\over ∂h_k}
∂hk∂hk+1都是一个雅可比矩阵(向量对向量的导数)。这意味着我们需要进行
d
−
t
d-t
d−t次矩阵乘法。
1.2 核心问题
当这些矩阵连续相乘时,会出现两种极端情况:
- 梯度爆炸:当矩阵乘积的元素值持续大于1时,梯度呈指数级增长
- 梯度消失:当矩阵乘积的元素值持续小于1时,梯度呈指数级衰减
1.3 梯度爆炸分析
以使用ReLU作为激活函数的多层感知机(MLP)为例:
- ReLU的导数为:输入 > 0 >0 >0时为 1 1 1,否则为 0 0 0
- 梯度计算中的对角矩阵元素为 0 0 0或 1 1 1
- 梯度值主要来自权重矩阵 W W W的元素的连乘
具体例子:
如果每层权重元素值都
>
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.5100≈4×1017,远超典型浮点数的表示范围。
影响
- 数值溢出:特别是使用16位浮点数(数值范围 6 e − 5 ∼ 6 e 4 6e^{-5}\sim 6e^4 6e−5∼6e4)时极易发生
- 学习率敏感:
- 学习率稍大→参数更新过大→梯度更大→恶性循环
- 学习率过小→训练进展缓慢
- 调参困难:需要在很窄的学习率范围内工作
1.4 梯度消失分析
以Sigmoid作为激活函数为例:
- Sigmoid导数最大为 0.25 0.25 0.25(在 x = 0 x=0 x=0时),输入绝对值增大时导数迅速趋近 0 0 0
- 对于 ∣ 输入 ∣ = 6 |输入|=6 ∣输入∣=6的情况,导数 ≈ 0 ≈0 ≈0
具体例子:
即使每层梯度为
0.8
0.8
0.8,
100
100
100层后的梯度大小约为
0.
8
100
≈
2
×
1
0
−
10
0.8^{100}≈ 2×10^{-10}
0.8100≈2×10−10,在16位浮点数下被视为
0
0
0。
梯度消失的影响
- 训练停滞:底部层(靠近输入的层)梯度几乎为0,无法更新参数
- 深度无效:底部层无法学习,使深度网络退化为浅层网络
- 学习率无效:梯度为0时任何学习率都无法产生有效更新
1.5 提升稳定性的三大策略
目前有三种主要策略来提升训练稳定性:
1.5.1 将乘法运算变为加法
- ResNet:通过残差连接将深层网络的矩阵乘法转换为元素加法
- LSTM:通过门控机制将长序列的乘法运算转换为加法运算
- 效果:将100次乘法转换为100次加法,大幅降低数值不稳定的风险
1.5.2 梯度归一化与裁剪
- 梯度归一化:将梯度调整为均值为0、方差为1的分布
- 梯度裁剪:设定阈值(如±5),强制梯度不超过该范围
- 优势:简单有效,不依赖特定网络结构
1.5.3 合理的权重初始化与激活函数
这是下节重点讲解的内容,下面将详细展开。
3 权重初始化
3.1 理论基础
为了保持网络各层的输出和梯度稳定,我们目标是让每一层的输出和梯度都看作随机变量,需要确保 ∀ i , t \forall i,t ∀i,t:
-
正向传播:每层输出的均值为 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 -
反向传播:每层梯度的均值为 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
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)=0,Var(w)=γt。
- 当前层权重与输入 h t − 1 h^{t-1} ht−1独立。
正向传播分析:
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=j∑wi,jthjt−1
计算期望和方差:
- $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=nt−1γtVar(hjt−1)
要使 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(hjt−1),则需要 n t − 1 γ t = 1 n_{t-1}γ_t=1 nt−1γ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
nt−1γt=1和
n
t
γ
t
=
1
n_tγ_t=1
ntγt=1(除非
n
t
−
1
=
n
t
n_{t-1}=n_t
nt−1=nt),Xavier提出折中方案:
γ
t
(
n
t
−
1
+
n
t
)
/
2
=
1
γ_t(n_{t-1}+n_t)/2=1
γt(nt−1+nt)/2=1
这意味着权重初始化的方差应根据该层的输入维度(
n
t
−
1
n_{t-1}
nt−1)和输出维度(
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/(nt−1+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/(nt−1+nt)),(6/(nt−1+nt)))
Xavier初始化的优势在于它能自适应不同层的维度变化,特别是当各层输入输出维度差异较大时,能自动调整初始化范围。
4 激活函数的选择与调整
4.1 理想激活函数的特性
假设激活函数为 σ ( x ) = α x + β σ(x)=αx+β σ(x)=αx+β,为保证数值稳定性,需要:
-
正向传播:
- 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。
-
反向传播:
类似推导也要求 α = 1 , β = 0 α=1,β=0 α=1,β=0。
这意味着理想的激活函数应该是 f ( x ) = x f(x)=x f(x)=x(恒等函数),但这缺乏非线性。
4.2 常用激活函数分析
通过泰勒展开分析常用激活函数在0点附近的表现:
-
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+x−3x3+O(x5)
在0点附近近似 f ( x ) = x f(x)=x f(x)=x,满足要求 -
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,满足要求 -
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+4x−48x3+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}) (ex−e−x)/(ex+e−x) | 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+e−x) | 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)!
