machine-learning - 为什么我们要在softmax中使用Temperature?

标签 machine-learning deep-learning conv-neural-network softmax

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

最佳答案

使用温度函数的一个原因是改变神经网络计算的输出分布。根据以下方程将其添加到 logits 向量:

𝑞𝑖 =exp(𝑧𝑖/𝑇)/Σ𝑗exp(𝑧𝑗/𝑇)

其中𝑇是温度参数。

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

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

b) 示例“软”softmax 概率:[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。

关于machine-learning - 为什么我们要在softmax中使用Temperature?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58764619/

相关文章:

python - PyTorch 数据集中哪里使用了 len 函数?

tensorflow - 在训练用于语义分割的深度学习模型时,处理背景像素类 (ignore_label) 的最佳方法是什么?

python - 使用 imageio 包将 mp4 视频转换为 avi 视频

python - 如何在自定义 Keras 模型中使用 BatchNormalization 层

tensorflow - 为 CNN 调试 'TypeError: Can not convert a ndarray into a Tensor or Operation'

machine-learning - 查找两个短句子或文章之间语义相似性的最新方法(在概念级别)

python - Tensorflow v1.14 中的梯度裁剪错误

machine-learning - 可以在cuda中使用libsvm吗?

python - 如何在 Keras 中解码来自深度自动编码器的编码数据(教程中不明确)

matlab - 从中间层提取CNN特征