1.数学表示

这是传统的softmax:

电池温度 iOS 电池温度系数_温度系数
或者写:
电池温度 iOS 电池温度系数_python_02

这是考虑温度系数的softmax:
电池温度 iOS 电池温度系数_机器学习_03
其中 T 是 softmax 函数的温度超参数。

2.对温度系数理解

我们知道模型在训练收敛后,往往通过 softmax 的输出不会是完全符合 one-hot 向量那种极端分布的,而是在各个类别上均有概率,推断时通过 argmax 取得概率最大的类别。Hinton 的文章就指出,教师模型中在这些负类别(非正确类别)上输出的概率分布包含了一定的隐藏信息。

比如 MNIST 手写数字识别,标签为 7 的样本在输出时,类别 7 的概率虽然最大,但和类别 1 的概率更加接近,这就说明 1 和 7 很像,这是模型已经学到的隐藏的知识。

我们在使用 softmax 的时候往往会将一个差别不大的输出变成很极端的分布,用一个三分类模型的输出举例:

电池温度 iOS 电池温度系数_温度系数_04

可以看到原本的分布很接近均匀分布,但经过 softmax,不同类别的概率相差很大。这就导致类别间的隐藏的相关性信息不再那么明显,有谁知道 0.09 和 0.24 对应的类别很像呢?为了解决这个问题,我们就引入了温度系数。

3.温度系数

我们看看对于随机生成的相同的模型输出,经过不同的函数处理,分布会如何变化:

电池温度 iOS 电池温度系数_人工智能_05


最左边是我们随机生成的分布来模拟模型的输出:电池温度 iOS 电池温度系数_电池温度 iOS_06。中间五幅图是使用 softmax 得到的结果;其中温度系数 电池温度 iOS 电池温度系数_温度系数_07 时相当于原始的 softmax;右侧对比了 argmax 得到的结果。可以看出,从左到右,这些输出结果逐渐从均匀分布向尖锐分布过渡,其中保留的除正确类别以外的信息越来越少。下图更加直观地展示了不同的温度系数 电池温度 iOS 电池温度系数_电池温度 iOS_08 对输出分布的影响。

电池温度 iOS 电池温度系数_机器学习_09


不同的曲线代表不同类别上的概率输出,同样 电池温度 iOS 电池温度系数_温度系数_07 时代表传统的 softmax,在 时,分布逐渐极端化,最终等价于 argmax,在 电池温度 iOS 电池温度系数_温度系数_11

这两幅画很好的说明了 softmax 的本质。【相对于 argmax 这种直接取最大的「hardmax」,softmax 采用更温和的方式,将正确类别的概率一定程度地突显出来。而引入温度系数的本质目的,就是让 softmax 的 soft 程度变成可以调节的超参数】。

而至于这个系数为啥叫 Temperature,其实很有深意。我们知道这个场景最早用于模型蒸馏,一般来说蒸馏需要加热,而加热会导致熵增。我们发现,提高温度系数会导致输出分布的信息熵增大!

我们可以轻松地推导出 趋于无穷大时,分布将趋于均匀分布,此时信息熵趋于最大

电池温度 iOS 电池温度系数_温度系数_12


而当 电池温度 iOS 电池温度系数_电池温度 iOS_08 趋于 0 时,正确类别的概率接近 1,softmax 的效果逼近 argmax

电池温度 iOS 电池温度系数_温度系数_14