深度学习:梯度消失和梯度爆炸

张开发
2026/4/16 5:31:50 15 分钟阅读

分享文章

深度学习:梯度消失和梯度爆炸
问题几种RNNs并不能很好的处理较长的序列。一个主要的原因是RNN在训练中很容易发生梯度爆炸和梯度消失这导致训练时梯度不能在较长序列中一直传递下去从而使RNN无法捕捉到长距离的影响。梯度消失主要是因为网络层数太多太深导致梯度无法传播。本质应该是激活函数的饱和性。梯度爆炸梯度爆炸的时候我们的程序会收到NaN错误。即DNN结果出现nan值梯度爆炸导致结果不收敛。如在tf中运行到self.train_op layers.optimize_loss(self.loss, tf.train.get_global_step(), optimizerself.optimizer, learning_rateself.learning_rate, clip_gradientsself.clip_norm)时出错Found Inf or NaN global norm. : Tensor had NaN values出错可能1 输入数据存在nan需要run部分数据或者通过tf.Print输出进入模型的features看看。2 可能就是batch_size/学习率过大其它可能算子中出现数值溢出触发NaN- 比如在算softmax时使用-1e9作为mask负无穷近似在FP16下会发生overflow进而在softmax前产生NaN。- LayerNorm输入值范围过大平方和易发生overflow导致 NaN。需对LayerNorm输入进行缩放除以 10。[深度学习学习率及如何调整][神经网络中的激活函数 ]原因前馈神经网络的梯度消失和爆炸前馈神经网络包括全连接层、卷积层等可以表示为那么网络输出对 W1 求偏导这里是相互独立的一般不会有数值问题主要问题在于激活函数的导数 f在饱和区接近于零导致梯度消失。[神经网络训练中的梯度消失与梯度爆炸 - 知乎]RNN网络中的梯度消失和爆炸RNN的统一定义为 htf(xt,ht−1;θ) (1)其中ht是每一步的输出它由当前输入xt和前一时刻输出ht−1共同决定而θ则是可训练参数。在做最基本的分析时我们可以假设ht,xt,θ都是一维的这可以让我们获得最直观的理解并且其结果对高维情形仍有参考价值。之所以要考虑梯度是因为我们目前主流的优化器还是梯度下降及其变种因此要求我们定义的模型有一个比较合理的梯度。我们可以求得所以步数多了梯度消失或爆炸几乎都是不可避免的我们只能对于有限的步数去缓解这个问题。RNN中梯度消失的含义距离当前时间步越长那么其反馈的梯度信号越不显著最后可能完全没有起作用这就意味着RNN对长距离语义的捕捉能力失效了。[也来谈谈RNN的梯度消失/爆炸问题 - 科学空间|Scientific Spaces][偏导的链式法则][零基础入门深度学习(5) - 循环神经网络][2.1 剃度弥散及梯度爆炸问题]Lstm的梯度消失和爆炸如果我们的任务比较依赖于历史信息那么“遗忘门”ft就会接近于1这时候历史的梯度信息也正好不容易消失如果ft很接近于0那么就说明我们的任务不依赖于历史信息这时候就算梯度消失也无妨了。Gru的梯度消失和爆炸ref 推导和理论[也来谈谈RNN的梯度消失/爆炸问题]解决方案共同方案bn [Batch-normalized 应该放在非线性激活层的前面还是后面]。梯度消失1、改进模型。使用RNNs时使用比如长短时记忆网络LTSM和Gated Recurrent UnitGRU。残差网络。2、合理的初始化权重值。初始化权重使每个神经元尽可能不要取极大或极小值以躲开梯度消失的区域。3、使用relu代替sigmoid和tanh作为激活函数。[Batch-normalized 应该放在非线性激活层的前面还是后面]梯度爆炸解决1、batch_size和学习率调整学习率warm-updense参数调大warmup_step、调小warmup系数sparse调整可能无效减小学习率梯度变化直接变小减小batch size累积梯度更小但因bs变小模型学习效果可能变差2、features规格化避免突然来一个大的输入。最好逐层检查是哪里爆炸了针对性norm即数据归一化减均值除方差或者加入normalization例如BN、L2 norm等。3、加入gradient clipping设置一个梯度阈值当梯度超过这个阈值的时候可以直接截取。4、更换参数初始化方法对于CNN一般用xavier或者msra的初始化方法。5、更换激活函数RNN用tanh而不是relu的主要目的就是缓解梯度爆炸风险。当然这个缓解是相对的用了tanh依然有爆炸的可能性。6、减小ps同步时的staleness比如将sparse放入内存训练而不是训练时从ps取或者延迟一点训练等sparse取完。[梯度裁剪及其作用 | 吴良超的学习笔记][训练深度学习网络时候出现Nan是什么原因怎么才能避免 - 知乎]from: 深度学习梯度消失和梯度爆炸_-柚子皮-的博客-CSDN博客ref:

更多文章