gpt4 book ai didi

tensorflow - 为什么我们在执行 RNN 时使用 clip_by_global_norm 来获取梯度

转载 作者:行者123 更新时间:2023-12-04 07:17:16 24 4
gpt4 key购买 nike

我正在关注 this tutorial在 RNN 上,在第 177 行执行以下代码。

max_grad_norm = 10
....
grads, _ = tf.clip_by_global_norm(tf.gradients(cost, tvars), max_grad_norm)
optimizer = tf.train.GradientDescentOptimizer(self.lr)
self._train_op = optimizer.apply_gradients(zip(grads, tvars),
global_step=tf.contrib.framework.get_or_create_global_step())

我们为什么要做 clip_by_global_norm ? max_grad_norm的值如何?决定了?

最佳答案

裁剪规范的原因是,否则它可能会爆炸:

There are two widely known issues with properly training recurrent neural networks, the vanishing and the exploding gradient problems detailed in Bengio et al. (1994). In this paper we attempt to improve the understanding of the underlying issues by exploring these problems from an analytical, a geometric and a dynamical systems perspective. Our analysis is used to justify a simple yet effective solution. We propose a gradient norm clipping strategy to deal with exploding gradients



以上摘自 this纸。

关于如何设置 max_grad_norm ,您可以稍微尝试一下,看看它如何影响您的结果。这通常设置为非常小的数字(我在几个案例中看到过 5)。请注意,tensorflow 不会强制您指定此值。如果您不这样做,它将自行指定(如 documentation 中所述)。

在 rnn 中梯度爆炸\消失很常见的原因是因为在进行反向传播(这称为时间反向传播)时,我们需要将梯度矩阵一直乘以 t=0 (也就是说,如果我们当前在 t=100 ,在一个句子中说 100 个字符,我们将需要乘以 100 个矩阵)。这是 t=3 的等式:

enter image description here

(这个方程取自 here )

如果矩阵的范数大于 1,它最终会爆炸。小于1,它最终会消失。如果通常的神经网络有很多隐藏层,这也可能发生在通常的神经网络中。然而,前馈神经网络通常没有那么多隐藏层,而 rnn 的输入序列很容易有很多字符。

关于tensorflow - 为什么我们在执行 RNN 时使用 clip_by_global_norm 来获取梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43561853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com