交叉熵(cross entropy)与相对熵(relative entropy,KL divergence)的理解

交叉熵(cross entropy)

交叉熵在机器学习中的地位十分重要,常在Logistic回归或者神经网络中作为Loss Function来使用,下面先详细谈一谈交叉熵的定义。
假设现在有关于样本集的两个概率分布 p ( x ) p(x) q ( x ) q(x) ,其中 p ( x ) p(x) 为真实分布, q ( x ) q(x) 为非真实的分布(可以理解为我们通过该样本集训练得到的分布)。如果我们用真实分布 p ( x ) p(x) 来编码该样本,则编码的期望长度为:
H ( p ) = x p ( x ) l o g ( 1 p ( x ) ) H(p)=\sum_xp(x)log(\frac 1{p(x)})
但是真实分布往往是不可知的,这时我们可以用非真实分布 q ( x ) q(x) 来计算来自真实分布 p ( x ) p(x) 的平均编码长度,这就是交叉熵:
H c r o s s = x p ( x ) l o g ( 1 q ( x ) ) H_{cross}=\sum_xp(x)log(\frac 1{q(x)})
因为用 q ( x ) q(x) 来编码的样本来自于分布 p ( x ) p(x) ,所以上述式子中求期望的概率为 p ( x ) p(x)
举个例子,考虑一个随机变量 x x ,真实分布 p ( x ) ( 1 2 , 1 4 , 1 8 , 1 8 ) p(x)为(\frac 12, \frac 14, \frac 18, \frac 18) ,非真实分布 q ( x ) ( 1 4 , 1 4 , 1 4 , 1 4 ) q(x)为(\frac 14, \frac 14, \frac 14, \frac 14) ,则依据真实分布求得的平均编码长度为 H ( p ) = 1.75 b i t s H(p) = 1.75bits ,交叉熵为:
H c r o s s = 1 2 l o g 2 4 + 1 4 l o g 2 4 + 1 8 l o g 2 4 + 1 8 l o g 2 4 = 2 b i t s H_{cross}=\frac 12 log_24+\frac 14log_24+\frac 18log_24+\frac 18 log_24=2bits

相对熵(relative entropy)

相对熵也称为KL散度(Kullback-Leibler divergence),在机器学习中,相对熵的概念同样也非常重要。
假设 p ( x ) q ( x ) p(x)、q(x) 是离散变量 X X 中取值的两个概率分布模型,则我们定义 p p q q 的相对熵为:
D K L ( p q ) = x p ( x ) l o g ( p ( x ) q ( x ) ) D_{KL}(p||q)=\sum_xp(x)log(\frac {p(x)}{q(x)})
相对熵具有以下几条性质:

  1. 如果 p ( x ) p(x) q ( x ) q(x) 两个分布相同,那么相对熵为0
  2. 相对熵不具有对称性,即 D K L ( p q ) D K L ( q p ) D_{KL}(p||q)\neq D_{KL}(q||p)
  3. D K L ( p q ) 0 D_{KL}(p||q)\ge 0
    关于性质3的证明如下:
    D K L ( p q ) = x p ( x ) l o g ( p ( x ) q ( x ) ) = x p ( x ) l o g ( q ( x ) p ( x ) ) l o g [ x p ( x ) ( q ( x ) p ( x ) ) ] = l o g [ x q ( x ) ] = 0 ( x q ( x ) = 1 ) \begin{aligned} D_{KL}(p||q)&=\sum_x p(x)log(\frac {p(x)}{q(x)})\\ &=-\sum_x p(x)log(\frac {q(x)}{p(x)})\\ &\ge -log[\sum_xp(x)(\frac {q(x)}{p(x)})]\\ &=-log[\sum_x q(x)]\\ &=0(因为\sum_x q(x)=1) \end{aligned}

为了进一步理解相对熵的作用,我们将相对熵的公式进行展开:
D K L ( p q ) = x p ( x ) l o g ( p ( x ) q ( x ) ) = x p ( x ) l o g ( p ( x ) ) x p ( x ) l o g ( q ( x ) ) = x p ( x ) l o g ( q ( x ) ) [ x p ( x ) l o g ( p ( x ) ) ] = H c r o s s H ( p ) \begin{aligned} D_{KL}(p||q)&=\sum_x p(x)log(\frac {p(x)}{q(x)})\\ &=\sum_x p(x)log(p(x))-\sum_x p(x)log(q(x))\\ &=-\sum_x p(x)log(q(x))-[-\sum_x p(x)log(p(x))]\\ &=H_{cross}-H(p) \end{aligned}
通过上述推导,我们可以看出, p p q q 的相对熵就等于交叉熵与 p p 的熵之差。即用真实分布 q ( x ) q(x) 得到的平均码长比真实分布 p ( x ) p(x) 得到的平均码长多出的比特数就是相对熵。
我们已经证明了相对熵总是大于0的,并且可以直观的看出,当非真实分布 q ( x ) q(x) 越接近真实分布 p ( x ) p(x) 时,相对熵的值越接近0。

交叉熵和相对熵在机器学习中的应用

接着谈一谈相对熵和交叉熵在机器学习中的应用。在机器学习中,我们希望构建的模型在训练数据上学到的分布 P ( m o d e l ) P(model) 和真实的数据分布 P ( r e a l ) P(real) 越接近越好,即相对熵越小越好。
在实际的应用中,完整数据集的真实分布是没法得到的,所以我们在训练模型时,往往考虑的是得到的模型的分布 P ( m o d e l ) P(model) 与训练数据的分布 P ( t r a i n ) P(train) 越接近越好,这里存在一个假设作为前提,即训练数据是从总体分布中独立同分布采样得到的。
上述观点可以描述如下:

  1. 学习的目的,希望得到一个与真实分布一致的分布模型: p ( m o d e l ) p ( r e a l ) p(model)\simeq p(real)
  2. 由于真实分布未知,用训练数据的分布来近似表示真实分布: p ( t r a i n ) p ( r e a l ) p(train)\simeq p(real)
  3. 退而求其次,希望得到一个与训练数据分布一致的分布模型: p ( m o d e l ) p ( t r a i n ) p(model)\simeq p(train)

根据之前的描述,我们可以知道,要使 p ( m o d e l ) p(model) p ( t r a i n ) p(train) 越接近,就是要使相对熵 D K L ( p ( t r a i n ) p ( m o d e l ) ) D_{KL}(p(train)||p(model)) 最小,假设 p ( m o d e l ) p(model) 由参数 θ \theta 确定,则 θ \theta 可根据以下关系求解:
min θ D K L ( p ( t r a i n ) p ( m o d e l ) ) = min θ H c r o s s H ( p ( t r a i n ) ) \begin{aligned} &\min_{\theta}\quad D_{KL}(p(train)||p(model))\\ =&\min_{\theta}\quad H_{cross}-H(p(train)) \end{aligned}
由于训练数据的分布 p ( t r a i n ) p(train) 是已知的,所以 H ( p ( t r a i n ) ) H(p(train)) 可以求出,是个常数,因此上述求解过程等价于求解使交叉熵 H c r o s s H_{cross} 最小的 θ \theta
min θ H c r o s s \min_{\theta}\quad H_{cross}

下面以最常见的二项Logistic回归为例,说明上述过程。
二项Logistic回归是一种分类模型,由条件概率分布 P ( Y X ) P(Y|X) 表示,这里随机变量 X X 的取值为实向量, Y Y 取值为1或0,我们构建的 P ( m o d e l ) P(model) 的形式为:
{ P ( Y = 1 x ) = e x p ( ω x + b ) 1 + e x p ( ω x + b ) P ( Y = 0 x ) = 1 1 + e x p ( ω x + b ) ω b \begin{cases} P(Y=1|x)=\frac {exp(\omega\cdot x+b)}{1 + exp(\omega\cdot x+b)}\\ \\ P(Y=0|x)=\frac {1}{1+exp(\omega\cdot x + b)} \end{cases} \\ \quad \\其中需要求解的参数为\omega和b
训练数据的分布 P ( t r a i n ) P(train) 可以表示为:
P ( Y = 1 X = x i ) = y i P ( Y = 0 X = x i ) = 1 y i \begin{aligned} &P(Y=1|X=x_i)=y_i\\ &P(Y=0|X=x_i)=1-y_i \end{aligned}

猜你喜欢

转载自blog.csdn.net/xhj_enen/article/details/87858573