交叉熵 与 KL散度(两者相一致)
一、背景
1.统计学习的方法
人们对人工智能所研究的东西的描述有很多版本。
其中《统计学习方法》一书中给出了一种说法是:
“统计学习的方法是基于数据构建概率统计模型从而对数据进行预测与分析”
所以,现阶段,我们想要通过人工智能解决问题,核心就是构建概率统计模型
2. 训练模型的策略
统计学习方法的三要素为模型、策略、算法,分别对应着模型的假设空间,模型选择的准则,模型学习的算法。
这里,策略也就是模型选择的准则 更多的是指判断模型好坏的标准,这种会具体体现为判断的指标。
比如,在线性回归模型中,
- 如果我们将“预测结果和真实值之间的差异大小”当作评判一个模型的好坏标准(差异越小,模型越好),并量化差异大小为Mse均分方差,那么在实际应用中:选择模型时,我们会使用Mse更小的模型(我们认为它更好);优化模型时,我们希望Mse越小越好。
- 如果我们再考虑到模型的泛化能力,防治过拟合,把“预测结果和真实值之间的差异小且模型复杂度也低”作为判断模型好坏的准则,并将前半部分量化为指标Mse,后半部分的指标量化“线性回归模型的系数的L2范数”,我们将两个指标加权相加,便得到了Ridge岭回归的损失函数。这也是Ridge优化的准则
上述事例中,我们判断模型好坏的依据,主要量化“预测结果和真实值之间的差异大小”为Mse。现在我们换一个指标。
统计学习的实质是构建概率统计模型,我们是不是可以定义一个指标来直接衡量我们构建的模型和真实模型之间的差异呢?当然是可以的。这个指标也是今天的主角:交叉熵
二、信息熵
1.信息熵的背景
我们知道,概率是对可能性的量化。而对系统的可能性,我们还有另一种表示方式,叫做熵。
熵本是物理学中的概念,后来由香农推广到信息论中(香农是信息论的奠基人之一),提出了“信息熵”的概念,并量化了该指标。
2.信息熵的定义
我们从“付出多少代价能准确描述一个信息”的角度去考虑一个信息包含多少信息量。在理论中,能准确描述信息的不是自然语言,而是编码。
将确定的信息视为一个基准,然后将一条含有多种可能(含义)的信息划分为n条准确的信息,每条信息出现的次数会服从一定的概率分布。
然后对这n条确定的信息分别进行编码,每条信息编码的长度是跟它的概率分布也密切相关。
最后,我们将信息的最小平均编码长度称为信息熵,用来衡量信息量。
这里,“平均”是反应总体的指标,“最小”反映了减少代价的基本需求,这个定义还是很好理解的
3.信息熵的量化
用二进制对信息表示的含义进行编码,对于有N种等可能状态的信息,其编码的最小长度为 log2N=−log21N=−log2Plog_2N = -log_2\cfrac{1}{N}=-log_2Plog2N=−log2N1=−log2P,其中P=1NP=\cfrac{1}{N}P=N1
将确定信息的最小编码长度与概率分布结合起来,得到编码长度的期望即为信息熵 Entropy=−∑iP(x)log2P(x)Entropy=-\displaystyle\sum_i{P(x)log_2P(x)}Entropy=−i∑P(x)log2P(x), 其中P(x)P(x)P(x) 是信息的在xxx的状态下出现的概率
举例说明:
我们假设信息1包含A,B,C,D四种含义,A出现的概率为12\frac{1}{2}21,B出现的概率为15\frac{1}{5}51,C出现的概率为15\frac{1}{5}51
,D出现的概率为110\frac{1}{10}101
那么,我们将信息一含义概率分布的划分为等可能的10份,其中A占5分,其编码长度为 log25=−log215=−log2P(A)log_25 = -log_2\cfrac{1}{5}=-log_2P(A)log25=−log251=−log2P(A)
乘以概率权重得 −15log215-\cfrac{1}{5}log_2\cfrac{1}{5}−51log251,
三、概率统计模型与实际的差异
我们用信息熵作为指标体现理论模型与实际的差异。
假定模型的理论分布(真实分布)为 p(x)p(x)p(x) ,我们构建出的分布服从 q(x)q(x)q(x) 。对于状态 xxx , 理论上的最小编码为−log2p(x)-log_2p(x)−log2p(x) ,我们拟合得到的编码长度为 −log2q(x)-log_2q(x)−log2q(x) 。
我们对其求期望(这里编码依然服从理论分布,因为我们拟合得到的分布没有实际的意义,只有计算和预测的价值),得到交叉熵−∑ilog2q(x)-\displaystyle\sum_i{log_2q(x)}−i∑log2q(x)
继续,还是对于状态xxx,其自身最短编码长度与拟合最短编码长度为−log2q(x)−(−log2p(x))=−log2q(x)p(x)=log2p(x)q(x)-log_2q(x)-(-log_2p(x))=-log_2\cfrac{q(x)}{p(x)}=log_2\cfrac{p(x)}{q(x)}−log2q(x)−(−log2p(x))=−log2p(x)q(x)=log2q(x)p(x)
对其求期望,得到KL散度 −∑ilog2q(x)p(x)-\displaystyle\sum_i{log_2\cfrac{q(x)}{p(x)}}−i∑log2p(x)q(x),表示两种概率分布间的差异。
四、采用KL散度做损失函数的优点
前面我们提到,根据策略量化出的指标可以作为优化模型的依据,所以我们经常会采用交叉熵作为损失函数。
在解决分类问题时,把交叉熵作为损失函数,可以解决梯度下降算法优化以sigmoid函数做损失函数的模型时遇到的梯度消失的问题,这是由其数学表达式决定的
值得注意的是,为了适配线性模型,我们有时将公式中的log2log2log2置换为lnlnln。这里可以理解为换了一种编码方式,虽然它并严格符合信息熵的定义,但是它依然可以表示信息熵,且对模型优化没有影响。