熵与交叉熵

熵描述的是:
一个概率分布本身有多乱、多不确定。

定义是:

H(p)=ipilogpiH(p) = -\sum_i p_i \log p_i

这里 pip_i 是各类别的概率。

越不确定,熵越大;越确定,熵越小。


交叉熵描述的是:
你预测的分布 pp,和真实目标分布 qq 差多远。

常写成:

H(q,p)=iqilogpiH(q, p) = -\sum_i q_i \log p_i

注意这里有两个分布:

  • qq:真实分布
  • pp:预测分布

举例

分类任务里,真实标签通常是 one-hot。

比如三分类里,真实类别是第 2 类:

q=[0,1,0]q = [0,1,0]

模型预测:

p=[0.1,0.7,0.2]p = [0.1,0.7,0.2]

那交叉熵就是:

log0.7-\log 0.7

因为真实类是第 2 类,所以只看模型给真实类分了多少概率。

结论

  • 给真实类概率越大,交叉熵越小
  • 给真实类概率越小,交叉熵越大

所以分类训练里最小化交叉熵,本质上就是:让模型把更高概率分给正确类别

衡量一个分布有多不确定交叉熵衡量一个分布和另一个目标分布有多不一致

熵最小化

熵最小化(entropy loss minimization),就是:通过最小化预测熵,让模型对样本的预测更“自信”。

对目标域样本 xtx_t,分类器输出类别概率 p(yxt)p(y|x_t)
熵一般写成:

H(p)=cpclogpcH(p) = - \sum_{c} p_c \log p_c

entropy minimization,就是最小化这个量:

Lent=cp(y=cxt)logp(y=cxt)\mathcal{L}_{ent} = - \sum_{c} p(y=c|x_t)\log p(y=c|x_t)

目标是让分布变尖锐,而不是平的。

domain adaptation 中的熵最小化

因为目标域没有标签,不能直接算普通的监督交叉熵。但你又希望目标域特征能形成清晰的类别簇。于是就用这个思路:

  • 如果一个目标样本已经靠近某个类别簇
  • 那就鼓励模型更坚定地把它判成那一类
  • 久而久之,目标域特征会更聚集、更可分

entropy minimization 本质上是在推动目标域样本:远离模糊区域,靠向某个类别簇。

注意

entropy minimization 的前提是:模型初始预测不能太差,不然“让它更自信”可能是在放大错误。

  • cross-entropy loss用于有标签数据,目标是让预测接近真标签。
  • entropy minimization用于无标签数据,没有真实标签,只能要求模型“别犹豫,要自信一点”。