文章目录
🔥在机器学习和信息论中,熵、交叉熵和KL散度(Kullback-Leibler散度)是三个至关重要的概念。熵表示系统的不确定性或信息量,它衡量一个随机变量的平均信息量。交叉熵则是衡量两个概率分布之间的差异,常用于分类任务中,表示模型预测分布与真实分布之间的距离。KL散度是交叉熵的扩展,专门用来衡量一个概率分布相对于另一个分布的相对熵,能够评估两者之间的“信息损失”。
📚本文将详细介绍这些概念及其应用,可以更好地掌握模型优化过程中损失函数的意义,尤其在深度学习中,交叉熵和KL散度经常用于模型训练和概率分布估计。
一、熵
1 定义
熵是信息论中最基本、最核心的一个概念,它衡量了一个概率分布的随机程度,或者说包含的信息量的大小。 首先来看离散型随机变量,考虑随机变量取某一个特定值时包含的信息量的大小:
- 假设随机变量取值为 x,对应的概率为 p(x)。直观来看,取这个值的可能性越小,而它又发生了,则包含的信息量就越大。也就是说,概率越小,信息量越大。例如,一年之内人类登陆火星,包含的信息量显然比广州明天要下雨大,因为前者的概率明显小于后者。
- 因此如果定义一个函数 h(x)来描述随机变量取值为的信息量的大小的话,则h(x)应该是 p ( x )的单调减函数。
满足单调递减要求的函数太多了,该选择哪个函数呢? 接着考虑。假设有两个相互独立的随机变量, 它们的取值分别为x和y, 取该值的概率为
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 为底, 在机器学习中通常以
e
e
e 为底, 在后面的计算中为了方便起见我们用 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}[-\log p(x)] \\ &=-\sum_{i} p_{i} \log p_{i} \end{aligned} H(p)=Ex[−logp(x)]=−i∑pilogpi
这里约定 p i = p ( x i ) p_i=p\left(x_{i}\right) pi=p(xi) 。
例:
假设 x x x概率分布如下:
它的熵为
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.
2 熵函数性质
根据熵的定义,把熵看做关于p的函数,有如下性质:
- 熵函数为凹函数
- 随机变量取各个值的概率相等(均匀分布)时有极大值
- 在取某一个值的概率为1,取其他所有值的概率为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{array}{r} \sum_{i=1}^{n} x_{i}=1 \\ x_{i} \geq 0 \end{array}
∑i=1nxi=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 , 可以得到:
∂
L
∂
x
i
=
−
log
x
i
−
1
+
λ
=
0
⇒
log
x
i
=
λ
−
1
\frac{\partial L}{\partial x_{i}}=-\log x_{i}-1+\lambda=0 \\ \Rightarrow \log x_{i}=\lambda-1
∂xi∂L=−logxi−1+λ=0⇒logxi=λ−1
这意味着在极值点处所有的
x
i
x_{i}
xi 必须相等。对
λ
\lambda
λ 求偏导数并令其为 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=i
因此Hessian矩阵为
[
−
1
/
x
1
⋯
0
⋯
.
⋅
⋯
0
⋯
−
1
/
x
n
]
\left[\begin{array}{ccc} -1 / x_{1} & \cdots & 0 \\ \cdots & . \cdot & \cdots \\ 0 & \cdots & -1 / x_{n} \end{array}\right]
−1/x1⋯0⋯.⋅⋯0⋯−1/xn
由于
x
i
>
0
x_{i}>0
xi>0, 该矩阵负定, 熵是凹函数, 有极大值。 因此当
x
i
=
1
/
n
x_{i}=1 / n
xi=1/n 时熵有极大值。如果定义:
0
log
0
=
0
0 \log 0=0
0log0=0
显然它与下面的极限是一致的:
lim
x
→
0
x
log
x
=
0
\lim _{x \rightarrow 0} x \log x=0
x→0limxlogx=0
则当某一个
x
i
=
1
x_{i}=1
xi=1, 其他
x
j
=
0
,
j
≠
i
x_{j}=0, j \neq i
xj=0,j=i 的时熵有极小值 0
H
=
0
log
0
+
…
+
1
log
1
+
…
+
0
log
0
=
0
\begin{aligned} H &=0 \log 0+\ldots+1 \log 1+\ldots+0 \log 0 \\ &=0 \end{aligned}
H=0log0+…+1log1+…+0log0=0
除此情况之外, 只要满足
0
<
x
i
<
1
0<x_{i}<1
0<xi<1, 则
log
x
i
<
0
\log x_{i}<0
logxi<0 , 因此
−
x
i
log
x
i
>
0
-x_{i} \log x_{i}>0
−xilogxi>0
上面这些结果说明熵是非负的,当且仅当随机变量取某一值的概率为 1 , 取其他值的概率为 0 时熵有极小值 0 。此时随机变量退化成普通的变量, 取值固定。而当随机变量取所有值的概率相等时即均匀分布时熵有极大值。故熵的范围为:
0
≤
H
(
p
)
≤
log
n
.
0 \leq H(p) \leq \log n.
0≤H(p)≤logn.
二、交叉熵
1 定义
交叉熵的定义与熵类似, 不同的是定义在两个概率分布而不是一个概率分布之上。
对于离散型随机变量, 交叉熵定义为:
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
H(p, q)=-\sum_{x} p(x) \log q(x)
H(p,q)=−x∑p(x)logq(x)
其中
x
x
x 为离散型随机变量,
p
(
x
)
p(x)
p(x) 和
q
(
x
)
q(x)
q(x) 是它的两个概率分布。
对于连续型概率分布, 交叉熵定义为:
∫
x
p
(
x
)
log
q
(
x
)
d
x
=
E
p
[
−
log
q
]
\int_{x} p(x) \log q(x) d x=E_{p}[-\log q]
∫xp(x)logq(x)dx=Ep[−logq]
如果两个概率分布完全相等, 则交叉熵退化成熵。交叉熵衡量了两个概率分布的差异:
- 其值越大, 两个概率分布相差越大
- 其值越小,则两个概率分布的差异越小
2 数学性质
交叉熵函数有如下性质:
- 交叉熵损失函数是凸函数
- 当两个分布相等的时候, 交叉熵有极小值。
证明同样用拉格朗日乘子法,并验证函数凹凸性即可。
假设第一个概率分布固定即
p
(
x
)
p(x)
p(x) 为常数
a
i
a_i
ai, 此时交叉熵为如下形式的函数:
H
(
x
)
=
−
∑
i
=
1
n
a
i
log
x
i
H(x)=-\sum_{i=1}^{n} a_{i} \log x_{i}
H(x)=−i=1∑nailogxi
约束条件为:
∑
i
=
1
n
x
i
=
1
\sum_{i=1}^{n} x_{i}=1
i=1∑nxi=1
构造拉格朗日乘子函数
L
(
x
,
λ
)
=
−
∑
i
=
1
n
a
i
log
x
i
+
λ
(
∑
i
=
1
n
x
i
−
1
)
L(x, \lambda)=-\sum_{i=1}^{n} a_{i} \log x_{i}+\lambda\left(\sum_{i=1}^{n} x_{i}-1\right)
L(x,λ)=−i=1∑nailogxi+λ(i=1∑nxi−1)
对所有变量求偏导数, 并令偏导数为 0 , 有
−
a
i
x
i
+
λ
=
0
∑
i
=
1
n
x
i
=
1
∑
i
=
1
n
a
i
=
1
\begin{gathered} -\frac{a_{i}}{x_{i}}+\lambda=0 \\ \sum_{i=1}^{n} x_{i}=1 \\ \sum_{i=1}^{n} a_{i}=1 \end{gathered}
−xiai+λ=0i=1∑nxi=1i=1∑nai=1
最后可以解得
λ
=
1
x
i
=
a
i
\begin{aligned} \lambda &=1 \\ x_{i} &=a_{i} \end{aligned}
λxi=1=ai
交叉熵函数的Hessian矩阵为:
[
a
1
/
x
1
2
⋯
0
⋯
⋯
⋯
0
⋯
a
n
/
x
n
2
]
\left[\begin{array}{ccc} a_{1} / x_{1}^{2} & \cdots & 0 \\ \cdots & \cdots & \cdots \\ 0 & \cdots & a_{n} / x_{n}^{2} \end{array}\right]
a1/x12⋯0⋯⋯⋯0⋯an/xn2
该矩阵正定, 因此交叉熵损失函数是凸函数, 上面的极值点是极小值点。
‼️值得注意的是,如果 p p p随机分布,即使是p,q分布一致, H ( p , q ) H(p,q) H(p,q)的最小值还是大于0.
3直观理解
对于概率, 比较经典的理解是看做是重复试验无限次后事件频率会逼近的值, 是一个客观存在的值; 但是贝叶斯学派提出了另一种理解方式: 即将概率理解为我们主观上对事件发生的确信程度。
两种理解其实在逻辑上似乎并不互斥, 既可以有客观存在, 也可以有主观认识, 所以我们不妨假设:
- 针对同一个随机变量空间有两个分布, 分别记作 p 0 p_0 p0 和 p s ; p_s ; ps;
- p s ( x ) p_s(x) ps(x) 是我们主观认为 x x x 会发生的概率, 下标 s 代表 subjective;
- p o ( x ) p_o(x) po(x) 是客观上 x x x 会发生的概率, 下标。代表 objective。
这种情况下, 客观上这个随机事件
X
X
X 会给我们造成惊喜的期望应该是:
H
p
o
,
p
s
(
X
)
=
∫
p
o
(
x
)
log
1
p
s
(
x
)
d
x
H_{p_o, p_s}(X)=\int p_o(x) \log \frac{1}{p_s(x)} d x
Hpo,ps(X)=∫po(x)logps(x)1dx
可以理解为:我们带着某个主观认知去接触某个客观随机现象的时候, 会产生的平均惊喜度。
那什么时候交叉熵(也就是我们会获得的平均惊喜度)会大? 就是当我们主观上认为一个事情发生的概率很低(
1
/
p
s
(
x
)
1 / p_s(x)
1/ps(x) 很大),但是客观上发生概率很高
(
p
o
(
x
)
\left(p_o(x)\right.
(po(x) 很大) 的时候, 也就是主观认知和客观现实非常不匹配的时候。
而当我们主观认识和客观认识一致的时候,平均惊喜就会很小,所以交叉熵也很小,所以在机器学习中可以用交叉熵来作为损失函数。
4 应用:logistics回归
(1)交叉熵损失函数
在Logistics回归中,交叉熵损失函数定义为:
Loss
=
−
∑
i
=
1
n
y
i
log
y
i
′
\operatorname{Loss}=-\sum_{i=1}^{n} y_{i} \log y_{i}^{\prime}
Loss=−i=1∑nyilogyi′
其中:
y
i
y_i
yi 为标签值概率分布(取值为0或1),
y
i
′
y i^{\prime}
yi′ 为预值测概率分布,所以最小化Loss函数,等价于最小化交叉熵,而交叉熵取得最小时,预测值的概率分布与标签值的概率分布最接近!
事实上可以将 y i ′ = 1 1 + e − W T X y_i'=\frac{1}{1+e^{-W^TX}} yi′=1+e−WTX1,代入Loss函数,通过和上面类似的证明,可以证明:
- Loss函数的Hessian矩阵半正定,目标函数是凸函数。
- logistic回归求解的优化问题是不带约束条件的凸优化问题。
- 可以证明,如果使用欧氏距离作为目标函数则无法保证目标函数是凸函数。
这是使用交叉熵而不使用欧氏距离作为logistic回归的目标函数的主要原因。
(2)计算实例
假设有一个3分类问题, 某个样例的正确答案是 ( 1 , 0 , 0 ) (1,0,0) (1,0,0):
- 甲模型经过softmax回归之后的预测答案是 ( 0.5 , 0.2 , 0.3 ) (0.5,0.2,0.3) (0.5,0.2,0.3)
- 乙模型经过softmax回归之后的预测答案是 ( 0.7 , 0.1 , 0.2 ) (0.7,0.1,0.2) (0.7,0.1,0.2)
由交叉熵定义: H ( p , q ) = − ∑ x p ( x ) log q ( x ) 可得: H ( ( 1 , 0 , 0 ) , ( 0.5 , 0.2 , 0.3 ) ) = − log 0.5 ≈ 0.301 H ( ( 1 , 0 , 0 ) , ( 0.7 , 0.1 , 0.2 ) ) = − log 0.7 ≈ 0.155 \begin{aligned} 由交叉熵定义:\\ &\boldsymbol{H}(\boldsymbol{p}, \boldsymbol{q})=-\sum_{\boldsymbol{x}} \boldsymbol{p}(\boldsymbol{x}) \log \boldsymbol{q}(\boldsymbol{x}) \\ 可得:\\ &\boldsymbol{H}((1,0,0),({0 . 5}, {0 . 2}, {0 . 3}))=-\log 0.5 \approx 0.301 \\ &\boldsymbol{H}((1,0,0),(0.7,0.1,0.2))=-\log 0.7 \approx 0.155 \end{aligned} 由交叉熵定义:可得:H(p,q)=−x∑p(x)logq(x)H((1,0,0),(0.5,0.2,0.3))=−log0.5≈0.301H((1,0,0),(0.7,0.1,0.2))=−log0.7≈0.155
5 应用:softmax
softmax回归经常被用作神经网络的最后一层,完成多分类任务,现在在分类任务训练时采用的损失函数一般为交叉熵,原因如下:
- 在神经网络的早期,更多的使用了欧氏距离损失函数,后来对分类任务交叉熵使用的更多
- 对于分类问题,交叉熵一般比欧氏距离有更好的效果,可以收敛到更好的局部最优解。
假设神经网络的原始输出为
y
1
,
y
2
,
…
.
,
y
n
y_{1}, y_{2}, \ldots . , y_{n}
y1,y2,….,yn, 那么经过Softmax回归处理之后的输出为:
y
′
=
softmax
(
y
i
)
=
e
y
i
∑
j
=
1
n
e
y
j
y^{\prime}=\operatorname{softmax}\left(y_{i}\right)=\frac{e^{y_{i}}}{\sum_{j=1}^{n} e^{y_{j}}}
y′=softmax(yi)=∑j=1neyjeyi
以上可以看出:
∑
y
′
=
1
\sum y^{\prime}=1
∑y′=1
这也是为什么softmax层的每个节点的输出值成为了概率和为1的概率分布。
- 标签是 [ 0 , 0 , 1 , 0 , … . 0 , 0 ] [0,0,1,0, \ldots .0,0] [0,0,1,0,….0,0] 这种形式
- 通过softmax实际的输出是 [ 0.01 , 0.01 , 0.6 , … . 0.02 , 0.01 ] [0.01,0.01,0.6, \ldots .0 .02,0.01] [0.01,0.01,0.6,….0.02,0.01] 这种形式
所以可以用交叉熵作为损失函数,当交叉熵最小时,两个概率分布最相近,实际输出越接近标签!
三、KL散度
1 KL散度定义
有了以上信息论中的相关知识后, 可以进一步引出KL散度。KL 散度衡量的是两个概率分布之间的相对熵,它反映了从真实分布
P
P
P偏离到模型预测分布
Q
Q
Q时的额外代价。KL 散度用于量化两个概率分布之间的不对称差异,强调真实分布与预测分布的偏差。 KL散度定义为:
D
K
L
(
P
∥
Q
)
=
H
(
P
,
Q
)
−
H
(
P
)
=
∑
i
P
(
x
i
)
log
1
Q
(
x
i
)
−
∑
i
P
(
x
i
)
log
1
P
(
x
i
)
=
∑
i
P
(
x
i
)
[
log
P
(
x
i
)
−
log
Q
(
x
i
)
]
=
∑
i
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
=
E
x
∼
p
[
log
P
(
x
i
)
Q
(
x
i
)
]
\begin{aligned} D_{K L}(P \| Q) &=H(P, Q)-H(P) \\ &=\sum_i P\left(x_i\right) \log \frac{1}{Q\left(x_i\right)}-\sum_i P\left(x_i\right) \log \frac{1}{P\left(x_i\right)} \\ &=\sum_i P\left(x_i\right) [\log P\left(x_i\right)-\log Q\left(x_i\right)]\\ &=\sum_i P\left(x_i\right) \log \frac{P\left(x_i\right)}{Q\left(x_i\right)} \\ &=\mathbb{E}_{x\sim p}[\log \frac{P\left(x_i\right)}{Q\left(x_i\right)}] \end{aligned}
DKL(P∥Q)=H(P,Q)−H(P)=i∑P(xi)logQ(xi)1−i∑P(xi)logP(xi)1=i∑P(xi)[logP(xi)−logQ(xi)]=i∑P(xi)logQ(xi)P(xi)=Ex∼p[logQ(xi)P(xi)]
其中,
P
(
i
)
P(i)
P(i)是真实分布,
Q
(
i
)
Q(i)
Q(i)是模型预测分布。它表示在使用预测分布
Q
Q
Q代替真实分布
P
P
P时,损失了多少信息。
K
L
\mathrm{KL}
KL 散度的性质:
- 非对称性: D K L ( P ∥ Q ) ≠ D K L ( Q ∥ P ) D_{K L}(P \| Q) \neq D_{K L}(Q \| P) DKL(P∥Q)=DKL(Q∥P)
- D K L ( P ∥ Q ) ⩾ 0 D_{K L}(P \| Q) \geqslant 0 DKL(P∥Q)⩾0, 仅在 P = Q P=Q P=Q 时等于0
证明性质2:
D
K
L
(
P
∥
Q
)
=
∑
i
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
=
−
∑
i
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
D_{K L}(P \| Q)=\sum_i P\left(x_i\right) \log \frac{P\left(x_i\right)}{Q\left(x_i\right)}=-\sum_i P\left(x_i\right) \log \frac{Q\left(x_i\right)}{P\left(x_i\right)}
DKL(P∥Q)=i∑P(xi)logQ(xi)P(xi)=−i∑P(xi)logP(xi)Q(xi)
由于
log
\log
log 函数是凹的, 由 Jensen 不等式可得:
∑
i
λ
i
f
(
x
i
)
⩽
f
(
∑
i
λ
i
x
i
)
\sum_i \lambda_i f\left(x_i\right) \leqslant f\left(\sum_i \lambda_i x_i\right)
i∑λif(xi)⩽f(i∑λixi)
那么:
∑
i
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
⩽
log
(
∑
i
P
(
x
i
)
Q
(
x
i
)
P
(
x
i
)
)
=
log
(
∑
i
Q
(
x
i
)
)
=
log
1
=
0
\sum_i P\left(x_i\right) \log \frac{Q\left(x_i\right)}{P\left(x_i\right)} \leqslant \log \left(\sum_i P\left(x_i\right) \frac{Q\left(x_i\right)}{P\left(x_i\right)}\right)=\log \left(\sum_i Q\left(x_i\right)\right)=\log 1=0
i∑P(xi)logP(xi)Q(xi)⩽log(i∑P(xi)P(xi)Q(xi))=log(i∑Q(xi))=log1=0
因此:
D
K
L
(
P
∥
Q
)
=
−
∑
i
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
⩾
0
D_{K L}(P \| Q)=-\sum_i P\left(x_i\right) \log \frac{Q\left(x_i\right)}{P\left(x_i\right)} \geqslant 0
DKL(P∥Q)=−i∑P(xi)logP(xi)Q(xi)⩾0
2 直观理解
交叉熵可以衡量我们基于某种主观认识去感受客观世界时, 会产生的平均惊喜。根据上文对交叉熵数学性质的分析我们知道,即使主观和客观完全匹配 ——这时交叉熵等于信息熵 —— 只要事件仍然随机而非确定,就一定会给我们造成一定程度的惊喜,即不为 0。
那我们要怎么度量主观认识 和客观之间差异呢? 可以用当前"世界观 "产生的惊喜期望和完全正确认识事件时产生的惊喜期望的差值来衡量, 这个就是相对熵(常称作KL-散度), 通常写作:
D
K
L
(
p
o
∥
p
s
)
=
H
p
o
,
p
s
(
X
)
−
H
p
o
(
X
)
=
∫
p
o
(
x
)
log
1
p
s
(
x
)
d
x
−
∫
p
o
(
x
)
log
1
p
o
(
x
)
d
x
=
∫
p
o
(
x
)
log
p
o
(
x
)
p
s
(
x
)
d
x
\begin{aligned} D_{K L}\left(p_o \| p_s\right) & =H_{p_o, p_s}(X)-H_{p_o}(X) \\ & =\int p_o(x) \log \frac{1}{p_s(x)} d x-\int p_o(x) \log \frac{1}{p_o(x)} d x \\ & =\int p_o(x) \log \frac{p_o(x)}{p_s(x)} d x \end{aligned}
DKL(po∥ps)=Hpo,ps(X)−Hpo(X)=∫po(x)logps(x)1dx−∫po(x)logpo(x)1dx=∫po(x)logps(x)po(x)dx
当我们的主观认知完全匹配客观现实的时候(预测分布和真实分布一致), KL-散度应该等于 0 , 其它任何时候都会大于 0 。由于存在恒为正这一性质, KL-散度经常用于描述两个分布是否接近, 也就是作为两个分布之间 "距离"的度量; 不过由于运算不满足交换律(不对称) , 所以又不能完全等同于"距离"来理解。
3 应用场景
(1)交叉熵的应用
分类任务:交叉熵在分类任务中是常用的损失函数,特别是与 softmax 函数结合时使用。它用于衡量模型的预测分布与真实标签分布(通常是 one-hot 编码的分布)之间的差异,损失越小,说明模型的预测越接近真实标签。在例如 BERT 的预训练任务(MLM)、图像分类、文本分类等任务中,交叉熵损失用于直接指导模型参数优化。
机器学习中通常用交叉熵作为损失函数的原因在于,真实分布并不随参数变化,所以即使是优化KL-散度,对参数求导的时候也只有交叉熵的导数了。
(2) KL 散度的应用:
- 概率分布的差异衡量:KL 散度常用于衡量两个概率分布之间的差异,尤其是在生成模型和概率模型中应用广泛。
- 变分自编码器 (VAE):在 VAE 模型中,KL 散度用于将编码的隐变量分布 Q ( z ) Q(z) Q(z)(潜在变量的近似后验分布)与先验分布 P ( z ) P(z) P(z) 对齐,从而限制隐变量的分布与某个固定分布(如标准正态分布)之间的差异。
- 信息论和最优传输:在信息论中,KL 散度用来衡量两个分布之间的“相对熵”,表示用预测分布 Q Q Q 替代真实分布 P P P 时增加的“编码代价”。它也常被用于一些最优传输和分布拟合的任务中。



被折叠的 条评论
为什么被折叠?



