信息论
“信息”是指一组用来传递的消息的集合。
假设在一个噪声通道上发送消息,我们要考虑如何对每一个信息进行编码、传输以及解码,使得接收者可以尽可能准确地重构出消息。
信息论将信息的传递看作一种统计现象,也就是将这个过程看作是概率,然后用概率的方式来解释它。总体来说,从统计现象考虑,信息传递分为两个方面:
- 信息传输
- 信息压缩(信息编码)
熵(Entropy)
在信息论中,熵用来衡量一个随机事件的不确定性。随机事件的熵越高,不确定性越高,则随机变量的信息越多;熵越低,不确定性越低,则随机变量的信息越少。
对于如何衡量信息量,需要引入自信息(Self Information),自信息是指一个随机事件包含的信息量。对于一个随机变量
X
X
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)
如果随机变量为
x
x
x时的概率
p
(
x
)
p(x)
p(x)越小,对应
−
log
p
(
x
)
-\log\ p(x)
−log p(x)越大,对应信息量越大。直观上来看,如果一个事件经常发生,那么它对应的信息量就会很小,反之如果一个事件偶尔发生,对应的信息量就会很大。
这里之所以将自信息函数定义为对数函数形式,是为了满足信息的可加性。例如对于下面假设独立从分布为
p
p
p的分布中抽取的两个信息:
I
(
x
)
=
−
log
p
(
x
)
I
(
x
′
)
=
−
log
p
(
x
′
)
\begin{aligned} I(x)&=-\log p(x)\\ I(x')&=-\log p(x') \end{aligned}
I(x)I(x′)=−logp(x)=−logp(x′)
二者的信息量可加,合在一起的信息量:
I
(
x
,
x
′
)
=
−
(
log
p
(
x
)
+
log
p
(
x
′
)
)
=
−
log
(
p
(
x
)
⋅
p
(
x
′
)
)
\begin{aligned} I(x,x') &=-(\log p(x)+\log p(x'))\\ &=-\log (p(x)\cdot p(x')) \end{aligned}
I(x,x′)=−(logp(x)+logp(x′))=−log(p(x)⋅p(x′))
变形后可见,两个随机变量的自信息和等价于两个随机变量的联合概率的自信息。
有了自信息概念之后,就能给出熵的定义:随机变量
X
X
X的自信息量的数学期望。
H
(
x
)
=
E
X
[
I
(
x
)
]
=
E
X
[
−
log
p
(
x
)
]
=
−
∑
x
∈
X
p
(
x
)
log
p
(
x
)
\begin{aligned} H(x) &=\mathbb{E}_X[I(x)]\\ &=\mathbb{E}_X[-\log p(x)]\\ &=-\sum_{x\in\mathcal{X}}p(x)\log p(x) \end{aligned}
H(x)=EX[I(x)]=EX[−logp(x)]=−x∈X∑p(x)logp(x)
上面给出的是假设随机变量
X
X
X为离散分布。
下面给出一个例子:
假设有两个分布分别为分布P和分布Q。分布P取第一种可能性的概率为1,第二种可能性为0,对应的熵 H ( P ) = − 1 ⋅ log 1 − 0 ⋅ log 0 = 0 H(P)=-1\cdot\log 1-0\cdot\log 0=0 H(P)=−1⋅log1−0⋅log0=0( log 0 \log0 log0不存在,这里假设等于0),也就是完全确定的;分布Q取两种可能性的概率都为0.5,熵 H ( Q ) = − 0.5 ⋅ log 0.5 − 0.5 ⋅ log 0.5 = − log 0.5 H(Q)=-0.5\cdot\log0.5-0.5\cdot\log0.5=-\log0.5 H(Q)=−0.5⋅log0.5−0.5⋅log0.5=−log0.5 。事实上,如果概率分布越均衡,熵的概率就会越大。
熵编码(Entropy Encoding)
在对分布为
p
(
y
)
p(y)
p(y)的一组符号进行编码时,熵
H
(
p
)
H(p)
H(p)是理论上最优的平均编码长度,利用熵来确定每个编码的长度,从而最终达到最理想的平均编码长度,这种编码方式称为熵编码。
熵编码的大致思想是根据一组符号中某个符号出现的概率,概率越高对应的编码长度越短,反之越长。这样最后整体的编码长度就会尽可能短。也就是说,如果符号的信息量越小,编码长度越短,反之越长。假设有
a
、
b
、
c
a、b、c
a、b、c三个字符,对应出现的概率为
p
(
a
)
,
p
(
b
)
,
p
(
c
)
p(a),p(b),p(c)
p(a),p(b),p(c),假设编码长度等于其信息量大小,则整个符号组的平均编码长度为
−
p
(
a
)
log
p
(
a
)
−
p
(
b
)
log
p
(
b
)
−
p
(
c
)
log
p
(
c
)
=
H
(
p
)
-p(a)\log\ p(a)-p(b)\log\ p(b)-p(c)\log\ p(c)=H(p)
−p(a)log p(a)−p(b)log p(b)−p(c)log p(c)=H(p)
交叉熵
对一组符号进行熵编码时,在不知道这一组符号的真实分布的情况下,可以拟定一个概率分布,计算概率分布的熵编码,这就是交叉熵。也就是说,交叉熵时按照概率分布q的最优编码对真实分布为p的信息进行编码的长度。
H
(
p
,
q
)
=
E
p
[
−
log
q
(
x
)
]
=
−
∑
x
p
(
x
)
log
q
(
x
)
\begin{aligned} H(p,q) &=\mathbb{E}_p[-\log q(x)]\\ &=-\sum_{x}p(x)\log q(x) \end{aligned}
H(p,q)=Ep[−logq(x)]=−x∑p(x)logq(x)
- 在给定q的情况下,如果p和q越接近,交叉熵越小
- 如果p和q越远,交叉熵就越大
因此可以通过对比交叉熵来衡量符号集不同分布之间的差异
KL散度(Kullback-Leibler Divergence)
除了对比交叉熵之外,更标准的方法是通过KL散度来衡量上面说的这中差异。
KL散度是用概率分布q来近似p时所造成的信息损失量。说人话就是符号集在概率分布q下的交叉熵和实际分布p下的最优编码长度(也就是p下的熵编码)的差异。
K
L
(
p
,
q
)
=
H
(
p
,
q
)
−
H
(
p
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
+
∑
x
p
(
x
)
log
p
(
x
)
=
−
∑
x
p
(
x
)
(
log
q
(
x
)
−
log
p
(
x
)
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
p
(
x
)
=
∑
x
p
(
x
)
log
p
(
x
)
q
(
x
)
\begin{aligned} KL(p,q) &=H(p,q)-H(p)\\ &=-\sum_{x}p(x)\log q(x)+\sum_{x}p(x)\log p(x)\\ &=-\sum_{x}p(x)(\log q(x)-\log p(x))\\ &=-\sum_x p(x)\log\frac{q(x)}{p(x)}\\ &=\sum_x p(x)\log\frac{p(x)}{q(x)} \end{aligned}
KL(p,q)=H(p,q)−H(p)=−x∑p(x)logq(x)+x∑p(x)logp(x)=−x∑p(x)(logq(x)−logp(x))=−x∑p(x)logp(x)q(x)=x∑p(x)logq(x)p(x)
对于上式,p和q若相等,则
log
p
(
x
)
q
(
x
)
=
0
\log\frac{p(x)}{q(x)}=0
logq(x)p(x)=0,KL散度为0;同样,p和q相差越大,KL散度越大
负对数似然
在机器学习中,可以用KL散度来衡量预测分布
p
θ
(
y
∣
x
)
p_\theta(y\mid x)
pθ(y∣x)与真实分布
p
r
(
y
∣
x
)
p_r(y\mid x)
pr(y∣x)之间的差异。对于分类问题来说,可以用这种方法取代0-1损失函数计算模型损失。
K
L
(
p
r
(
y
∣
x
)
,
p
θ
(
y
∣
x
)
)
=
∑
y
p
r
(
y
∣
x
)
log
p
r
(
y
∣
x
)
p
θ
(
y
∣
x
)
KL(p_r(y\mid x), p_\theta(y\mid x))=\sum_yp_r(y\mid x)\log\frac{p_r(y\mid x)}{p_\theta(y\mid x)}
KL(pr(y∣x),pθ(y∣x))=y∑pr(y∣x)logpθ(y∣x)pr(y∣x)
之后进行优化时,由于优化对象是参数
θ
\theta
θ,与r无关,因此可以将无关项简化:
K
L
(
p
r
(
y
∣
x
)
,
p
θ
(
y
∣
x
)
)
∝
∑
y
p
r
(
y
∣
x
)
log
p
θ
(
y
∣
x
)
KL(p_r(y\mid x), p_\theta(y\mid x))\propto\sum_yp_r(y\mid x)\log p_\theta(y\mid x)
KL(pr(y∣x),pθ(y∣x))∝y∑pr(y∣x)logpθ(y∣x)
在机器学习中,上式被称为交叉熵损失。
由于
p
r
(
y
∣
x
)
p_r(y\mid x)
pr(y∣x)通常为One-Hot向量,因此通常最后化简后的损失函数就成了:
L
(
p
θ
)
=
−
log
p
θ
(
y
∗
∣
x
)
L(p_\theta)=-\log p_\theta(y^*\mid x)
L(pθ)=−logpθ(y∗∣x)
这个就是负对数似然。在机器学习中,优化参数
θ
\theta
θ就相当于最小化交叉熵、KL散度,最大化负对数似然