1.7.数值稳定性

数值稳定性

神经网络的梯度

假设一个有d层的神经网络,对于任意的t层和最终输出y,有:
h t = f t ( h t − 1 ) , y = l ∘ f d ∘ ⋯ ∘ f 1 ( x ) h^t = f_t(h^{t-1}),y=l\circ f_d\circ \dots \circ f_1(x) ht=ft(ht1),y=lfdf1(x)
计算算是 l l l关于参数 W t W_t Wt的梯度:
∂ l ∂ W t = ∂ l ∂ h d ∂ h d ∂ h d − 1 ⋯ ∂ h t + 1 ∂ h t ∂ h t ∂ W t \frac{\partial l}{\partial W^t}=\frac{\partial l}{\partial h^d}\frac{\partial h^d}{\partial h^{d-1}}\cdots \frac{\partial h^{t+1}}{\partial h^t}\frac{\partial h^t}{\partial W^t} Wtl=hdlhd1hdhtht+1Wtht
​ 中间有 d − t d-t dt次矩阵乘法,做了太多次乘法,就会导致数据稳定性的一些问题:

  • 梯度爆炸: 1. 5 100 = 4 × 1 0 17 1.5^{100} =4 \times 10^{17} 1.5100=4×1017
  • 梯度消失: 0. 8 100 = 2 × 1 0 − 10 0.8^{100}=2\times 10^{-10} 0.8100=2×1010

例子:MLP

为了简单省略了偏移,对于第t层:
在这里插入图片描述

梯度爆炸

​ 使用Relu作为激活函数:
在这里插入图片描述

​ 则矩阵中的元素要么是1要么是0,最终 Π i = t d − 1 ∂ h i + 1 ∂ h i \Pi ^{d-1}_{i=t}\frac{\partial h^{i+1}}{\partial h^i} Πi=td1hihi+1的值的一些元素会来自 Π i = t d − 1 ( W i ) T \Pi^{d-1}_{i=t}(W^i)^T Πi=td1(Wi)T,如果 d − t d-t dt很大,那么值将会很大。

梯度爆炸的问题
  1. 值超出值域(infinity)

    16位浮点数尤为严重(数值区间6e-5 - 6e-4)

  2. 对学习率敏感

    如果学习率太大 → \rightarrow 大参数值 → \rightarrow 更大的梯度

    如果学习率太小 → \rightarrow 训练无进展

    我们可能需要在训练过程不断调整学习率

梯度消失

​ 使用sigmoid作为激活函数

s i g m o i d ( x ) = 1 1 + e x p ( − x )    σ ′ = σ ( x ) ( 1 − σ ( x ) ) sigmoid(x)=\frac{1}{1+exp(-x)}\ \ \sigma'=\sigma(x)(1-\sigma(x)) sigmoid(x)=1+exp(x)1  σ=σ(x)(1σ(x))
!在这里插入图片描述

​ 当输入值很大,sigmoid的梯度很小,则
Π i = t d − 1 ∂ h i + 1 ∂ h i = Π i = t d − 1 d i a g ( σ ′ ( W i h i − 1 ) ) ( W i ) T \Pi ^{d-1}_{i=t}\frac{\partial h^{i+1}}{\partial h^i}=\Pi^{d-1}_{i=t} diag(\sigma '(W^i h^{i-1}))(W^i)^T Πi=td1hihi+1=Πi=td1diag(σ(Wihi1))(Wi)T
​ 的元素值是d-t个小数值得乘积,最终梯度会很小很小。

梯度消失得问题
  1. 梯度值变成0

    16位浮点数尤为严重

  2. 训练没有进展,学习率无用了

  3. 对于底层影响很大,仅顶部层训练得比较好,无法让神经网络更深,限制了神经网络的大小

当数值过大或者过小时会导致数值问题,常发生在深度模型中,因为其会对n个数累乘

训练更稳定

稳定,即让梯度值在合理的范围内,比如[1e-6,1e3]

方法:

  1. 将乘法变为加法:ResNet,LSTM
  2. 归一化:梯度归一化,梯度裁剪
  3. 合理的权重初始和激活函数

合理的初始值和激活函数

让每层的方差是一个常数

​ 将每层的输出和梯度都看作随机变量,让它们的均值和方差都保持一致。

在这里插入图片描述

​ a和b都是常数。

权重初始化

​ 我们希望在合理值区间里随机初始参数,因为训练开始的时候更容易有数值不稳定,远离最优解的地方,其损失函数表面可能很复杂,最优解附近表面会比较平。

​ 使用 N ( 0 , 0.01 ) N(0,0.01) N(0,0.01)来初始可能对小网络没问题,但不能保证深度神经网络。

例子:MLP

假设

  • w i , j t w^t_{i,j} wi,jt(第t层的第i行第j列)是i.i.d,那么 E [ w i , j t ] = 0 , V a r [ w i , j t ] = γ t E[w^t_{i,j}] = 0,Var[w^t_{i,j}]=\gamma_t E[wi,jt]=0,Var[wi,jt]=γt

    独立同分布(Independent Identically Distribution)在概率统计理论中,指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立,那么这些随机变量是独立同分布。

  • h t t − 1 h^{t-1}_t htt1独立于 w i , j t w_{i,j}^t wi,jt

假设没有激活函数 h t = W t h t − 1 , W t ∈ R n t × n t − 1 h^t= W^th^{t-1},W^t\in \R^{n_t\times n_{t-1}} ht=Wtht1WtRnt×nt1
E [ h i t ] = E [ ∑ j w i , j t h j t − 1 ] = ∑ j E [ w i , j t ] E [ h j t − 1 ] = 0 E[h^t_i]=E[\sum_jw^t_{i,j} h^{t-1}_j]=\sum_j E[w^t_{i,j}]E[h^{t-1}_j]=0 E[hit]=E[jwi,jthjt1]=jE[wi,jt]E[hjt1]=0
独立的变量,则有 E [ x y ] = E [ x ] E [ y ] E[xy]=E[x]E[y] E[xy]=E[x]E[y]

正向方差

在这里插入图片描述

其中 E [ h i t ] 2 = 0 E[h^t_i]^2 =0 E[hit]2=0,第二行将平方展开就能得到

接着由于是独立同分布, E [ x + y ] = E [ x ] + E [ y ] E[x+y]=E[x]+E[y] E[x+y]=E[x]+E[y],而 E [ x y ] = E [ x ] E [ y ] E[xy]=E[x]E[y] E[xy]=E[x]E[y],又知 E [ w i , j t ] = 0 E[w^t_{i,j}]=0 E[wi,jt]=0,则后面那项期望为0

V a r [ w i , j t ] = γ t Var[w^t_{i,j}]=\gamma_t Var[wi,jt]=γt,有 n t − 1 n_{t-1} nt1个求和。

那么如果我们希望输入的方差和输出的方差一样,那么 n t − 1 γ t = 1 n_{t-1}\gamma_t =1 nt1γt=1

反向是类似的,需要满足 n t γ t = 1 n_t\gamma_t =1 ntγt=1

Xavier初始

​ 比较难满足 n t − 1 γ t = 1 , n t γ t = 1 n_{t-1}\gamma_t =1,n_t\gamma_t =1 nt1γt=1ntγt=1,除非输入的维度等于输出的维度,否则不可能同时满足。

​ 但我们可以折中的取,即 γ t ( n t − 1 + n t ) 2 = 1 , γ t = 2 n t − 1 + n t \frac{\gamma_t (n_{t-1}+n_t)}2 =1 ,\gamma_t =\frac 2{n_{t-1}+n_t} 2γt(nt1+nt)=1,γt=nt1+nt2,则:

  • 正态分布 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(-\sqrt{6/(n_{t-1}+n_t)},\sqrt{6/(n_{t-1}+n_t)}) U(6/(nt1+nt) ,6/(nt1+nt) )
    • 分布 U [ − a , a ] U[-a,a] U[a,a]的和方差是 a 2 3 \frac{a^2}3 3a2

假设线性的激活函数

在这里插入图片描述

σ ( x ) = x \sigma (x)= x σ(x)=x,反向也是类似的。

这意味着,激活函数必须是 f ( x ) = x f(x)=x f(x)=x

在这里插入图片描述
调整后的sigmoid展开后是近似x的了

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值