×

PyTorch教程5.4之数值稳定性和初始化

消耗积分:0 | 格式:pdf | 大小:0.25 MB | 2023-06-05

张浩

分享资料个

到目前为止,我们实现的每个模型都需要我们根据一些预先指定的分布来初始化它的参数。直到现在,我们都认为初始化方案是理所当然的,掩盖了如何做出这些选择的细节。您甚至可能觉得这些选择并不是特别重要。相反,初始化方案的选择在神经网络学习中起着重要作用,对于保持数值稳定性至关重要。此外,这些选择可以以有趣的方式与非线性激活函数的选择联系起来。我们选择哪个函数以及我们如何初始化参数可以决定我们的优化算法收敛的速度。这里的错误选择可能会导致我们在训练时遇到梯度爆炸或消失的情况。在这个部分,

%matplotlib inline
import torch
from d2l import torch as d2l
%matplotlib inline
from mxnet import autograd, np, npx
from d2l import mxnet as d2l

npx.set_np()
%matplotlib inline
import jax
from jax import grad
from jax import numpy as jnp
from jax import vmap
from d2l import jax as d2l
No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
%matplotlib inline
import tensorflow as tf
from d2l import tensorflow as d2l

5.4.1. 消失和爆炸梯度

考虑一个深度网络L图层,输入x 和输出o. 每层l由转换定义fl权重参数化 W(l), 隐藏层输出为 h(l)(让h(0)=x),我们的网络可以表示为:

(5.4.1)h(l)=fl(h(l−1)) and thus o=fL∘…∘f1(x).

如果所有隐藏层的输出和输入都是向量,我们可以写出梯度为o关于任何一组参数 W(l)如下:

(5.4.2)∂W(l)o=∂h(L−1)h(L)⏟M(L)=def⋅…⋅∂h(l)h(l+1)⏟M(l+1)=def∂W(l)h(l)⏟v(l)=def.

换句话说,这个梯度是L−l矩阵 M(L)⋅…⋅M(l+1)和梯度向量v(l). 因此,当将太多概率相乘时,我们很容易遇到同样的数值下溢问题。在处理概率时,一个常见的技巧是切换到对数空间,即将压力从尾数转移到数值表示的指数。不幸的是,我们上面的问题更严重:最初矩阵 M(l)可能有各种各样的特征值。它们可能很小或很大,它们的产品可能很大很小

不稳定梯度带来的风险超出了数值表示。不可预测的梯度也会威胁到我们优化算法的稳定性。我们可能面临以下参数更新:(i) 过大,破坏了我们的模型( 梯度爆炸问题);或 (ii) 过小(梯度消失问题),由于参数几乎不会在每次更新时移动,因此无法进行学习。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !