创建时间:2024-10-16
首发时间:2024-10-24
最后编辑时间:2024-10-24
作者:Geeker_LStar
FIRST OF ALL!!! 2024.10.24!!
1024 快乐!!!
你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~
我是 Geeker_LStar,一名高一学生,热爱计算机和数学,我们一起加油~!
⭐(●’◡’●) ⭐
hi 你好呀!!前两篇把隐马尔可夫模型 HMM 讲完了()这周在搞信息论,so entropy 启动!!
(其实,我本来只是想补一下交叉熵和 KL 散度,但是后面发现哇信息论有 (好)趣 (多)啊()so 下一篇还会写另外的一些熵((()keep follow!
话不多说,start!
文章目录
- 熵
- 自信息
- 信息熵
- 公式及意义
- 数学性质
- 非负性
- 凹性
- 为什么是这个公式?
- 相对熵(KL 散度)
- 公式及意义
- 数学性质
- 非负性
- 凸性
- 不对称性
- 交叉熵
- 公式及意义
- 在机器学习中的应用
- 二分类问题
- 多分类问题
- 数学性质
- 非负性
- 凸性
- 三者的链式法则
- 总结
熵
豪德,我不擅长开头,所以我们就直入主题吧。(教室太热了,热到我没精力搞抽象了()
要讲机器学习中的各种熵,那我们首先得了解“熵”这个概念在通用领域的含义。
熵,英文 entropy。用一句话概括,熵是体系混乱程度的度量,熵越大,说明这个体系越混乱,反之亦然。至于这个 “体系” 是什么,要看具体情境。
(如果你在 wikipedia 或百度百科上搜索熵,它们会告诉你熵是一个热力学概念。没错,熵起源于热力学,但后来被引入到了机器学习领域。)
举个例子,下图中是两个系统,左边的熵低,右边的熵高。箭头表示这个系统倾向于从有序状态(熵低)转化为无序状态(熵高),不过这就扯远了()
okay,熵这个概念理解到这就可以啦(其实如果学过高中物理/化学的话应该都知道),我们接下来看看机器学习中的熵。
自信息
well,在讲熵之前,我们需要先了解自信息的概念。
自信息,自己的信息量,说白了就是一个事件所携带的信息的多少。自信息越大,这个事件携带的信息就越多,反之就越少。
我们可以通过自信息的公式来进一步理解它:
I
(
x
i
)
=
−
log
b
P
(
x
i
)
,
b
>
1
I(x_i)=-\log_b P(x_i), \ b > 1
I(xi)=−logbP(xi), b>1
P ( x i ) P(x_i) P(xi) 表示事件 x i x_i xi 发生的概率, 0 ≤ P ( x i ) ≤ 1 0 \le P(x_i) \le 1 0≤P(xi)≤1。
从数学上来讲,底数大于 1 的对数函数是一个单调递增的凸函数,那么在前面取负号,整个函数就变成了一个单调递减的凹函数。
(插话:通常而言,这里的 log \log log 会以自然对数 e e e 为底,也就是 ln \ln ln. 以其它的数为底也可以,但是不管以什么数为底,只要这个数大于 1,就不会影响整个函数的单调性,进而也就不会影响自信息所传达的含义。
也就是说,
P
(
x
i
)
P(x_i)
P(xi) 越大,其自信息就越小;
P
(
x
i
)
P(x_i)
P(xi) 越小,其自信息就越大。
当
P
(
x
i
)
P(x_i)
P(xi) 取得最大值 1 的时候,其自信息为 0;当
P
(
x
i
)
P(x_i)
P(xi) 无限趋近于 0 的时候,其自信息无限趋近于正无穷。
嗯,所以,自信息的这个单调性表明了什么?
如果一个事情发生的概率越小,它的自信息就越大…
这貌似很合理诶~
think,如果一个事情发生的概率是 1,然后它发生了,这能给我们提供什么额外的信息吗?
好像不能。
就好像,太阳每天都从东边升起,现有的科学体系能够非常好地解释这件事,或者说这件事的发生概率为 1。那么,如果这件事发生了(显然它每天都在发生),我们能从中获得什么有用的信息吗?
obviously,不能。
但是,我们假想一下,如果,哪天太阳真从西边出来了,,,
这是不是能够带给我们非常非常非常多的信息!!(对吧,如果你喜欢科幻,你可能已经脑补出一部小说了(
所以,自信息的公式一下子就好理解了。一件发生概率很高的事情发生了,这并不会给我们提供太多新的信息,因为我们认为 ”那本来就该发生“;但是如果一件发生概率极低的时间发生了,这通常会提供非常多的信息,因为它打破了常规。
其实还有一个非常 intuition 的解释——自信息的大小反映了某件事情发生会带给人们的 “惊奇程度”。如果一件事情发生的概率很高,大家都习惯了,那么它发生就不会造成太多的惊奇,自信息就很小;反之,如果一件事情发生的概率很低,它的发生会让人们感到非常惊奇,自信息就很高。
有一句话说的很好,信息是对不确定性的消除,一件事情的不确定性越大,它的自信息就越大。
豪德,我觉得这部分已经非常清楚了!next part, start!
信息熵
oka! 信息熵,启动!
公式及意义
豪德,还是先放公式()下面这个是信息熵的公式。可以留意一下信息熵和自信息的关系()
H ( X ) = − ∑ i = 1 n P ( x i ) log P ( x i ) H(X)=-\sum_{i=1}^nP(x_i)\log P(x_i) H(X)=−i=1∑nP(xi)logP(xi)
解释一下这个公式, X X X 是某个事件所有可能取值的集合,这个集合中共有 n n n 元素; x i x_i xi 代表这个事件具体的一个取值, P ( x i ) P(x_i) P(xi) 表示取到 x i x_i xi 的概率。
比如,我们将事件 “天气” 的取值集合记为
W
e
a
t
h
e
r
=
{
s
u
n
n
y
,
r
a
i
n
y
}
Weather=\{sunny, rainy\}
Weather={sunny,rainy},其中
P
(
s
u
n
n
y
)
=
0.6
,
P
(
r
a
i
n
y
)
=
0.4
P(sunny)=0.6, P(rainy)=0.4
P(sunny)=0.6,P(rainy)=0.4,那么信息熵的计算公式就是:
H
(
W
e
a
t
h
e
r
)
=
−
(
0.4
∗
log
0.4
+
0.6
∗
log
0.6
)
H(Weather)=-(0.4*\log 0.4+0.6*\log 0.6)
H(Weather)=−(0.4∗log0.4+0.6∗log0.6)
嗯,那么,这个公式有什么含义?
这个问题可以从多个角度去解释。
首先,前面那个 P ( x i ) P(x_i) P(xi) 是什么,是事件 x i x_i xi 发生的概率对吧,最终的信息熵就是所有事件的自信息乘上它们发生的概率,再相加。
这是什么,这不就是期望嘛!
okay,理解信息熵的第一个视角出现了——对于一个有多种可能性的事件组(其实几乎所有事件组都是有多种可能的,毕竟如果不是这种,那就是这种的否定),整个事件组的信息熵就等于每一个事件的自信息的期望。
嗯,,这么说的确没什么问题,但是,最开始不是说熵衡量的是一个系统(在这里就是事件组)的混乱程度吗,可是上面的说法似乎没有体现出来这方面诶。
是的,所以,我们引入第二种理解方式——信息熵是对随机变量不确定性的量化。
这里的 “随机变量” 就对应上文中说的 “事件组”,只是换了一种更严谨的表述;“不确定性” 等价于混乱程度。
这也是最常用和最常见的一种理解方式。
展开来说,信息熵越大,说明随机变量的不确定性越高;反之亦然。
那么,什么时候信息熵最大呢,或者说,什么时候随机变量的不确定性最高呢?
这个时候就不能像自信息那样只考虑某个特定取值发生的可能性了,我们需要关注随机变量的所有可能取的值发生的可能性,这也是为什么信息熵的表达式中含有 ∑ \sum ∑。
我们考虑最简单的情形,随机变量可能的取值有两个,记作
x
1
,
x
2
x_1, x_2
x1,x2。考虑以下两种情况:
情况一,
P
(
x
1
)
=
0.9
,
P
(
x
2
)
=
0.1
P(x_1)=0.9, P(x_2)=0.1
P(x1)=0.9,P(x2)=0.1;
情况二:
P
(
x
2
)
=
0.5
,
P
(
x
2
)
=
0.5
P(x_2)=0.5, P(x_2)=0.5
P(x2)=0.5,P(x2)=0.5。
在上面两种情况中,直觉来讲,哪种情况的随机变量的不确定性更高?
很显然是情况二,对吧。在情况一中,我们有比较高的把握确定
x
1
x_1
x1 会发生,但在情况二中,我们无法对随机变量的最终取值做出任何预测。
所以,情况二的信息熵更大。
这很好验证,我们只需要分别计算:
H
(
s
i
t
u
a
t
i
o
n
1
)
=
−
(
0.9
∗
log
0.9
+
0.1
∗
log
0.1
)
H
(
s
i
t
u
a
t
i
o
n
2
)
=
−
(
0.5
∗
log
0.5
+
0.5
∗
log
0.5
)
\begin{align} H(situation1)= -(0.9*\log 0.9+0.1*\log 0.1) \\ H(situation2)=-(0.5*\log 0.5+0.5*\log 0.5) \end{align}
H(situation1)=−(0.9∗log0.9+0.1∗log0.1)H(situation2)=−(0.5∗log0.5+0.5∗log0.5)
就可以了。
最终的结果和我们的直觉是一样的,情况二的信息熵高于情况一。
okay,我们可以把上面的例子推广。
一般地,对于一个有
n
n
n 种可能取值的随机变量
X
X
X,当每种取值出现的概率都为
1
n
\frac{1}{n}
n1 时,信息熵
H
(
X
)
H(X)
H(X) 取到最大值
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
=
−
∑
i
=
1
n
1
n
log
1
n
=
−
log
1
n
-\sum_{i=1}^nP(x_i)\log P(x_i)=-\sum_{i=1}^n \frac{1}{n}\log \frac{1}{n}=-\log \frac{1}{n}
−∑i=1nP(xi)logP(xi)=−∑i=1nn1logn1=−logn1;每种取值的出现概率越相似,信息熵越大,反之越小;当其中一种取值出现的概率为 1 而剩下取值的出现概率为 0 时,信息熵取到最小值 0.
这是符合直觉的。但更进一步,这在数学上为什么正确,我会在后面(数学性质部分)给出详细的解释。简单来说,我们可以证明信息熵的表达式是一个凹函数,在此基础上求解全局最小值即可。
记住,信息熵衡量的是整个随机变量的不确定性(而不针对随机变量的某个特定取值),随机变量各个取值发生的概率越相似,不确定性越高,信息熵越大。
嗯!上面这些是比较 general 的解释,那么我们接下来来看一些数学细节…
数学性质
well,显然,如果没有数学推导,只是嘴上说的话,information theory 很快就会变得无趣(((
so we neeeeed formula!!
对于信息熵,主要的数学性质有两个——非负性和凹性。其实还有 chain rule,不过那个放在信息熵、交叉熵和 KL 散度都讲完之后再说()
非负性
豪德,信息熵的第一个性质非负性,非常简单,我们先把式子粘贴过来:
H
(
X
)
=
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
H(X)=-\sum_{i=1}^nP(x_i)\log P(x_i)
H(X)=−i=1∑nP(xi)logP(xi)
我们看嗷,
P
(
x
i
)
P(x_i)
P(xi) 代表概率,所以它的取值范围是 0-1,这样的话
log
P
(
x
i
)
\log P(x_i)
logP(xi) 的取值范围就处于负无穷到 0 之间。
这样,
∑
\sum
∑ 里面是个负数,
∑
\sum
∑ 外面有个负号,这负负得正(或 0),这不就说明信息熵非负了嘛!
yes 就这么简单()不过并不是所有非负性的证明都这么简单,后面我们会看到相对熵的非负性证明(((先期待着吧(
凹性
okay,在上文不远处,我提到,想要说明为什么在随机变量的各个可能取值的概率越接近的时候,信息熵越高(并且在 n n n 个可能取值的概率相等的时候,信息熵最高),需要证明信息熵的表达式是一个凹函数,且这个凹函数在每个可能取值的概率都是 1 n \frac{1}{n} n1 取到最大值。
证明这东西是个凹函数…嗯…
H
(
X
)
=
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
H(X)=-\sum_{i=1}^nP(x_i)\log P(x_i)
H(X)=−i=1∑nP(xi)logP(xi)
这好办吧,按照函数凹凸性的知识,我们只需要证明 H ( X ) H(X) H(X) 的二阶偏导数恒为负就可以了。
在上一篇(HMM 下篇)中,我说过,对于一个含有 ∑ \sum ∑ 的式子求导或求偏导,我们可以忽略那个 ∑ \sum ∑,直接对 ∑ \sum ∑ 里面的东西求导/偏导。
so 我们对
−
P
(
x
i
)
log
P
(
x
i
)
-P(x_i)\log P(x_i)
−P(xi)logP(xi) 求一阶偏导,得到:
H
′
(
X
)
=
−
(
1
∗
log
P
(
x
i
)
+
P
(
x
i
)
∗
1
P
(
x
i
)
)
=
−
(
log
P
(
x
i
)
+
1
)
{H}'(X)=-(1*\log P(x_i)+P(x_i)*\frac{1}{P(x_i)})\\ =-(\log P(x_i)+1)
H′(X)=−(1∗logP(xi)+P(xi)∗P(xi)1)=−(logP(xi)+1)
然后我们再求二阶偏导,即对一阶偏导再求导:
H
′
′
(
X
)
=
−
(
log
P
(
x
i
)
+
1
)
′
=
−
1
P
(
x
i
)
{H}''(X)=-(\log P(x_i)+1)' = -\frac{1}{P(x_i)}
H′′(X)=−(logP(xi)+1)′=−P(xi)1
因为
P
(
x
i
)
P(x_i)
P(xi) 恒为正,所以二阶偏导恒为负!
豪德,我们就此证明了信息熵的表达式是一个凹函数!
啊那么,接下来,我们只需要再证明出这个凹函数在每个 x i x_i xi 可能出现的都等于 1 n \frac{1}{n} n1 的时候取得最大值,就 ok 了!
这东西怎么搞呢()
嗯,,,因为我们现在已经说明信息熵的表达式是一个凹函数了,一个凹函数一定有全局最小值,所以我们现在可以开始求啦,相当于一个凸优化问题(因为所有凹优化问题都可以通过加个负号的方式变成凸优化问题)。
哦不过,不要忘记了,我们还有一个约束条件呢!
P
(
x
i
)
P(x_i)
P(xi) 是一个概率分布,我们需要让所有概率的和为 1,即满足约束条件:
∑
i
=
1
n
P
(
x
i
)
=
1
\sum_{i=1}^n P(x_i)=1
i=1∑nP(xi)=1
好的,又是拉格朗日乘子法,这东西出现的频率实在是有点太高了()
还是一样的,构造拉格朗日函数,并让其一阶偏导数为 0。原函数如下:
max
p
i
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
s
.
t
.
∑
i
=
1
n
P
(
x
i
)
=
1
\max_{p_i} \ -\sum_{i=1}^nP(x_i)\log P(x_i)\\ s.t. \sum_{i=1}^n P(x_i)=1
pimax −i=1∑nP(xi)logP(xi)s.t.i=1∑nP(xi)=1
构造的拉格朗日函数如下:
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
−
λ
(
∑
i
=
1
n
P
(
x
i
)
−
1
)
=
0
-\sum_{i=1}^nP(x_i)\log P(x_i)-\lambda(\sum_{i=1}^n P(x_i)-1)=0
−i=1∑nP(xi)logP(xi)−λ(i=1∑nP(xi)−1)=0
then,常规流程,对这个东西求偏导,得到:
−
(
log
P
(
x
i
)
+
1
)
−
λ
=
0
→
−
log
P
(
x
i
)
=
1
+
λ
→
P
(
x
i
)
=
e
−
(
1
+
λ
)
-(\log P(x_i)+1)-\lambda = 0\\ \to -\log P(x_i)= 1+\lambda \\ \to P(x_i) = e^{-(1+\lambda)}
−(logP(xi)+1)−λ=0→−logP(xi)=1+λ→P(xi)=e−(1+λ)
(其实对于前面那一项的偏导我们已经在上面写过啦,后面那项的偏导非常简单()
嗯,然后带回约束条件中,得到:
∑
i
=
1
n
e
−
(
1
+
λ
)
=
1
→
e
−
(
1
+
λ
)
=
1
n
→
P
(
x
i
)
=
1
n
\sum_{i=1}^n e^{-(1+\lambda)}=1 \\ \to e^{-(1+\lambda)} = \frac{1}{n} \\ \to P(x_i) = \frac{1}{n}
i=1∑ne−(1+λ)=1→e−(1+λ)=n1→P(xi)=n1
好耶!!那我们就证明出了信息熵的凹性啦!
最后,放一张图,直观展示了当随机变量有两个可能的取值时,信息熵的图像。
okay 呀!这个图清晰地展示了我们上面推导的结果!对于多个变量情况也是一样的,只是图像会变成 n n n 维的凹函数。
豪德,信息熵的数学性质差不多就这些,真的蛮友好的((往下看,你会发现信息熵真的很友好((
为什么是这个公式?
好啊,终于到这个问题了。
好神奇啊,从一开始,我们就在说信息熵的公式是什么,但是你有没有好奇过,咋就是这个公式了? 别的公式就不行吗?
一个很自然的想法是,信息熵的公式一定需要满足一些限制条件,根据这些限制条件一步一步缩小可能的公式范围,最终得到了现在的公式。
yes 没错,祖师爷 Shannon 在他的 paper《A Mathematical Theory of Communication》中就是这样做的!他证明了,满足信息熵限制条件的公式下面这一种形式,其中
K
K
K 只是一个正的常数:
H
(
X
)
=
−
K
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
H(X)=-K\sum_{i=1}^nP(x_i)\log P(x_i)
H(X)=−Ki=1∑nP(xi)logP(xi)
想来真的是很神奇,啊当然我不会在这里给出完整的推导 (因为我还没推出来啊啊啊) ,等我推出来了,我来填坑(((估计会在期中考试之后了吧 arrrr(
相对熵(KL 散度)
好哇!我们已经讲完了信息熵!接下来是时候来一点更进阶的内容了…
在进行下面的内容之前,我们需要先搞明白信息熵的两个写法以及它们之间的关系,这对后续和下篇的内容都蛮重要的!
在上面,我们一直使用 H ( X ) H(X) H(X) 来表示随机变量 X X X 的信息熵。不过其实,还有另一种写法 H ( P ) H(P) H(P)。
这两种写法的计算公式都是一样的,都是
H
(
X
)
=
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
H(X)=\sum_{i=1}^nP(x_i)\log P(x_i)
H(X)=∑i=1nP(xi)logP(xi),但是这两种写法的侧重点不同。
H
(
X
)
H(X)
H(X) 表示随机变量
X
X
X 的信息熵(不确定程度),关注的是随机变量本身;
H
(
P
)
H(P)
H(P) 表示概率分布
P
P
P 的信息熵(不确定程度),关注的是随机变量的概率分布
P
P
P。
至于为什么这两个东西相等,很好理解,因为随机变量 X X X 本来就是从概率分布 P P P 导出的呀,这俩其实就是一个东西。只是有些时候我们的关注点是【使用两个不同的概率分布导出同一个随机变量,这两个概率分布之间的关系】,另一些时候我们的关注点是【两个随机变量之间的关系】。前者通常使用 H ( X ) H(X) H(X),后者通常使用 H ( P ) H(P) H(P)。
上面这句话非常重要,如果你现在不太明白,没关系,看完这篇你会懂一半,看完下篇你就都懂了()
提前剧透一下,这篇后面讲的都是【使用两个不同的概率分布去导出同一个变量,考虑这两个概率分布之间的关系】。
well,如果你觉得这里绕来绕去的实在令人头大,no matter,你可以忽略它们,只需要记住 H ( X ) H(X) H(X) 和 H ( P ) H(P) H(P) 的计算方式是一样的就可以了,这一篇的后续内容主要使用 H ( P ) H(P) H(P),下一篇中我们会大量接触到 H ( X ) H(X) H(X).
okay!! Time for KL divergence!!
说了这么多发现还没有提到 KL 散度(又叫相对熵,英文 KL Divergence),马上 start!
公式及意义
首先还是先上公式:
D
K
L
(
P
∥
Q
)
=
−
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
=
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
D_{KL}(P\parallel Q)=-\sum_{i=1}^nP(x_i)\log \frac{Q(x_i)}{P(x_i)} \\ =\sum_{i=1}^nP(x_i)\log \frac{P(x_i)}{Q(x_i)}
DKL(P∥Q)=−i=1∑nP(xi)logP(xi)Q(xi)=i=1∑nP(xi)logQ(xi)P(xi)
注意上下两个形式是等价的,因为 − log a b = log b a -\log \frac a b=\log \frac b a −logba=logab,你可能会在不同的地方看到不同的写法,它们没有任何区别。在这篇文章中,我们使用下面那个式子。
呃呃呃好的,所以这个东西是什么意思,,,
okay,我们观察一下,这个式子和前面信息熵的式子除了最后一项 log \log log 之外都完全一样,so 我们重点关注最后一项。
so,我们不妨把这个式子展开,使用
log
\log
log 的运算法则,我们有:
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
=
[
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
−
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
]
=
−
H
(
P
)
+
H
(
Q
)
=
H
(
Q
)
−
H
(
P
)
\sum_{i=1}^nP(x_i)\log \frac{P(x_i)}{Q(x_i)} \\ =\bigg[\sum_{i=1}^nP(x_i)\log P(x_i)-\sum_{i=1}^nP(x_i)\log Q(x_i)\bigg] \\ =-H(P)+H(Q) \\ =H(Q)-H(P)
i=1∑nP(xi)logQ(xi)P(xi)=[i=1∑nP(xi)logP(xi)−i=1∑nP(xi)logQ(xi)]=−H(P)+H(Q)=H(Q)−H(P)
这样的话…我们看到,KL 散度的式子可以被表示成两个式子相减的形式。
两个式子中前面一个是用概率分布
Q
Q
Q 去估计
X
X
X 的信息熵,后面一个则是用
P
P
P 去估计
X
X
X 的信息熵。
两式相减,得到 【用
Q
Q
Q 估计
X
X
X 比用
P
P
P 估计
X
X
X 额外需要的信息量】。
这句话很关键o!
所以,KL 散度的本质是什么呢?就是用概率分布 Q Q Q 去近似概率分布 P P P 的时候,(想要取得和概率分布 P P P 一致的结果)额外需要的信息量。
换言之,我们把 P P P 看作标准答案,而 Q Q Q 是一个近似答案。为了使这个近似答案成为标准答案,我们还需要一些额外的信息。
嗯,既然是这样,那这 KL divergence 的现实意义就非常明确了呀!它可以帮助我们衡量两个分布之间的相似程度!
怎么讲呢,如果两个分布的 KL 散度越小,也就是说用 Q Q Q 去近似 P P P 时所需要的额外信息量越少,说明这两个分布越接近;反之,如果两个分布的 K L KL KL 散度越大,也就是说用 Q Q Q 去近似 P P P 时所需要的额外信息越多,则说明这两个分布越不接近。
make sense, right?
下面这个图或许能直观地解释上面说的:
我们可以把图中的 T 1 T_1 T1 温度看作真实分布 P P P, T 2 T_2 T2 温度看作近似分布 Q Q Q。它们之间的 KL 散度衡量了它们的接近程度。直观来讲,如果两个分布图像的重叠部分面积越大,那么它们的 KL 散度越高;反之则越小。
great. 我们现在已经了解了 KL 散度的意义,接下来还是来看一些它的数学性质8!
数学性质
KL 散度的数学性质主要有三条——非负性、凸性和不对称性。其中非负性和凸性的证明比较有趣,不对称性则相对简单。
start!
非负性
首先先再贴一遍公式:
D
K
L
(
P
∥
Q
)
=
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
D_{KL}(P\parallel Q)=\sum_{i=1}^nP(x_i)\log \frac{P(x_i)}{Q(x_i)}
DKL(P∥Q)=i=1∑nP(xi)logQ(xi)P(xi)
我们的目标就是证明这坨东西 ≥ 0 \ge 0 ≥0.
豪德,不过在证明这个之前,我们需要先引入并证明另一个不等式:
ln
x
≤
x
−
1
,
f
o
r
a
l
l
x
≥
0
\ln x\le x-1, \ for \ all \ x\ge 0
lnx≤x−1, for all x≥0
我忘了高数里面讲没讲过这个公式了,so 这里证明一遍。
其实这个的证明并不难,首先移项得到一个函数
f
f
f:
f
(
x
)
:
ln
x
−
x
+
1
f(x): \ln x-x+1
f(x):lnx−x+1
证明
f
≤
0
f\le0
f≤0 即可。我们用导数来证明。
对
f
(
x
)
f(x)
f(x) 求一阶导数,得到:
f
′
(
x
)
=
1
x
−
1
f'(x)=\frac{1}{x}-1
f′(x)=x1−1
求使
f
′
(
x
)
f'(x)
f′(x) 等于 0 的点:
f
′
(
x
)
=
0
→
1
x
−
1
=
0
→
1
x
=
1
→
x
=
1
f'(x) = 0 \to \frac{1}{x}-1 = 0 \to \frac{1}{x} = 1 \to x=1
f′(x)=0→x1−1=0→x1=1→x=1
okay,惯常操作,看一阶导为 0 的点两侧的导数的符号,我们有:
求
f
′
(
x
)
f'(x)
f′(x) 的单调递增和单调递减区间:
x
≥
1
→
f
′
(
x
)
≥
0
x
≤
1
→
f
′
(
x
)
≤
0
x \ge 1 \to f'(x) \ge 0 \\ x \le 1 \to f'(x) \le 0
x≥1→f′(x)≥0x≤1→f′(x)≤0
豪德,算到现在什么都明白了,在 x = 1 x=1 x=1 左侧,一阶导数为正,函数单调递增;在 x = 1 x=1 x=1 右侧,一阶导数为负,函数单调递减。那么,在 x = 1 x=1 x=1 这个点,函数取到全局最大值!
也就是说,我们现在已经知道了函数在 x = 1 x=1 x=1 这个点取到全局最大值,我们想判断函数和 0 的大小关系,只需要判断 x = 1 x=1 x=1 时候 f ( x ) f(x) f(x) 和 0 的关系就可以了。
具体地,我们有:
f
(
1
)
=
ln
x
−
x
+
1
=
ln
1
=
0
f(1)=\ln x -x+1=\ln 1=0
f(1)=lnx−x+1=ln1=0
也就是说,函数 f ( x ) f(x) f(x) 的最大值为 0,即 f ( x ) ≤ 0 f(x)\le0 f(x)≤0.
ok 啊,我们现在已经证明出了 ln x ≤ x − 1 , f o r a l l x ≥ 0 \ln x\le x-1, \ for \ all \ x\ge 0 lnx≤x−1, for all x≥0,那么它在 Gibbs 不等式中到底有什么用呢?
in fact, 它是用来对原式中的 log \log log 变形的。
我们要证明的式子为:
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
≤
0
\sum_{i=1}^nP(x_i)\log \frac{Q(x_i)}{P(x_i)} \le 0
i=1∑nP(xi)logP(xi)Q(xi)≤0
我们有:
ln
Q
(
x
i
)
P
(
x
i
)
≤
Q
(
x
i
)
P
(
x
i
)
−
1
\ln \frac{Q(x_i)}{P(x_i)} \le \frac{Q(x_i)}{P(x_i)}-1
lnP(xi)Q(xi)≤P(xi)Q(xi)−1
即:
∑
i
=
1
n
P
(
x
i
)
(
Q
(
x
i
)
P
(
x
i
)
−
1
)
≥
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
\sum_{i=1}^nP(x_i) (\frac{Q(x_i)}{P(x_i)}-1) \ge \sum_{i=1}^nP(x_i)\log \frac{Q(x_i)}{P(x_i)}
i=1∑nP(xi)(P(xi)Q(xi)−1)≥i=1∑nP(xi)logP(xi)Q(xi)
所以我们只需要证明:
∑
i
=
1
n
P
(
x
i
)
(
Q
(
x
i
)
P
(
x
i
)
−
1
)
≤
0
\sum_{i=1}^nP(x_i) (\frac{Q(x_i)}{P(x_i)}-1) \le 0
i=1∑nP(xi)(P(xi)Q(xi)−1)≤0
就可以啦!
现在这就好办了吧,把它展开,得到:
∑
i
=
1
n
Q
(
x
i
)
−
P
(
x
i
)
≤
0
→
∑
i
=
1
n
Q
(
x
i
)
−
∑
i
=
1
n
P
(
x
i
)
≤
0
→
∑
i
=
1
n
Q
(
x
i
)
≤
∑
i
=
1
n
P
(
x
i
)
\sum_{i=1}^nQ(x_i)-P(x_i) \le 0 \\ \to \sum_{i=1}^nQ(x_i)-\sum_{i=1}^nP(x_i)\le0 \\ \to \sum_{i=1}^nQ(x_i) \le \sum_{i=1}^nP(x_i)
i=1∑nQ(xi)−P(xi)≤0→i=1∑nQ(xi)−i=1∑nP(xi)≤0→i=1∑nQ(xi)≤i=1∑nP(xi)
嗯,事情到这里就剩下最后一步了!
因为 x x x 的真实分布是 P P P,所以 P ( x i ) = 1 P(x_i)=1 P(xi)=1;而分布 Q Q Q 是对真实分布 P P P 的近似,所以 Q ( x i ) ≤ 1 Q(x_i)\le1 Q(xi)≤1.
所以, ∑ i = 1 n Q ( x i ) ≤ ∑ i = 1 n P ( x i ) \sum_{i=1}^nQ(x_i) \le \sum_{i=1}^nP(x_i) ∑i=1nQ(xi)≤∑i=1nP(xi) 成立,即原式成立!
如果你没反应过来为什么这个成立,你可以画个图, P P P 分布下方的面积是 1, Q Q Q 分布相对 P P P 分布有偏移,那么 Q ( x i ) Q(x_i) Q(xi),相当于 Q Q Q 和 P P P 下方面积的重叠部分,显然会小于 1.(可以看上一部分中放到那个图!
这个证明过程也就是吉布斯不等式(gibbs inequality)的证明过程,或者说我们上面就是在证明吉布斯不等式。我在一篇随记当中也说明了这件事,link:【随记】吉布斯(Gibbs)不等式证明!
好欸,非负性证明完啦,不过现在还有一个残留的问题——等号的成立条件。
weeeell,这很简单,等号成立,即:
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
=
0
\sum_{i=1}^nP(x_i)\log \frac{Q(x_i)}{P(x_i)} = 0
i=1∑nP(xi)logP(xi)Q(xi)=0
这个东西等于
okay 呀!KL 散度的非负性算是证明出来了,接下来我们来看它的凸性吧,和刚才说到的相等情况有一点关系~!
凸性
凸性,这玩意证明起来没那么容易。。。。((我被它硬控了好久!!!
嗯,既然是要证明 KL 散度的凸性,那我们首先得补充一下函数的凸性,或者说,凸函数的定义。
eraaa 其实这很简单,记住一句话:函数的期望大于期望的函数,则是凸函数。
我们在这里以一元函数为例:
λ
f
(
x
1
)
+
(
1
−
λ
)
f
(
x
2
)
≥
f
(
λ
x
1
+
(
1
−
λ
)
x
2
)
\lambda f(x_1)+(1-\lambda)f(x_2) \ge f(\lambda x_1+(1-\lambda) x_2)
λf(x1)+(1−λ)f(x2)≥f(λx1+(1−λ)x2)
对于两个变量
x
1
,
x
2
x_1, x_2
x1,x2,如果它们满足上面这个式子,则说明函数
f
(
x
)
f(x)
f(x) 是凸函数。
如果你接触过凸优化的话,这个式子应该见过很多遍了!!
放一张图,很直观:
嗯,我不知道我后面会不会专门讲讲凸优化,这个应该会写在那个里面吧((
在证明相对熵的凸性之前,我们需要先了解一个不等式:log-sum 不等式,中文是对数和不等式,如下:
∑ i a i log a i b i ≥ ( ∑ i a i ) log ∑ j a j ∑ j b j = a log a b \sum_i a_i \log \frac{a_i}{b_i} \ge (\sum_i a_i) \log \frac{\sum_j a_j}{\sum_j b_j}= a\log \frac{a}{b} i∑ailogbiai≥(i∑ai)log∑jbj∑jaj=alogba
对数和不等式的证明在这里:【呃我还在写】
(我感觉把证明放在另一个页面是一个好的选择,否则写完证明以后就会想,诶,我原本要干什么来着(((
okay,好的,对数和不等式证明完了,然后呢?
然后,然后,然后,考验一下注意力(什么鬼),根据对数和不等式,我们 “注意到”:
a
1
log
a
1
b
1
+
a
2
log
a
2
b
2
≥
(
a
1
+
a
2
)
log
a
1
+
a
2
b
1
+
b
2
a_1 \log \frac{a_1}{b_1} + a_2 \log \frac {a_2}{b_2} \ge (a_1+a_2) \log \frac{a_1+a_2}{b_1+b_2}
a1logb1a1+a2logb2a2≥(a1+a2)logb1+b2a1+a2
well,如果你没有 “注意到” 也没事(u1s1 我第一次看到这个式子的时候我还在想诶这玩意哪里来的))。我们看嗷,这个式子的左边相当于 ∑ i = 1 2 a i log a i b i \sum_{i=1}^2 a_i \log \frac{a_i}{b_i} ∑i=12ailogbiai,右边相当于 ( ∑ i = 1 2 a i ) log ∑ j = 1 2 a j ∑ j = 1 2 b j (\sum_{i=1}^2 a_i) \log \frac{\sum_{j=1}^2a_j} {\sum_{j=1}^2 b_j} (∑i=12ai)log∑j=12bj∑j=12aj,也就是说,这个式子只是对数和不等式的一个特例啦,我们后面会用到它,所以在这里先说明一下。
其实现在我们已经接近成功了!!(没想到吧嘿嘿(什么东西((
我们要证明 KL 散度是个凸函数,根据凸函数的定义,我们需要证明的是:
λ
D
K
L
(
p
1
∥
q
1
)
+
(
1
−
λ
)
D
K
L
(
p
2
∥
q
2
)
≤
D
K
L
(
λ
p
1
+
(
1
−
λ
)
p
2
∥
λ
q
1
+
(
1
−
λ
)
q
2
)
\begin{align} \lambda D_{KL}(p_1 \parallel q_1)+(1-\lambda) D_{KL}(p_2 \parallel q_2) \le D_{KL}(\lambda p_1 +(1-\lambda) p_2 \parallel \lambda q_1+ (1-\lambda) q_2) \end {align}
λDKL(p1∥q1)+(1−λ)DKL(p2∥q2)≤DKL(λp1+(1−λ)p2∥λq1+(1−λ)q2)
(默念:凸函数,函数的期望大于期望的函数((
嗯,不过现在出现了一个新的问题——在不等式的右边,我们有 D K L ( λ p 1 + ( 1 − λ ) p 2 ∥ λ q 1 + ( 1 − λ ) q 2 ) D_{KL}(\lambda p_1 +(1-\lambda) p_2 \parallel \lambda q_1+ (1-\lambda) q_2) DKL(λp1+(1−λ)p2∥λq1+(1−λ)q2)。但是, λ p 1 + ( 1 − λ ) p 2 \lambda p_1 +(1-\lambda) p_2 λp1+(1−λ)p2 一定是合法的概率分布吗?换言之,这两个概率分布加权求和得到的新的 “分布” 一定满足处处非负且和为 1 吗?
答案是肯定的。我们在这里小小证明一下()很简单~
首先根据
∑
\sum
∑ 的运算性质,我们有:
λ
p
1
+
(
1
−
λ
)
p
2
=
∑
x
λ
p
1
(
x
)
+
∑
(
1
−
λ
)
p
2
(
x
)
=
λ
∑
x
p
1
(
x
)
+
(
1
−
λ
)
∑
x
p
2
(
x
)
\begin{align} & \lambda p_1 +(1-\lambda) p_2 = \sum_x \lambda p_1(x)+ \sum (1-\lambda) p_2(x) \\ & = \lambda \sum_x p_1(x) + (1-\lambda) \sum_x p_2(x) \end{align}
λp1+(1−λ)p2=x∑λp1(x)+∑(1−λ)p2(x)=λx∑p1(x)+(1−λ)x∑p2(x)
因为
p
1
p_1
p1 和
p
2
p_2
p2 都是合法的概率分布,即和为 1,所以我们有:
=
λ
∑
x
p
1
(
x
)
+
(
1
−
λ
)
∑
x
p
2
(
x
)
=
λ
∗
1
+
(
1
−
λ
)
∗
1
=
1
\begin{align} & = \lambda \sum_x p_1(x) + (1-\lambda) \sum_x p_2(x) \\ & =\lambda * 1 + (1-\lambda)*1 \\ & = 1 \end{align}
=λx∑p1(x)+(1−λ)x∑p2(x)=λ∗1+(1−λ)∗1=1
okyyyya! 这样我们就说明了任意两个合法概率分布 p 1 p_1 p1 和 p 2 p_2 p2 的和仍然是一个合法概率分布,我们可以继续往后看了~
把需要优化的式子展开成 KL 散度的表达式,我们要证明的东西就是:
∑
x
λ
p
1
(
x
)
+
(
1
−
λ
)
p
2
(
x
)
log
λ
p
1
(
x
)
+
(
1
−
λ
)
p
2
(
x
)
λ
q
1
(
x
)
+
(
1
−
λ
)
q
2
(
x
)
≤
∑
x
λ
p
1
(
x
)
log
λ
p
1
(
x
)
λ
q
1
(
x
)
+
(
1
−
λ
)
p
2
(
x
)
log
(
1
−
λ
)
p
2
(
x
)
(
1
−
λ
)
q
2
(
x
)
\begin{align} \sum_{x} \lambda p_{1}(x) & +(1-\lambda) p_{2}(x) \log \frac{\lambda p_{1}(x)+(1-\lambda) p_{2}(x)}{\lambda q_{1}(x)+(1-\lambda) q_{2}(x)} \\ & \leq \sum_{x} \lambda p_{1}(x) \log \frac{\lambda p_{1}(x)}{\lambda q_{1}(x)}+(1-\lambda) p_{2}(x) \log \frac{(1-\lambda) p_{2}(x)}{(1-\lambda) q_{2}(x)} \end{align}
x∑λp1(x)+(1−λ)p2(x)logλq1(x)+(1−λ)q2(x)λp1(x)+(1−λ)p2(x)≤x∑λp1(x)logλq1(x)λp1(x)+(1−λ)p2(x)log(1−λ)q2(x)(1−λ)p2(x)
嗯,你你可能已经发现了,这不就是我们上面说的那个,对数和不等式的特殊形式, a 1 log a 1 b 1 + a 2 log a 2 b 2 ≥ ( a 1 + a 2 ) log a 1 + a 2 b 1 + b 2 a_1 \log \frac{a_1}{b_1} + a_2 \log \frac {a_2}{b_2} \ge (a_1+a_2) \log \frac{a_1+a_2}{b_1+b_2} a1logb1a1+a2logb2a2≥(a1+a2)logb1+b2a1+a2 嘛!!! 只不过把左右调换了一下位置而已。
所以,我们就这么简简单单地证明出来了!!!
eaaa 可能有点混乱,小小总结一下证明 KL 散度凸性的关键点。
首先,我们根据凸函数的定义,写出需要证明的式子,并将这个式子按照 KL 散度的形式展开,我们把展开后的结果称作展开式。
在继续往后做之前,我们证明了展开式中的每一项都是一个合法的概率分布,这是我们往下进行的前提。
然后,我们证明对数和不等式,并写出对数和不等式的特殊形式(或者说一个特例)。
最后,我们发现展开式和对数和不等式的特殊形式是等价的。
于是,我们证明了 KL 散度是个凸函数!!!
好啊,我们花了这——么——长时间证明这东西,那它有什么实质性的帮助吗?或者说,知道这个性质,可以帮助我们干什么呢?
well,实际上,这是个凸优化领域的问题(是的当当我们在一开始开始探讨凸函数性质的时候就已经进入到凸优化领域了)。
这个结论为模型(概率分布)的聚合提供了非常好的理论支持!!! 这个式子保证了多个概率分布聚合得到的结果一定会比这些概率分布单独使用再相加的结果好!
讲一下这里的 “聚合”。
还是先看一下原式:
λ
D
K
L
(
p
1
∥
q
1
)
+
(
1
−
λ
)
D
K
L
(
p
2
∥
q
2
)
≤
D
K
L
(
λ
p
1
+
(
1
−
λ
)
p
2
∥
λ
q
1
+
(
1
−
λ
)
q
2
)
\begin{align} \lambda D_{KL}(p_1 \parallel q_1)+(1-\lambda) D_{KL}(p_2 \parallel q_2) \le D_{KL}(\lambda p_1 +(1-\lambda) p_2 \parallel \lambda q_1+ (1-\lambda) q_2) \end {align}
λDKL(p1∥q1)+(1−λ)DKL(p2∥q2)≤DKL(λp1+(1−λ)p2∥λq1+(1−λ)q2)
在这个式子中,左边的两个 KL 散度是聚合之前的,而右边的是聚合之后的。这里的聚合就是指把两个单独的概率分布通过加权求和形成一个新的概率分布。
也就是说,我们可以放心地聚合多个概率分布,而不用担心 KL 散度(近似程度)下降。
换言之,两个或多个概率分布聚合的表现一定会比单独一个概率分布的表现好。这是一个非常重要的性质,在很多优化问题中都可以使用这个性质进行模型的聚合。
(如果你是个 DLer 的话,可以类比 ResNet 的性质来理解这里概率聚合的性质,本质上都是一种 “保底” 的策略。
好耶!!!以上就是 KL 散度凸性的证明!!! veeeery nice!
哦对了,其实使用对数和不等式也可以证明 KL 散度的非负性()过程:
我们看嗷,对数和不等式是 X ≥ Y X \ge Y X≥Y 的形式,对吧,那我们首先移项,变成 X − Y ≥ − 0 X-Y \ge -0 X−Y≥−0 的形式,然后再根据对数的运算性质进行一些处理…
∑ i a i log a i b i − ( ∑ i a i ) log ∑ j a j ∑ j b j ≥ 0 ∑ i a i [ log a i b i − log ∑ j a j ∑ j b j ] ⩾ 0 ∑ i a i [ log a i / ∑ j a j b i / ∑ j b j ] ⩾ 0 ∑ i a i ∑ j a j [ log a i / ∑ j a j b i / ∑ j b j ] ⩾ 0 \begin{align} & \sum_i a_i \log \frac{a_i}{b_i} - (\sum_i a_i) \log \frac{\sum_j a_j}{\sum_j b_j} \ge 0 \\ & \sum_{i} a_{i}\left[\log \frac{a_{i}}{b_{i}}-\log \frac{\sum_{j} a_{j}}{\sum_{j} b_{j}}\right] \geqslant 0 \\ & \sum_{i} a_{i}\left[\log \frac{a_{i} / \sum_{j} a_{j}}{b_{i} / \sum_{j} b_{j}}\right] \geqslant 0 \\ & \sum_{i} \frac{a_{i}}{\sum_{j} a_{j}}\left[\log \frac{a_{i}/\sum_{j} a_{j}}{b_{i} / \sum_{j} b_{j}}\right] \geqslant 0 \\ \end{align} i∑ailogbiai−(i∑ai)log∑jbj∑jaj≥0i∑ai[logbiai−log∑jbj∑jaj]⩾0i∑ai[logbi/∑jbjai/∑jaj]⩾0i∑∑jajai[logbi/∑jbjai/∑jaj]⩾0
其中第三步到第四步是在等式两边乘以了一个常数 a i ∑ j a j \frac{a_{i}}{\sum_{j} a_{j}} ∑jajai.
我们看嗷,最后这个东西是啥,或者说,最后这个东西有什么特点?
∑ i a i ∑ j a j \sum_{i} \frac{a_{i}}{\sum_{j} a_{j}} ∑i∑jajai 和 ∑ i P ( x i ) \sum_i P(x_i) ∑iP(xi),是不是很像?它们的共同点是都非负、且和都为 1。
也就是说,它们都是一个合法的概率分布!
后面 log 里面的项也是同理, a i ∑ j a j \frac{a_{i}}{\sum_{j} a_{j}} ∑jajai 和 b i ∑ j b j \frac{b_{i}}{\sum_{j} b_{j}} ∑jbjbi 都是概率分布,因为都满足 “非负且和为 1” 的条件。
是的,其实这个式子和 ∑ i P ( x i ) log P ( x i ) Q ( x i ) \sum_i P(x_i) \log \frac{P(x_i)}{Q(x_i)} ∑iP(xi)logQ(xi)P(xi) 是等价的。只是把概率分布 P , Q P, Q P,Q 换了一种写法,写成了 a i ∑ j a j \frac{a_{i}}{\sum_{j} a_{j}} ∑jajai 和 b i ∑ j b j \frac{b_{i}}{\sum_{j} b_{j}} ∑jbjbi 而已。
嗯,所以,既然 ∑ i a i ∑ j a j [ log a i / ∑ j a j b i / ∑ j b j ] ⩾ 0 \sum_{i} \frac{a_{i}}{\sum_{j} a_{j}}\left[\log \frac{a_{i}/\sum_{j} a_{j}}{b_{i} / \sum_{j} b_{j}}\right] \geqslant 0 ∑i∑jajai[logbi/∑jbjai/∑jaj]⩾0,那不就等于 ∑ i P ( x i ) log P ( x i ) Q ( x i ) ≥ 0 \sum_i P(x_i) \log \frac{P(x_i)}{Q(x_i)} \ge 0 ∑iP(xi)logQ(xi)P(xi)≥0 嘛!!
所以,对数和不等式也可以用于说明KL 散度的非负性!
(诶我怎么记得这个 part 是讲凸性的来着(((歪楼了歪楼了(
好嘟那这个部分就到这里吧!! 我们继续看下一个性质!
不对称性
不对称性,这个简单。
首先先回顾一下我们最开始的符号和公式:
D
K
L
(
P
∥
Q
)
=
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
D_{KL}(P\parallel Q)=\sum_{i=1}^nP(x_i)\log \frac{P(x_i)}{Q(x_i)}
DKL(P∥Q)=i=1∑nP(xi)logQ(xi)P(xi)
well,现在如果把 D D D 中 P , Q P, Q P,Q 的顺序变一下,也就是从 D K L ( P ∥ Q ) D_{KL}(P\parallel Q) DKL(P∥Q) 变成 D K L ( Q ∥ P ) D_{KL}(Q \parallel P) DKL(Q∥P),那么公式会变成什么呢?
obviously,公式变成:
D
K
L
(
Q
∥
P
)
=
∑
i
=
1
n
Q
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
D_{KL}(Q \parallel P)=\sum_{i=1}^nQ(x_i)\log \frac{Q(x_i)}{P(x_i)}
DKL(Q∥P)=i=1∑nQ(xi)logP(xi)Q(xi)
证明不相等比证明相等简单太多了,证明相等需要严格的推导,证明不相等直接举个反例就行了。
so 我们在这里构造一个(非常简单的)反例:
定义两个离散概率分布 P P P 和 Q Q Q:
P ( X ) = { 0.5 if X = 0 0.5 if X = 1 0 otherwise P(X) = \begin{cases} 0.5 & \text{if } X = 0 \\ 0.5 & \text{if } X = 1 \\ 0 & \text{otherwise} \end{cases} P(X)=⎩ ⎨ ⎧0.50.50if X=0if X=1otherwise
Q ( X ) = { 0.9 if X = 0 0.1 if X = 1 0 otherwise Q(X) = \begin{cases} 0.9 & \text{if } X = 0 \\ 0.1 & \text{if } X = 1 \\ 0 & \text{otherwise} \end{cases} Q(X)=⎩ ⎨ ⎧0.90.10if X=0if X=1otherwise
首先把
P
P
P 看作真实分布,
Q
Q
Q 看作近似分布,计算
D
K
L
(
P
∣
∣
Q
)
D_{KL}(P || Q)
DKL(P∣∣Q):
D
K
L
(
P
∣
∣
Q
)
=
∑
x
P
(
x
)
log
P
(
x
)
Q
(
x
)
D_{KL}(P || Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}
DKL(P∣∣Q)=x∑P(x)logQ(x)P(x)
对于
x
=
0
x = 0
x=0 和
x
=
1
x = 1
x=1:
D
K
L
(
P
∣
∣
Q
)
=
P
(
0
)
log
P
(
0
)
Q
(
0
)
+
P
(
1
)
log
P
(
1
)
Q
(
1
)
=
0.5
log
0.5
0.9
+
0.5
log
0.5
0.1
≈
0.505
D_{KL}(P || Q) = P(0) \log \frac{P(0)}{Q(0)} + P(1) \log \frac{P(1)}{Q(1)} \\ = 0.5 \log \frac{0.5}{0.9} + 0.5 \log \frac{0.5}{0.1}\\ \approx 0.505
DKL(P∣∣Q)=P(0)logQ(0)P(0)+P(1)logQ(1)P(1)=0.5log0.90.5+0.5log0.10.5≈0.505
然后再把
Q
Q
Q 看作真实分布,
P
P
P 看作近似分布,计算
D
K
L
(
Q
∣
∣
P
)
D_{KL}(Q || P)
DKL(Q∣∣P):
D
K
L
(
Q
∣
∣
P
)
=
∑
x
Q
(
x
)
log
Q
(
x
)
P
(
x
)
D_{KL}(Q || P) = \sum_{x} Q(x) \log \frac{Q(x)}{P(x)}
DKL(Q∣∣P)=x∑Q(x)logP(x)Q(x)
还是一样的,对于 ( x = 0 ) 和 ( x = 1 ):
D
K
L
(
Q
∣
∣
P
)
=
Q
(
0
)
log
Q
(
0
)
P
(
0
)
+
Q
(
1
)
log
Q
(
1
)
P
(
1
)
=
0.9
log
0.9
0.5
+
0.1
log
0.1
0.5
≈
0.296
D_{KL}(Q || P) = Q(0) \log \frac{Q(0)}{P(0)} + Q(1) \log \frac{Q(1)}{P(1)} \\ = 0.9 \log \frac{0.9}{0.5} + 0.1 \log \frac{0.1}{0.5}\\ \approx 0.296
DKL(Q∣∣P)=Q(0)logP(0)Q(0)+Q(1)logP(1)Q(1)=0.9log0.50.9+0.1log0.50.1≈0.296
即:
D
K
L
(
P
∣
∣
Q
)
≈
0.505
and
D
K
L
(
Q
∣
∣
P
)
≈
0.296
D_{KL}(P || Q) \approx 0.505 \quad \text{and} \quad D_{KL}(Q || P) \approx 0.296
DKL(P∣∣Q)≈0.505andDKL(Q∣∣P)≈0.296
这说明 D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P || Q) \neq D_{KL}(Q || P) DKL(P∣∣Q)=DKL(Q∣∣P) 也就是说 KL 散度是不对称的!
okkkaaaay,KL 散度的三个数学性质就说完啦~一半友好一半不友好吧((((
交叉熵
好的!到交叉熵啦,我相信搞机器学习的小 fuo 伴们对交叉熵应该都很熟悉了吧()一提到损失函数,cross-entropy loss 一定是非常出名的一个!
so 今天,我们就来从数学上看看交叉熵!
公式及意义
交叉熵的公式简单,但 “暗藏玄机”,如下:
H
(
P
,
Q
)
=
−
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
H(P, Q)=-\sum_{i=1}^nP(x_i)\log Q(x_i)
H(P,Q)=−i=1∑nP(xi)logQ(xi)
其中 P P P 为真实分布, Q Q Q 为近似分布。
和 KL 散度一样,交叉熵研究的也是两个分布之间的关系。
玄机在哪呢?我们可以尝试把它写成两个式子相加的形式。
还是利用对数的运算法则,我们有:
H
(
P
,
Q
)
=
[
−
∑
i
=
1
n
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
]
+
[
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
]
H(P, Q)=\bigg[-\sum_{i=1}^nP(x_i) \log \frac{Q(x_i)}{P(x_i)}\bigg]+\bigg[-\sum_{i=1}^nP(x_i) \log P(x_i)\bigg]
H(P,Q)=[−i=1∑nP(xi)logP(xi)Q(xi)]+[−i=1∑nP(xi)logP(xi)]
woooow! 这两项是不是超级熟悉!
前一项是
D
K
L
(
P
∥
Q
)
D_{KL}(P\parallel Q)
DKL(P∥Q),即真实分布
P
P
P 相对近似分布
Q
Q
Q 的 KL 散度;后一项是
H
(
P
)
H(P)
H(P),即分布
P
P
P 自身的信息熵。
也就是说,真实分布和近似分布之间的交叉熵等于真实分布和近似分布之间的 KL 散度加上真实分布自身的信息熵!
okay,这是个非常好的等式!这揭示了交叉熵的核心含义。
P P P 的信息熵反映了它自身的信息量, P , Q P, Q P,Q 之间的 KL 散度反映了用 Q Q Q 近似 P P P 时额外需要的信息量。
那么,将两者相加,真实分布 P P P 和近似分布 Q Q Q 的交叉熵反映了当用分布 Q Q Q 近似分布 P P P 时,(为了取得和 P P P 一样的结果)需要的总信息量。
这就是交叉熵的含义!!!
okay,现在你已经对交叉熵的基本含义有了解了,我们来看看交叉熵在机器学习中的应用。(哈哈哈哈哈 MLer 最熟悉的部分())
在机器学习中的应用
对于 MLer 来说,CrossEntropy Loss 那必定是相当熟悉的呀!几乎所有的分类任务都会使用交叉熵损失函数,一些 NLP 任务也会使用交叉熵损失函数。
你可能好奇,诶既然 KL 散度才是衡量两个分布之间近似程度的,那为什么损失函数不用 KL 散度而用交叉熵呢?
其实上面的表达式可以回答这个问题,KL 散度 = 交叉熵 - 信息熵。
而对于真实分布
P
P
P,也就是机器学习问题中的 ground truth,它的信息熵是确定的,所以它的 KL 散度的后半部分是一个常数,对最优化没有影响,so 我们可以忽略那一项,最小化 KL 散度和最小化交叉熵是等价的。
这也就有了交叉熵损失函数在机器学习中的广泛应用。
这里举两个例子吧,二分类问题和多分类问题。
二分类问题
对于二分类问题,我们把其中一类标定为 1,另一类标定为 0。那么,对于一个真实标签为 1 的样本
x
i
x_i
xi 来说,它的交叉熵损失为:
H
(
P
,
Q
)
=
P
(
x
i
)
log
Q
(
x
i
)
=
log
Q
(
x
i
)
H(P, Q) = P(x_i) \log Q(x_i)= \log Q(x_i)
H(P,Q)=P(xi)logQ(xi)=logQ(xi)
其中
P
P
P 代表真实分布,so
P
(
x
i
)
P(x_i)
P(xi) 为 1,
Q
Q
Q 代表模型预测的分布,so
Q
(
x
i
)
Q(x_i)
Q(xi) 就代表模型预测的
x
i
x_i
xi 的标签为 1 的概率。
我们也可以把上面的式子换个写法,下面这种写法或许更常见一些。
Loss
=
y
log
y
^
=
log
y
^
\text{Loss} = y \log \hat{y}=\log \hat{y}
Loss=ylogy^=logy^
对于一个真实标签为 0 的样本来说,它的交叉熵损失为:
Loss
=
(
1
−
y
)
log
(
1
−
y
^
)
=
log
(
1
−
y
^
)
\text{Loss} = (1-y) \log {(1-\hat{y})}=\log {(1-\hat{y})}
Loss=(1−y)log(1−y^)=log(1−y^)
这很好理解,我们想让 y ^ \hat{y} y^ 接近 0,这也就等价于 1 − y ^ 1-\hat{y} 1−y^ 接近 1.
注意上面两个式子中的符号表示, y y y 代表真实标签(1 或 0), y ^ \hat{y} y^ 代表模型预测的属于真实标签的概率。
okay,现在我们已经有了对真实标签为 1 和真实标签为 0 的样本的交叉熵损失了,接下来我们把它们合并为一个式子,如下。
Loss = ∑ i = 1 n y log y ^ + ( 1 − y ) log ( 1 − y ^ ) \text{Loss} = \sum_{i=1}^ny \log \hat{y}+(1-y) \log {(1-\hat{y})} Loss=i=1∑nylogy^+(1−y)log(1−y^)
前面的 ∑ \sum ∑ 负责遍历所有的样本点,对于每个样本点,我们都执行后面的操作计算它的交叉熵损失。
是的,对于交叉熵损失的计算公式 y log y ^ + ( 1 − y ) log ( 1 − y ^ ) y \log \hat{y}+(1-y) \log {(1-\hat{y})} ylogy^+(1−y)log(1−y^),我们只是简单地把上面说过的两个式子加在了一起。这么做的原因很简单——如果一个样本的真实标签为 1,那么 y log y ^ + ( 1 − y ) y \log \hat{y}+(1-y) ylogy^+(1−y) 将计算它的交叉熵损失,而 ( 1 − y ) log ( 1 − y ^ ) (1-y) \log {(1-\hat{y})} (1−y)log(1−y^) 为 0,对计算结果没有影响;如果一个样本的真实标签为 0,也是同理。
也就是说,不同标签的样本的交叉熵损失可以写在同一个式子中,但最终哪个部分参与计算是由样本的标签决定的。
如果你之前接触过逻辑回归,你会发现逻辑回归的损失函数设计中就用到了交叉熵损失函数!
(我之前写过一篇讲逻辑回归的,不过那篇里面没有明确点出交叉熵损失函数,一会去修改一下…诶嘿!)
以上是二分类问题中的交叉熵损失函数,我们接下来来看看多分类问题中的交叉熵损失函数。
多分类问题
在多分类问题中,真实标签和模型预测概率都是一个向量(这两个向量长度相等)。样本属于第几类,真是标签向量中的第几个分量就为 1,其它则为 0.
举个例子,这是一个五分类问题的样本的真实标签和预测概率,样本的真实类别为第三类。
True
=
[
0
,
0
,
1
,
0
,
0
]
Pred
=
[
0.1
,
0.05
,
0.75
,
0.03
,
0.07
]
\text{True} = [0, 0, 1, 0, 0] \\ \text{Pred} = [0.1, 0.05, 0.75, 0.03, 0.07]
True=[0,0,1,0,0]Pred=[0.1,0.05,0.75,0.03,0.07]
我们把真实标签向量看作真实分布
P
P
P,把预测概率向量看作近似分布
Q
Q
Q,则有:
Loss
=
H
(
P
,
Q
)
=
∑
j
=
1
5
P
(
x
j
)
log
Q
(
x
i
)
\text{Loss} = H(P,Q) = \sum_{j=1}^5 P(x_j) \log Q(x_i)
Loss=H(P,Q)=j=1∑5P(xj)logQ(xi)
注意这里的 x j x_j xj 代表的是【样本 x x x 的第 j j j 个分量】,而不是第 j j j 个样本。
okay,还是用
y
y
y 和
y
^
\hat{y}
y^ 来表示:
Loss
=
∑
j
=
1
5
x
j
log
x
j
^
\text{Loss} = \sum_{j=1}^5 x_j \log \hat{x_j}
Loss=j=1∑5xjlogxj^
注意, j j j 从 1 遍历到 5 的过程中,除了 x j = 1 x_j=1 xj=1 的时候( j = 3 j=3 j=3 的时候),其它时候因为 x j = 0 x_j=0 xj=0, ∑ j = 1 5 x j log x j ^ \sum_{j=1}^5 x_j \log \hat{x_j} ∑j=15xjlogxj^ 也等于 0,即对应的交叉熵损失也为 0。
换言之,交叉熵损失函数只关注真实标签为 1 的那一项的预测结果。
这里有一张比较直观的图,左边是预测概率(近似分布),右边是真实标签(真实分布)。
okay,推广一下,一个具有
n
n
n 个样本点的
m
m
m 分类问题的交叉熵损失函数为:
Loss
=
∑
i
=
1
n
∑
j
=
1
m
x
i
j
log
x
i
j
^
\text{Loss} = \sum_{i=1}^n \sum_{j=1}^m x_{ij} \log \hat{x_{ij}}
Loss=i=1∑nj=1∑mxijlogxij^
其中,外层 ∑ \sum ∑ 遍历所有样本点,内层 ∑ \sum ∑ 遍历一个样本点的所有类别。 x i j x_{ij} xij 表示第 i i i 个样本在第 j j j 个类别上的真实值(如果属于这个类别,则值为 1,否则为 0); x i j ^ \hat{x_{ij}} xij^ 表示第 i i i 个样本被预测属于第 j j j 个类别的概率。
数学性质
有了前面 KL 散度的铺垫,交叉熵的数学性质就很好解释了。
交叉熵的数学性质主要有两个——非负性和凸性。
非负性
交叉熵是非负的,这非常好解释。
前面说过,交叉熵等于什么,等于 KL 散度+信息熵对吧。我们已经证明了 KL 散度和信息熵都是非负的,那两个非负的东西加起来肯定还是非负的呀,即:
H
(
P
,
Q
)
=
P
(
x
i
)
log
Q
(
x
i
)
n
≥
0
H(P, Q)=P(x_i)\log Q(x_i)n \ge 0
H(P,Q)=P(xi)logQ(xi)n≥0
噗哈哈哈就这么水灵灵地解决了一个()
凸性
交叉熵的凸性和 KL 散度的证明过程非常类似,证明了 KL 散度的凸性之后,证明交叉熵的凸性就很简单啦!! 这里就不再赘述了!
三者的链式法则
okay! 现在三个熵已经分别讲完啦!我们在这里简单总结一下它们之间的关系。
其实前面都已经讲过了,如下:
H
(
P
)
+
D
K
L
(
P
∥
Q
)
=
H
(
P
,
Q
)
H(P)+D_{KL}(P\parallel Q) = H(P, Q)
H(P)+DKL(P∥Q)=H(P,Q)
以及:
H
(
Q
)
+
D
K
L
(
Q
∥
P
)
=
H
(
Q
,
P
)
H(Q)+D_{KL}(Q \parallel P) = H(Q, P)
H(Q)+DKL(Q∥P)=H(Q,P)
一定要注意这两个式子是不一样(不对称)的喔!! 在使用的时候注意看好谁是真实分布谁是近似分布!
总结如下。
H
(
real
)
+
D
K
L
(
real
∥
approximate
)
=
H
(
approximate
,
real
)
H(\text{real})+D_{KL}(\text{real} \parallel \text{approximate}) = H(\text{approximate}, \text{real})
H(real)+DKL(real∥approximate)=H(approximate,real)
好耶!以上就是所有要讲的内容啦,我们来总结一下…
总结
我列了个表,包含信息熵、交叉熵和相对熵的定义公式、意义和数学性质,是一个不错的总结!!
概念 | 定义公式 | 意义 | 数学性质 |
---|---|---|---|
信息熵 H ( P ) H(P) H(P) | H ( P ) = − ∑ x P ( x ) log P ( x ) H(P) = -\sum_{x} P(x) \log P(x) H(P)=−∑xP(x)logP(x) | 衡量随机变量的不确定性或信息量。 | 非负性: H ( P ) ≥ 0 H(P) \geq 0 H(P)≥0, H ( P ) = 0 H(P) = 0 H(P)=0 当且仅当 P P P 是确定的;凹性: H ( P ) H(P) H(P) 取到最大值 log 1 n \log \frac{1}{n} logn1 当且仅当 p ( x i ) = 1 n p(x_i) = \frac{1}{n} p(xi)=n1。 |
交叉熵 H ( P , Q ) H(P, Q) H(P,Q) | H ( P , Q ) = − ∑ x P ( x ) log Q ( x ) H(P, Q) = -\sum_{x} P(x) \log Q(x) H(P,Q)=−∑xP(x)logQ(x) | 衡量用近似分布 Q Q Q 表示真实分布 P P P 所需的总信息量。 | 非负性: H ( P , Q ) ≥ H ( P ) ≥ 0 H(P, Q) \geq H(P) \ge 0 H(P,Q)≥H(P)≥0,在 P = Q P=Q P=Q 时等号成立;凸性。 |
KL 散度 D K L ( P ∥ Q ) D_{KL}(P\parallel Q) DKL(P∥Q) | D K L ( P ∥ Q ) = ∑ x P ( x ) log P ( x ) Q ( x ) D_{KL}(P\parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} DKL(P∥Q)=∑xP(x)logQ(x)P(x) | 衡量用近似分布 Q Q Q 近似真实分布 P P P 所需的额外信息量(或信息损失)。 | 非负性: D K L ( P ∥ Q ) ≥ 0 D_{KL}(P\parallel Q) \geq 0 DKL(P∥Q)≥0;不对称性: D K L ( P ∥ Q ) ≠ D K L ( Q ∥ P ) D_{KL}(P\parallel Q) \neq D_{KL}(Q\parallel P) DKL(P∥Q)=DKL(Q∥P);凸性: λ D K L ( p 1 ∥ q 1 ) + ( 1 − λ ) D K L ( p 2 ∥ q 2 ) ≤ D K L ( λ p 1 + ( 1 − λ ) p 2 ∥ λ q 1 + ( 1 − λ ) q 2 ) \lambda D_{KL}(p_1 \parallel q_1)+(1-\lambda) D_{KL}(p_2 \parallel q_2) \le D_{KL}(\lambda p_1 +(1-\lambda) p_2 \parallel \lambda q_1+ (1-\lambda) q_2) λDKL(p1∥q1)+(1−λ)DKL(p2∥q2)≤DKL(λp1+(1−λ)p2∥λq1+(1−λ)q2) |
哦耶!!非常完美!!到这里,你已经对信息熵、交叉熵和相对熵有了一个比较深入的理解了!!
好啦,那这篇就到这里啦~我们下一篇再见!!
下一篇讲条件熵、联合熵和互信息!
这篇文章讲解了机器学习中的信息熵、交叉熵和相对熵,并证明了它们的数学性质,希望对你有所帮助!⭐
欢迎三连!!一起加油!🎇
——Geeker_LStar