9.数值稳定性、模型初始化
内容概述:
- 数值稳定性
- 梯度爆炸
- 梯度消失
- 稳定模型训练
- 权重初始化
- 激活函数
数值稳定性
数值稳定性是指在数值计算中,避免由于数值大小差异导致的计算错误或结果不准确的问题。
具有d层的神经网络中,\(h^t=f_t(h^{t-1})\)
y=ℓ∘f_d∘…∘f_1(x)
计算损失 ℓ 的梯度 \(W_t\) 的梯度为:
\(\frac{∂ℓ}{∂W_t}=\frac{∂ℓ}{∂y}⋅\frac{∂y}{∂W_t}\)
\(\frac{∂y}{∂W_t}=\frac{∂y}{∂h^d}⋅\frac{∂h^d}{∂h^{d-1}}⋅…⋅\frac{∂h^{t+1}}{∂h^t}⋅\frac{∂h^t}{∂W_t}\)
梯度爆炸
梯度爆炸是指在反向传播过程中,梯度的值变得非常大,导致模型参数更新过大,训练过程不稳定。 当网络层数较多时,反向传播过程中梯度的值可能会变得非常大,超过了正常的数值范围,导致模型参数更新过大,训练过程不稳定。
梯度消失
梯度消失是指在反向传播过程中,梯度的值变得非常小,导致模型参数更新过小,训练过程停滞。 当网络层数较多时,反向传播过程中梯度的值可能会变得非常小,接近于零,导致模型参数更新过小,训练过程停滞。
稳定模型训练
稳定模型训练是指通过合理的权重初始化和选择适当的激活函数,避免梯度爆炸和梯度消失的问题,从而使模型训练过程更加稳定。
权重初始化
权重初始化是指在训练神经网络之前,为模型的权重参数赋予初始值的过程。合理的权重初始化可以帮助避免梯度爆炸和梯度消失的问题,从而使模型训练过程更加稳定。
- 目标:确保渐变值在适当的范围内 ,例如 在 [1e-6,1e3] 之间
- 改变神经网络框架结构(乘法 -> 加) ResNet,LSTM
- 归一化 e.g.批量归一化,渐变修剪
- 适当的权重初始化和激活函数
使用适当范围内的随机值初始化权重,训练的开始容易受到数值不稳定性的影响(远离最优点的表面可能很复杂、接近最优点的表面可能更平坦),根据 N(0,0.01)初始化的小网络很有效,但不保证对深度神经网络也有效。
每层神经网络的常数方差
- 将每层的输出和梯度看成随机变量
- 使每层的输出的均值和方差相同,类似于梯度
正向传播:\(E[h^t_i]=0\), \(Var[h^t_i]=a\)
反向传播:\(E[\frac{∂ℓ}{∂h^t_i}]=0\), \(Var[\frac{∂ℓ}{∂h^t_i}]=b\)
(a、b为常数)
正向方差
\(Var[h^t_i]=a\) \(Var[h^t_i]=Var[f_t(h^{t-1})]\) \(Var[h^t_i]=Var[f_t(h^{t-1})]=Var[h^{t-1}_i]⋅Var[W^t_{ij}]\) \(Var[h^t_i]=a⋅Var[W^t_{ij}]\) \(Var[W^t_{ij}]=\frac{1}{a}\)
反向均值和方差
\(Var[\frac{∂ℓ}{∂h^t_i}]=b\) \(Var[\frac{∂ℓ}{∂h^t_i}]=Var[\frac{∂ℓ}{∂h^{t+1}_i}⋅\frac{∂h^{t+1}_i}{∂h^t_i}]\) \(Var[\frac{∂ℓ}{∂h^t_i}]=Var[\frac{∂ℓ}{∂h^{t+1}_i}]⋅Var[\frac{∂h^{t+1}_i}{∂h^t_i}]\) \(Var[\frac{∂ℓ}{∂h^t_i}]=b⋅Var[W^{t+1}_{ij}]\) \(Var[W^{t+1}_{ij}]=\frac{1}{b}\)
Xavier 初始化
Xavier 初始化是一种权重初始化方法,旨在保持每层神经网络的输出和梯度的方差相同,从而避免梯度爆炸和梯度消失的问题。Xavier 初始化根据每层神经网络的输入和输出的数量来计算权重的初始值。
对于具有 n 个输入和 m 个输出的层,Xavier 初始化将权重初始化为满足以下条件的随机值: \(Var[W_{ij}] = \frac{2}{n + m}\)
激活函数
激活函数是神经网络中用于引入非线性变换的函数。选择适当的激活函数可以帮助避免梯度爆炸和梯度消失的问题,从而使模型训练过程更加稳定。常用的激活函数包括 sigmoid 函数、ReLU 函数、tanh 函数等。