论文《Attention is all you need》中为什么当值很大时,softmax 得到的梯度很小

问题描述 投票:0回答:2

这是原论文的屏幕:the screen of the paper。我理解论文的意思是,当点积的值很大时,softmax的梯度会变得很小。
但是,我尝试用交叉熵损失计算softmax的梯度,发现softmax的梯度与传递给softmax的值没有直接关系。
即使单个值很大,当其他值很大时,仍然可以获得很大的梯度。 (抱歉,我不知道如何在这里提出计算过程)

deep-learning nlp softmax attention-model
2个回答
3
投票

实际上,在一个热编码向量上使用softmax的交叉熵的梯度就是对应类向量索引处的grad -log(softmax(x)) = (1 - softmax(x))。 (https://eli.thegreenplace.net/2016/the-softmax-function-and-its-derivative/)。如果传递给softmax的值很大,softmax将产生1,因此产生0梯度。


0
投票

我的 NLP 职业生涯才刚刚起步,但我认为通过向 softmax 函数输入大量输入来驱动梯度消失的核心概念又回到了 softmax 的定义:

softmax(x, X="some domain") = exp(x)/(Σexp(x')|x'∈X)

核心直觉是,假设

x∈[200,1000]
exp(x+1)
exp(x)
大得多
,像下面这样的softmax计算最终会接近1,这会导致梯度接近0:

exp(500)/(exp(300) + exp(400) + exp(500)) ≈ 1

为了进一步说明问题如何在不太极端的情况下发生,请查看此 softmax 计算有多接近 1:

exp(500)/(exp(490) + exp(495) + exp(500)) ≈ 0.993262

现在取 500、495 和 490,并将它们缩小一个简单的因子 10^2:

exp(5)/(exp(4.9) + exp(4.95) + exp(5)) ≈ 0.350131861449

显然,最后一个为我们提供了更公平的概率分布转换。对我来说,使用高数值会产生更少可用的结果,这似乎是 softmax 表达式的局限性。

我希望这个解释有助于澄清这里发生的事情。

© www.soinside.com 2019 - 2024. All rights reserved.