经典损失函数——交叉熵损失函数(cross-entropy loss function)

为了更好的理解交叉熵的意义,先介绍一下相对熵的概念

1、相对熵

  • 基本概念
    相对熵又称为KL散度(Kullback–Leibler divergence),用来描述两个概率分布的差异性。假设有对同一变量 x x x q ( x ) q(x) q(x) p ( x ) p(x) p(x)两个概率分布,那么两者之间的相对熵可由以下定义:
    D K L ( p ∥ q ) = ∑ i = 1 N p ( x i ) log ⁡ ( p ( x i ) q ( x i ) ) D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right) DKL(pq)=i=1Np(xi)log(q(xi)p(xi))
    对于实际应用, p ( x ) p(x) p(x)是目标分布, q ( x ) q(x) q(x)是预测的匹配分布。

  • 理解相对熵(参考)
    因为 p ( x ) p(x) p(x)是目标分布,所以用 p p p来表示该事件是最好的。但是现在用了 q ( x ) q(x) q(x),多了一些不确定性因素,这个增加的信息量就是相对熵。

  • 性质
    相对熵有一个性质:两个分布差异越大,KL散度越大。实际应用需要两个分布尽可能的相等,于是就需要KL散度尽可能的小

  • 相对熵的非负性
    根据Jensen不等式,当 f f f是一个凸函数时,满足以下函数:
    f ( θ 1 x 1 + … + θ n x n ) ≤ θ 1 f ( x 1 ) + … + θ n f ( x n ) , 0 ≤ θ i ≤ 1 , θ 1 + … + θ n = 1 f\left(\theta_{1} x_{1}+\ldots+\theta_{n} x_{n}\right) \leq \theta_{1} f\left(x_{1}\right)+\ldots+\theta_{n} f\left(x_{n}\right) ,0 \leq \theta_{i} \leq 1, \theta_{1}+\ldots+\theta_{n}=1 f(θ1x1++θnxn)θ1f(x1)++θnf(xn),0θi1,θ1++θn=1
    对照相对熵的表达式,这里做几个映射关系:

Jensen不等式 相对熵
θ i \theta_{i} θi p ( x i ) p(x_i) p(xi)
x i x_{i} xi q ( x i ) p ( x i ) \frac{q\left(x_{i}\right)}{p\left(x_{i}\right)} p(xi)q(xi)
f ( ) f() f() − l o g ( ) -log() log()

根据上表中的关系得到下式:
D K L ( p ∥ q ) = ∑ i = 1 N p ( x i ) log ⁡ ( p ( x i ) q ( x i ) ) = ∑ i = 1 N p ( x i ) ⋅ − log ⁡ ( q ( x i ) p ( x i ) ) ≥ − log ⁡ ( ∑ i = 1 N p ( x i ) ⋅ q ( x i ) p ( x i ) ) = 0 D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)=\sum_{i=1}^{N} p\left(x_{i}\right) \cdot-\log \left(\frac{q\left(x_{i}\right)}{p\left(x_{i}\right)}\right) \geq -\log \left(\sum_{i=1}^{N} p\left(x_{i}\right) \cdot \frac{q\left(x_{i}\right)}{p\left(x_{i}\right)}\right)=0 DKL(pq)=i=1Np(xi)log(q(xi)p(xi))=i=1Np(xi)log(p(xi)q(xi))log(i=1Np(xi)p(xi)q(xi))=0
显然,只有当 q ( x ) q(x) q(x)= p ( x ) p(x) p(x)时,才有最小值。

  • 与交叉熵的关系
    D K L ( p ∥ q ) = ∑ 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 ( p , q ) D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)=\sum_{i=1}^{N} p\left(x_{i}\right) \log p\left(x_{i}\right)-\sum_{i=1}^{N} p\left(x_{i}\right) \log q\left(x_{i}\right)=-H(p)+H(p, q) DKL(pq)=i=1Np(xi)log(q(xi)p(xi))=i=1Np(xi)logp(xi)i=1Np(xi)logq(xi)=H(p)+H(p,q)
    上式中的 H ( p , q ) H(p, q) H(p,q),而当一个目标事件确定后, H ( p ) H(p) H(p)便为一个常数,所以最小化相对熵的问题化简成了计算 H ( p , q ) H(p, q) H(p,q)的最小值。

2、交叉熵

  • 简单概念
    交叉熵是信息熵论中的概念,它原本是用来估算平均编码长度的。在深度学习中,可以看作通过概率分布 q ( x ) q(x) q(x)表示概率分布 p ( x ) p(x) p(x)的困难程度。其表达式为:
    H ( p , q ) = ∑ i = 1 n p ( x i ) log ⁡ 1 q ( x i ) = − ∑ i = 1 n p ( x i ) log ⁡ q ( x i ) H(p, q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \frac{1}{q\left(x_{i}\right)}=-\sum_{i=1}^{n} p\left(x_{i}\right) \log {q\left(x_{i}\right)} H(p,q)=i=1np(xi)logq(xi)1=i=1np(xi)logq(xi)
  • 简单性质
    交叉熵刻画的是两个概率分布的距离,也就是说交叉熵值越小(相对熵的值越小),两个概率分布越接近(该说法需要证明)。
    下面将给出两个具体样例来直观地说明通过交叉熵可以判断预测答案和真实答案之间的距离。假设有个三分类问题,某个正确答案和一个经过 s o f t m a x softmax softmax回归后的预测答案如下:
x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3
p ( x i ) p(x_i) p(xi) 1 0 0
q 1 ( x i ) q_1(x_i) q1(xi) 0.5 0.4 0.1
q 2 ( x i ) q_2(x_i) q2(xi) 0.8 0.1 0.1

那么 p ( x ) p(x) p(x) q 1 ( x ) q_1(x) q1(x)的交叉熵为:
H ( ( 1 , 0 , 0 ) , ( 0.5 , 0.4 , 0.1 ) ) = − ( 1 × log ⁡ 0.5 + 0 × log ⁡ 0.4 + 0 × log ⁡ 0.1 ) ≈ 0.3 \mathrm{H}((1,0,0),(0.5,0.4,0.1))=-(1 \times \log 0.5+0 \times \log 0.4+0 \times \log 0.1) \approx 0.3 H((1,0,0),(0.5,0.4,0.1))=(1×log0.5+0×log0.4+0×log0.1)0.3
p ( x ) p(x) p(x) q 2 ( x ) q_2(x) q2(x)的交叉熵为:
H ( ( 1 , 0 , 0 ) , ( 0.8 , 0.1 , 0.1 ) ) = − ( 1 × log ⁡ 0.8 + 0 × log ⁡ 0.1 + 0 × log ⁡ 0.1 ) ≈ 0.1 \mathrm{H}((1,0,0),(0.8,0.1,0.1))=-(1 \times \log 0.8+0 \times \log 0.1+0 \times \log 0.1) \approx 0.1 H((1,0,0),(0.8,0.1,0.1))=(1×log0.8+0×log0.1+0×log0.1)0.1
从直观上可以看到第二个预测的结果要优于第一个,并且通过计算交叉熵,结果也是一致的。

  • TensorFlow中实现交叉熵
cross_entropy = -tf.reduce_mean( y_ * tf.log(tf.clip.by_value(y, 1e-10, 1.0)))

其中y_代表正确结果,y代表预测结果。

你可能感兴趣的:(深度学习)