为啥我们要在 softmax 中使用温度? [关闭]

Posted

技术标签:

【中文标题】为啥我们要在 softmax 中使用温度? [关闭]【英文标题】:Why should we use Temperature in softmax? [closed]为什么我们要在 softmax 中使用温度? [关闭] 【发布时间】:2019-11-08 10:19:08 【问题描述】:

我最近在研究 CNN,我想知道 softmax 公式中温度的函数是什么?为什么我们要使用高温来查看概率分布中较软的范数?Softmax Formula

【问题讨论】:

欢迎来到SO,这是关于具体编码的问题;关于机器学习理论和方法的问题不在此处讨论,应改为在Cross Validated 发布。 我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论。 【参考方案1】:

使用温度函数的一个原因是改变神经网络计算的输出分布。根据这个等式将它添加到 logits 向量中:

?? =exp(??/?)/ ∑?exp(??/?)

其中?是温度参数。

你看,这会改变最终的概率。您可以选择 T 为任何值(T 越高,分布越“软” - 如果为 1,则输出分布将与您的正常 softmax 输出相同)。我所说的“更软”的意思是,模型基本上对它的预测不太有信心。随着 T 接近 0,分布变得“更难”。

a) 示例“硬”softmax 概率:[0.01,0.01,0.98]

b) 'soft' softmax probs 示例:[0.2,0.2,0.6]

'a' 是一个“更难”的分布。您的模型对其预测非常有信心。但是,在许多情况下,您不希望您的模型这样做。例如,如果您使用 RNN 生成文本,则基本上是从输出分布中采样并选择采样的单词作为输出标记(和下一个输入)。如果你的模型非常自信,它可能会产生非常重复和无趣的文本。您希望它生成更多样化的文本,因为当采样过程进行时,大部分概率质量将集中在几个标记中,因此您的模型将一遍又一遍地选择选定数量的单词.为了让其他词也有机会被采样,您可以插入温度变量并生成更多样化的文本。

关于为什么较高的温度会导致较软的分布,这与指数函数有关。温度参数对较大 logits 的惩罚比对较小 logits 的惩罚更大。指数函数是一个“递增函数”。因此,如果一个术语已经很大,对它进行少量惩罚会使它比该术语小得多(百分比明智)。

这就是我的意思,

exp(6) ~ 403
exp(3) ~ 20

现在让我们用 1.5 的温度来“惩罚”这个术语:

exp(6/1.5) ~ 54
exp(3/1.5) ~ 7.4

你可以看到,以 % 计,这个词越大,当用温度来惩罚它时,它收缩得越多。当较大的 logits 比较小的 logits 收缩得更多时,更多的概率质量(由 softmax 计算)将分配给较小的 logits。

【讨论】:

以上是关于为啥我们要在 softmax 中使用温度? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们在 softmax 中使用 (exp) 而不是 (log)?

为啥需要softmax函数?为啥不简单归一化?

为啥要在汇编中编程? [关闭]

为啥softmax不在隐藏层中使用[重复]

为啥要在 Python 中隐式检查是不是为空? [关闭]

softmax函数解释的导数[关闭]