softmax之温度系数

1.数学表示

这是传统的softmax:

q i = e x p ( z i ) ∑ j e x p ( z j ) q_i = \frac{exp(z_i)}{\sum_jexp(z_j)} qi=jexp(zj)exp(zi)
或者写:
q i = e x p ( z i ) / 1.0 ∑ j e x p ( z j / 1.0 ) q_i = \frac{exp(z_i)/1.0}{\sum_jexp(z_j/1.0)} qi=jexp(zj/1.0)exp(zi)/1.0

这是考虑温度系数的softmax:
q i = e x p ( z i ) / T ∑ j e x p ( z j / T ) q_i = \frac{exp(z_i)/T}{\sum_jexp(z_j/T)} qi=jexp(zj/T)exp(zi)/T
其中 T 是 softmax 函数的温度超参数。

2.对温度系数理解

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

比如 MNIST 手写数字识别,标签为 7 的样本在输出时,类别 7 的概率虽然最大,但和类别 1 的概率更加接近,这就说明 1 和 7 很像,这是模型已经学到的隐藏的知识。
我们在使用 softmax 的时候往往会将一个差别不大的输出变成很极端的分布,用一个三分类模型的输出举例:
在这里插入图片描述

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

3.温度系数

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

softmax之温度系数_第1张图片
最左边是我们随机生成的分布来模拟模型的输出: z ∈ R 10 ∼ N ( 10 , 2 ) z \in R^{10 }\sim N(10,2) zR10N(10,2)。中间五幅图是使用 softmax 得到的结果;其中温度系数 T = 1 T=1 T=1 时相当于原始的 softmax;右侧对比了 argmax 得到的结果。可以看出,从左到右,这些输出结果逐渐从均匀分布向尖锐分布过渡,其中保留的除正确类别以外的信息越来越少。下图更加直观地展示了不同的温度系数 T T T 对输出分布的影响。
softmax之温度系数_第2张图片
不同的曲线代表不同类别上的概率输出,同样 T = 1 T=1 T=1 时代表传统的 softmax,在 时,分布逐渐极端化,最终等价于 argmax,在 T > 2 T>2 T>2 时,分布逐渐趋于均匀分布,10 个类别的概率都趋近于1/10。

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

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

我们可以轻松地推导出 趋于无穷大时,分布将趋于均匀分布,此时信息熵趋于最大
softmax之温度系数_第3张图片
而当 T T T 趋于 0 时,正确类别的概率接近 1,softmax 的效果逼近 argmax
在这里插入图片描述
  [1].深度学习高温蒸馏:Softmax With Temperature

你可能感兴趣的:(机器学习,人工智能,python,温度系数,softmax)