熵、信息熵、交叉熵详解

目录

  • 0 前言
  • 1 熵
    • 1.1 自信息和熵
    • 1.2 熵编码
    • 1.3 联合熵和条件熵
  • 2 互信息
  • 3 交叉熵

0 前言

信息论( Information Theory) 是数学、 物理、 统计、 计算机科学等多个学科的交叉领域。 信息论是由克劳德· 香农最早提出的, 主要研究信息的量化、存储和通信等方法.这里,“信息” 是指一组消息的集合。 假设在一个噪声通道上发送消息, 我们需要考虑如何对每一个信息进行编码、 传输以及解码, 使得接收者可以尽可能准确地重构出消息。

在机器学习相关领域, 信息论也有着大量的应用,比如特征抽取、 统计推断、自然语言处理等。

1 熵

熵( Entropy) 最早是物理学的概念, 用于表示一个热力学系统的无序程度。在信息论中, 熵用来衡量一个随机事件的不确定性。

1.1 自信息和熵

==自信息( Self Information) ==表示一个随机事件所包含的信息量。 一个随机
事件发生的概率越高, 其自信息越低. 如果一个事件必然发生, 其自信息为0。

对于一个随机变量 X X X( 取值集合为 χ \chi χ, 概率分布为 p ( x ) p(x) p(x), x ∈ χ x\in\chi xχ), 当 X = x X=x X=x时的自信息 I ( x ) I(x) I(x)定义为:

I ( x ) = − log ⁡ p ( x ) I(x)=-\log p(x) I(x)=logp(x)

在自信息的定义中, 对数的底可以使用 2、 自然常数 或是 10。当底为 2 时,自信息的单位为bit;当底为时, 自信息的单位为nat。

对于分布为 p ( x ) p(x) p(x)的随机变量SXS, 其自信息的数学期望 E X [ I ( X ) ] E_X[I(X)] EX[I(X)], 也就是X的熵,记作 H ( X ) H(X) H(X):

H ( x ) = E x [ I ( X ) ] = E X [ − log ⁡ p ( x ) ] = − ∑ x ∈ χ p ( x ) log ⁡ p ( x ) \begin{aligned} H(x)&=E_x[I(X)] \\ &=E_X[-\log p(x)]\\ &=-\sum_{x\in\chi}p(x)\log p(x) \end{aligned} H(x)=Ex[I(X)]=EX[logp(x)]=xχp(x)logp(x)

其中,当 p ( x i ) = 0 p(x_i)=0 p(xi)=0时,定义 0 log ⁡ 0 = 0 0\log 0 = 0 0log0=0,因为 lim ⁡ p → 0 + p log ⁡ p = 0 \lim_{p\rightarrow0^{+}}p\log p = 0 limp0+plogp=0

熵越高, 则随机变量的信息越多; 熵越低, 则随机变量的信息越少。 如果变量
X X X 当且仅当在 x x x时, p ( X = x ) = 1 p(X=x)=1 p(X=x)=1, 则熵为 0. 也就是说, 对于一个确定的信息, 其熵为0, 信息量也为0。 如果其概率分布为一个均匀分布, 则熵最大。

  • 假设随机变量 X X X的概率分布为 P ( x 1 ) = 1 , p ( x o t h e r ) = 0 P(x_1)=1, p(x_{other})=0 P(x1)=1,p(xother)=0
  • 假设随机变量 Y Y Y的概率分布为 P ( y 1 ) = 0.5 , p ( y 2 ) = p ( y 3 ) = 0.25 P(y_1)=0.5, p(y_2)=p(y_3)=0.25 P(y1)=0.5,p(y2)=p(y3)=0.25 p ( y o t h e r ) = 0 p(y_{other})=0 p(yother)=0
  • 假设随机变量 Z Z Z的概率分布为 P ( z 1 ) = p ( z 2 ) = p ( z 3 ) = p ( z 4 ) = 0.25 P(z_1)=p(z_2)=p(z_3)=p(z_4)=0.25 P(z1)=p(z2)=p(z3)=p(z4)=0.25 p ( z o t h e r ) = 0 p(z_{other})=0 p(zother)=0

对随机变量 X X X来说,只有一种取值可能, X X X是一个确定事件,熵最小为0。
对随机变量 Y Y Y来说,一共有三种取值可能,不是一个均匀分布,熵为1.5。
对随机变量 Z Z Z来说,一共有四种可能,每种可能的概率一样,是均匀分布,熵为2,此时的熵是所有共有四种可能取值变量的熵中的最大值。

1.2 熵编码

信息论的研究目标之一是如何用最少的编码表示传递信息. 假设我们要传递一段文本信息, 这段文本中包含的符号都来自于一个字母表 , 我们就需要对字母表中的每个符号进行编码. 以二进制编码为例, 我们常用的ASCII码就是用固定的 8bits 来编码每个字母. 但这种固定长度的编码方案不是最优的. 一种高效的编码原则是字母的出现概率越高, 其编码长度越短. 比如对字母 , , 分别编码为0, 10, 110。

给定一串要传输的文本信息, 其中字母 x x x的出现概率为 p ( x ) p(x) p(x), 其最佳编码长度为 − log ⁡ 2 p ( x ) -\log_2p(x) log2p(x), 整段文本的平均编码长度为 − ∑ x p ( x ) log ⁡ 2 p ( x ) = H ( X ) -\sum\limits_xp(x)\log_2p(x)=H(X) xp(x)log2p(x)=H(X), 即底为 2的熵。

在对分布 p ( x ) p(x) p(x)的符号进行编码时, 熵 H ( p ) H(p) H(p)也是理论上最优的平均编码长度, 这种编码方式称为熵编码( Entropy Encoding)

由于每个符号的自信息通常都不是整数, 因此在实际编码中很难达到理论上的最优值。霍夫曼编码( Huffman Coding) 和算术编码( Arithmetic Coding)是两种最常见的熵编码技术。

1.3 联合熵和条件熵

对于两个离散随机变量X和Y, 假设X取值集合为 X \mathcal{X} X;Y取值集合为 Y \mathcal{Y} Y, 其联合概率分布满足为 p ( x , y ) p(x,y) p(x,y), 则X和Y的联合熵为:

H ( X , Y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( x , y ) H(X,Y)=-\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)\log p(x,y) H(X,Y)=xXyYp(x,y)logp(x,y)

X和Y的条件熵为:

H ( X ∣ Y ) = ∑ y ∈ Y p ( y ) H ( X ∣ Y = y ) = − ∑ y ∈ Y p ( y ) ∑ x ∈ X p ( x ∣ y ) l o g p ( x ∣ y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( x ∣ y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( x , y ) p ( y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( x , y ) − [ − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( y ) ] = H ( X , Y ) − [ − log ⁡ p ( y ) ∑ x ∈ X ∑ y ∈ Y p ( x , y ) ] = H ( X , Y ) − [ − log ⁡ p ( y ) ∑ y ∈ Y p ( y ) ] = H ( X , Y ) − H ( Y ) \begin{aligned} H(X|Y)&=\sum_{y\in\mathcal{Y}}p(y)H(X|Y=y)\\ &=-\sum_{y\in\mathcal{Y}}p(y)\sum_{x\in\mathcal{X}}p(x|y)logp(x|y)\\ &=-\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)\log p(x|y)\\ &=-\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)\log \frac{p(x,y)}{p(y)}\\ &=-\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)\log p(x,y)-[-\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)\log p(y)]\\ &=H(X,Y)-[-\log p(y)\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)]\\ &=H(X,Y)-[-\log p(y)\sum_{y\in\mathcal{Y}}p(y)]\\ &=H(X,Y)-H(Y) \end{aligned} H(XY)=yYp(y)H(XY=y)=yYp(y)xXp(xy)logp(xy)=xXyYp(x,y)logp(xy)=xXyYp(x,y)logp(y)p(x,y)=xXyYp(x,y)logp(x,y)[xXyYp(x,y)logp(y)]=H(X,Y)[logp(y)xXyYp(x,y)]=H(X,Y)[logp(y)yYp(y)]=H(X,Y)H(Y)

2 互信息

==互信息(Mutual Information)==是衡量已知一个变量时, 另一个变量不确定性的减少程度. 两个离散随机变量X和Y的互信息定义为:

I ( X ; Y ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( x , y ) p ( x ) p ( y ) I(X;Y)=\sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}p(x,y)\log\frac{p(x,y)}{p(x)p(y)} I(X;Y)=xXyYp(x,y)logp(x)p(y)p(x,y)

互信息的一个性质为:

I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) = H ( Y ) − H ( Y ∣ X ) I(X;Y)=H(X)-H(X|Y)=H(Y)-H(Y|X) I(X;Y)=H(X)H(XY)=H(Y)H(YX)

如果变量X和Y相互独立,则他们的互信息为0。

3 交叉熵

对于分布为 p ( x ) p(x) p(x)的随机变量, 熵 H ( p ) H(p) H(p)表示其最优编码长度。 交叉熵( Cross
Entropy)是按照概率分布 q q q的最优编码对真实分布为 p p p的信息进行编码的长度,
定义为:

H ( p , q ) = E p [ − log ⁡ q ( x ) ] = − ∑ x p ( x ) log ⁡ q ( x ) \begin{aligned} H(p,q)&=E_p[-\log q(x)]\\ &=-\sum_xp(x)\log q(x) \end{aligned} H(p,q)=Ep[logq(x)]=xp(x)logq(x)

在给定 p p p的情况下,如果 q q q p p p越接近,交叉熵越小;如果 q q q p p p越远,交叉熵越大。在实际应用中,例如在多分类任务模型的学习中,p为标签的one-hot编码,而q为模型经过softmax层的输出,代表每一类分类的概率。

例如一个手写数字识别,一共10类:

  • 假设softmax的输出层为【0.01,0.22,0.64,0.03,0.01,0.02,0.03,0.04】

若分类正确

  • 标签为【0,0,1,0,0,0,0,0,0,0】
    则交叉熵损失为 − 1 × log ⁡ 0.64 -1\times\log 0.64 1×log0.64

若分类错误时:

  • 标签为【1,0,0,0,0,0,0,0,0,0】
  • 则交叉熵损失为 − 1 × log ⁡ 0.01 -1\times\log 0.01 1×log0.01

此时的损失远远大于分类正确的损失,所以在训练的时候最小化交叉熵损失。

你可能感兴趣的:(NLP算法详解,python,机器学习,人工智能,信息熵,算法)