7. 数值稳定

7. 数值稳定

1. 数值稳定性

  • 神经网络的梯度

    • 考虑一个有 d 层的神经网络:
    ht=ft(ht1)andy=fd...f1(x)
    • 计算损失 关于参数 Wt 的梯度:
    Wt=hdhdhd1...ht+1hthtWt
    • 链式法则:反向传播时,多个层的梯度相乘,导致数值可能急剧增大或减小。
  • 梯度爆炸与梯度消失

    • 梯度爆炸(Gradient Explosion):参数更新过大,导致模型权重数值不断增大,最终发生溢出。
      • 示例1.51004×1017
    • 梯度消失(Gradient Vanishing):随着反向传播的进行,梯度变得非常小,导致无法有效更新模型权重。
      • 示例0.81002×1010
    • 常见诱因:层数过深、激活函数/初始化不当、学习率失控。
  • 激活函数的影响

    • ReLU :一般能缓解梯度消失,但依然可能导致爆炸。

      σ(x)=max(0,x)andσ(x)={1,if x>00,otherwise
      • 如果 dt 较大,梯度会变得非常大,造成数值爆炸。
    • Sigmoid: 在区间两端梯度非常小,极易导致梯度消失。

      σ(x)=11+exandσ(x)=σ(x)(1σ(x))
  • 计算中常见的数值不稳定

    • 数值溢出:参数值过大或过小,超出数值类型(如16位浮点数)的表示范围。
    • 学习率敏感:学习率过大→爆炸,过小→不收敛
    • 深层网络更易中招:链式乘积n次,深度越大,越不稳定。
  • 例子:在MLP中,前向传播和反向传播都受到激活函数的影响。使用ReLU:爆炸风险更大。使用Sigmoid:消失风险更大。

  1. 使用ReLU
ft(ht1)=σ(Wtht1),htht1=diag(σ(Wtht1))(Wt)T
  1. 使用Sigmoid时
i=td1hi+1hi=i=td1diag(σ(Wihi1))(Wi)T

2. 让训练更加稳定

  • 目标:让梯度值在合理的范围内(例如 [1×106,1×103])。
    1. 将乘法变加法:例如:ResNet、LSTM
    2. 归一化:梯度归一化、梯度裁剪
    3. 合理的,权重初始化、激活函数

MLP中的例子

  • 目标:让每一层的输出和反向梯度的方差都是常数,避免数值爆炸或消失。
    • 每层输出和梯度都看作随机变量,要求均值为0、方差为常数(独立同分布)。
正向传播反向传播E[hit]=0E[hit]=0Var[hit]=aVar[hit]=bi,t
  1. 假设:wi,jt 是独立同分布(i.i.d.),且满足:

    • E[wi,jt]=0,Var[wi,jt]=γt
    • hit+1 独立于 wi,jt
  2. 没有激活函数:ht=Wtht1,其中 WtRnt×nt1

  • 正向方差
E[hit]=E[jwi,jthjt1]=jE[wi,jt]E[hjt1]=0Var[hit]=E[(hit)2](E[hit])2=0=E[(jwi,jthjt1)2]=jE[(wi,jt)2]E[(hjt1)2]+jkE[wi,jtwi,kt]=0E[hjt1hkt1]=jVar[wi,jt]Var[hjt1]=nt1γtVar[hjt1]
  • 反向传播梯度
hit1=htWtE[hit1]=0Var[hit1]=ntγtVar[hjt]
  • nt1γt=1
  • 为保证所有层的方差一致,理想要求 nt1γt=1ntγt=1,但实际很难同时满足。
  1. 常用:Xavier初始化(针对深度网络)
    • Xavier初始化可以避免梯度爆炸或消失。
    • Xavier初始化:适用于深度神经网络,通过平衡层输入输出的方差,使梯度在训练过程中更加稳定。
      • γt(nt1+nt)/2=1 ; γt=2nt1+nt
      • 正态分布N(0,2/(nt1+nt))
      • 均匀分布U(6/(nt1+nt),6/(nt1+nt))
      • note:U(a,a) 的方差为 a2/3

3. 结论

  • 梯度爆炸梯度消失是深度神经网络常见的数值稳定性难题,尤其在网络层数增加后更突出。
  • 主要对策有三条:
    1. 权重初始化要科学:优先选用Xavier或He初始化,降低数值极端波动风险。
    2. 归一化机制要用好:如Batch Normalization,让每一层的输出和梯度方差都在合理范围,防止异常扩散或消失。
    3. 激活函数要选对:避免Sigmoid等极易导致梯度消失的激活函数,推荐ReLU及其变体。
  • 训练过程中还需关注学习率调整,权重初始化和归一化相结合才能最大程度保证数值稳定。

参考资料


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

7. 数值稳定
http://neurowave.tech/2025/04/22/10-7-LNN-数值稳定/
作者
Artin Tan
发布于
2025年4月22日
更新于
2025年8月2日