作者简介:SIGAI人工智能平台
PDF下载地址:http://www.tensorinfinity.com/paper_98.html
其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。
熵、交叉熵是机器学习中常用的概念,也是信息论中的重要概念。它应用广泛,尤其是在深度学习中。本文对交叉熵进行系统的、深入浅出的介绍。文章中的内容在已经出版的《机器学习与应用》(清华大学出版社,雷明著)中有详细的介绍。
熵
在介绍交叉熵之前首先介绍熵(entropy)的概念。熵是信息论中最基本、最核心的一个概念,它衡量了一个概率分布的随机程度,或者说包含的信息量的大小。
首先来看离散型随机变量。考虑随机变量取某一个特定值时包含的信息量的大小。假设随机变量取值为 x x x,对应的概率为 p ( x ) p(x) p(x)。直观来看,取这个值的可能性越小,而它又发生了,则包含的信息量就越大。因此如果定义一个函数 h ( x ) h(x) h(x)来描述随机变量取值为的信息量的大小的话,则 h ( x ) h(x) h(x)应该是 p ( x ) p(x) p(x)的单调减函数。例如,一年之内人类登陆火星,包含的信息量显然比广州明天要下雨大,因为前者的概率明显小于后者。
满足单调递减要求的函数太多了,我们该选择哪个函数呢?接着考虑。假设有两个相互独立的随机变量,它们的取值分别为和,取该值的概率为 p ( x ) p(x) p(x)和 p ( y ) p(y) p(y)。根据随机变量的独立性,它们的联合概率为
p ( x , y ) = p ( x ) p ( y ) p(x,y)=p(x)p(y) p(x,y)=p(x)p(y)
由于这两个随机变量是相互独立的,因此它们各自取某一值时包含的信息量应该是两个随机变量分别取这些值的时候包含的信息量之和
h ( x , y ) = h ( x ) + h ( y ) h(x,y)=h(x)+h(y) h(x,y)=h(x)+h(y)
这要求 h ( x ) h(x) h(x)能把 p ( x ) p(x) p(x)的乘法转化为加法,在数学上,满足此要求的是对数函数。因此,可以把信息量定义为
h ( x ) = − log p ( x ) h(x)=-\log p(x) h(x)=−logp(x)
这个对数的底数是多少并没有太大关系,根据换底公式,最后计算出来的结果就差了一个倍数,信息论中通常以 2 2 2为底,在机器学习中通常以 e e e为底,在后面的计算中为了方便起见我们用 10 10 10为底。需要强调的对数函数前面加上了负号,这是因为对数函数是增函数,而我们要求 h ( x ) h(x) h(x)是 p ( x ) p(x) p(x)的减函数。另外,由于 0 ≤ p ( x ) ≤ 1 0\leq p(x)\leq 1 0≤p(x)≤1,因此 log p ( x ) < 0 \log p(x)< 0 logp(x)<0,加上负号之后刚好可以保证这个信息量为正。
上面只是考虑了随机变量取某一个值时包含的信息量,而随机变量的取值是随机的,有各种可能,那又怎么计算它取所有各种取值时所包含的信息量呢?既然随机变量取值有各种情况,而且取每个值有一个概率,那我们计算它取各个值时的信息量的均值即数学期望即可,这个信息量的均值,就是熵。
对于离散型随机变量,熵定义为
H ( p ) = E x [ − log p ( x ) ] = − ∑ i p i log p i \begin{aligned} H(p)&=E_{x}\left [ -\log p(x) \right ] \\ &= -\sum_{i}p_{i}\log p_{i} \end{aligned} H(p)=Ex[−logp(x)]=−i∑pilogpi
这里约定 p i = p ( x i ) pi =p(x_i) pi=p(xi)。
下面用实际例子来说明离散型随机变量熵的计算。对于下表定义的概率分布
x | 1 | 2 | 3 | 4 |
---|---|---|---|---|
p | 0.25 | 1.25 | 0.25 | 1.25 |
它的熵为
H ( p ) = − 0.25 × log 0.25 − 0.25 × log 0.25 − 0.25 × log 0.25 − 0.25 × log 0.25 = log 4 = 0.6 \begin{aligned} H(p) &=-0.25\times \log 0.25-0.25\times \log 0.25-0.25\times \log 0.25-0.25\times \log 0.25 \\ &= \log 4\\ &=0.6 \end{aligned} H(p)=−0.25×log0.25−0.25×log0.25−0.25×log0.25−0.25×log0.25=log4=0.6
再来看另外一个概率分布
x | 1 | 2 | 3 | 4 |
---|---|---|---|---|
p | 0.9 | 0.05 | 0.02 | 0.03 |
它的熵为
H ( p ) = − 0.9 × log 0.9 − 0.05 × log 0.05 − 0.02 × log 0.02 − 0.03 × log 0.03 = 0.041 + 0.065 + 0.034 + 0.046 = 0.186 \begin{aligned} H(p) &=-0.9\times \log 0.9-0.05\times \log 0.05-0.02\times \log 0.02-0.03\times \log 0.03 \\ &= 0.041+0.065+0.034+0.046\\ &=0.186 \end{aligned} H(p)=−0.9×log0.9−0.05×log0.05−0.02×log0.02−0.03×log0.03=0.041+0.065+0.034+0.046=0.186
从上面两个结果可以看出一个现象。第一个概率分布非常均匀,随机变量取每个值的概率相等;第二个不均匀,以极大的概率取值为 1 1 1,取值为 2 − 4 2-4 2−4的概率非常小。第一个概率分布的熵明显的大于第二个概率分布,即随机变量越均匀(随机),熵越大,反之越小。
下面考虑连续型随机变量。对于连续型随机变量,熵(微分熵)定义为
H ( p ) = − ∫ − ∞ + ∞ p ( x ) log p ( x ) d x H(p)=-\int_{-\infty }^{+\infty }p(x)\log p(x)dx H(p)=−∫−∞+∞p(x)logp(x)dx
这里将求和换成了广义积分。
根据熵的定义,随机变量取各个值的概率相等(均匀分布)时有极大值,在取某一个值的概率为 1 1 1,取其他所有值的概率为 0 0 0时有极小值(此时随机变量退化成某一必然事件或者说确定的变量)。下面证明这一结论。
对于离散型随机变量,熵定义的是如下函数
H ( p ) = − ∑ i = 1 n x i log x i H(p)=-\sum_{i=1}^{n}x_{i}\log x_{i} H(p)=−i=1∑nxilogxi
其中 x i x_i xi 为随机变量取第 i i i个值的概率。约束条件为
∑ i = 1 n x i = 1 x i ≥ 0 \begin{aligned} \sum_{i=1}^{n}x_{i}=1 \\ x_{i}\geq 0 \end{aligned} i=1∑nxi=1xi≥0
由于对数函数的定义域是非负的,因此可以去掉不等式约束。构造拉格朗日乘子函数
L ( x , λ ) = − ∑ i = 1 n x i log x i + λ ( ∑ i = 1 n x i − 1 ) L(x,\lambda )=-\sum_{i=1}^{n}x_{i}\log x_{i}+\lambda \left ( \sum_{i=1}^{n}x_{i}-1 \right ) L(x,λ)=−i=1∑nxilogxi+λ(i=1∑nxi−1)
对 x i x_i xi求偏导数并令其为 0 0 0,可以得到
∂ L ∂ x i = − log x i − 1 + λ = 0 \frac{\partial L}{\partial x_{i}}=-\log x_{i}-1+\lambda =0 ∂xi∂L=−logxi−1+λ=0
这意味着在极值点处所有的 x i x_i xi必须相等。对 λ \lambda λ求偏导数并令其为 0 0 0,可以得到
∑ i = 1 n x i = 1 \sum_{i=1}^{n}x_{i}=1 i=1∑nxi=1
因此当 x i = 1 / n x_i = 1/n xi=1/n时函数取得极值。此时熵的值为
H ( p ) = − ∑ i = 1 n 1 n log 1 n = log n \begin{aligned} H(p)&= -\sum_{i=1}^{n}\frac{1}{n}\log\frac{1}{n}\\ &= \log n \end{aligned} H(p)=−i=1∑nn1logn1=logn
进一步的可以证明该值是极大值。熵的二阶偏导数为
∂ 2 H ∂ x i 2 = − 1 / x i ∂ 2 H ∂ x i ∂ x j = 0 , j ≠ i \begin{aligned} \frac{\partial ^{2}H}{\partial x_{i}^{2}} &= -1/x_{i}\\ \frac{\partial ^{2}H}{\partial x_{i}\partial x_{j}}&= 0, j\neq i \end{aligned} ∂xi2∂2H∂xi∂xj∂2H=−1/xi=0,j