为什么交叉熵常被用作分类问题的损失函数

1. 前言

在深度学习领域,交叉熵(Cross Entropy)常被用作分类问题的损失函数。
为知其所以然,本文将详细讲解交叉熵熵(Entropy)KL散度(Kullback-Leibler Divergence) 的基本概念,并分析常用交叉熵作为分类问题损失函数的原因。

2. 交叉熵(Cross Entropy)

设向量 p = [ p 1 , p 2 , ⋯   , p m ] T \bm{p}=[p_1,p_2,\cdots,p_m]^T p=[p1,p2,,pm]T q = [ q 1 , q 2 , ⋯   , q m ] T \bm{q}=[q_1,q_2,\cdots,q_m]^T q=[q1,q2,,qm]T表示两个 m m m维的离散概率分布。其中,向量 p \bm{p} p q \bm{q} q的元素都非负,且 ∑ j = 1 m p j = 1 , ∑ j = 1 m q j = 1 \sum_{j=1}^mp_j=1,\sum_{j=1}^mq_j=1 j=1mpj=1,j=1mqj=1。则向量 p \bm{p} p q \bm{q} q之间的交叉熵定义为:
H ( p , q ) = − ∑ j = 1 m p j ⋅ ln ⁡ q j                                ( 1 ) H(\bm{p},\bm{q})=-\sum_{j=1}^mp_j\cdot\ln{q_j}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(1) H(p,q)=j=1mpjlnqj                              (1)

在分类问题中,向量 p \bm{p} p一般是训练数据的标签,即一个独热(one-hot)向量。向量 q \bm{q} q一般是神经网络前向计算的输出;
很容易记忆和理解向量 p \bm{p} p q \bm{q} q与数据标签、神经网络输出的对应关系:因为 ln ⁡ 0 = − ∞ , ln ⁡ 1 = 0 \ln{0}=-\infty,\ln{1}=0 ln0=,ln1=0,且标签是一个某个元素值为1,其余元素值均为0的独热向量,因此计算神经网络输出与数据标签之间交叉熵时,会依照如上处理。

3. 熵(Entropy)

熵是交叉熵的一种特例: H ( p , p ) = − ∑ j = 1 m p j ⋅ ln ⁡ p j H(\bm{p},\bm{p})=-\sum_{j=1}^mp_j\cdot\ln{p_j} H(p,p)=j=1mpjlnpj是概率分布 p \bm{p} p的熵,简写为 H ( p ) H(\bm{p}) H(p)
熵可以用来衡量概率分布 p \bm{p} p的信息量,详细解释见我的另一篇博客小样本学习(Few-Shot Learning)(二)中3.1.2 Entropy Regularization部分。

4. KL散度(Kullback-Leibler Divergence)

KL散度也被称作相对熵(Relative Entropy),用来衡量两个概率分布的区别有多大。对于离散分布,KL散度的定义为:
K L ( p , q ) = ∑ j = 1 m p j ⋅ ln ⁡ p j q j                         ( 2 ) KL(\bm{p},\bm{q})=\sum_{j=1}^mp_j\cdot\ln\frac{p_j}{q_j}~~~~~~~~~~~~~~~~~~~~~~~(2) KL(p,q)=j=1mpjlnqjpj                       (2)
其中,约定 ln ⁡ 0 0 = 0 \ln\frac{0}{0}=0 ln00=0

因为向量 p \bm{p} p q \bm{q} q是两个离散概率分布,因此 p j ∈ [ 0 , 1 ] , q j ∈ [ 0 , 1 ] , f o r   j = 1 ∼ m p_j\in[0,1],q_j\in[0,1],for~j=1\sim{m} pj[0,1],qj[0,1],for j=1m ∑ j = 1 m p j = 1 , ∑ j = 1 m q j = 1 \sum_{j=1}^mp_j=1,\sum_{j=1}^mq_j=1 j=1mpj=1,j=1mqj=1,KL散度总是非负的。又因为 ln ⁡ 1 = 0 \ln{1}=0 ln1=0,根据式(2)可知,当概率分布 p \bm{p} p q \bm{q} q越接近(即向量 p \bm{p} p q \bm{q} q的每个对应分量值趋近于相等)则 K L ( p , q ) KL(\bm{p},\bm{q}) KL(p,q)越小,而且 K L ( p , q ) = 0 KL(\bm{p},\bm{q})=0 KL(p,q)=0当且仅当 p = q \bm{p}=\bm{q} p=q,即两个概率分布一致时,它们的KL散度达到最小值

5. 常用交叉熵作为分类问题损失函数的原因

KL散度可以衡量两个概率分布的区别大小,将KL散度作为损失函数,更新模型参数来最小化损失,可以使神经网络输出的概率分布与数据标签更接近。
根据交叉熵、熵和KL散度的定义可知:
K L ( p , q ) = ∑ j = 1 m p j ⋅ ln ⁡ p j q j                                                = ∑ j = 1 m p j ⋅ ( ln ⁡ p j − ln ⁡ q j )                 = ∑ j = 1 m p j ln ⁡ p j − ∑ j = 1 m p j ln ⁡ q j             = − ∑ j = 1 m p j ln ⁡ q j − ( − ∑ j = 1 m p j ln ⁡ p j ) = H ( p , q ) − H ( p )                            KL(\bm{p},\bm{q})=\sum_{j=1}^mp_j\cdot\ln\frac{p_j}{q_j}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\ =\sum_{j=1}^mp_j\cdot(\ln{p_j}-\ln{q_j})~~~~~~~~~~~~~~~\\ =\sum_{j=1}^mp_j\ln{p_j}-\sum_{j=1}^mp_j\ln{q_j}~~~~~~~~~~~\\ =-\sum_{j=1}^mp_j\ln{q_j}-(-\sum_{j=1}^mp_j\ln{p_j})\\ =H(\bm{p},\bm{q})-H(\bm{p})~~~~~~~~~~~~~~~~~~~~~~~~~~ KL(p,q)=j=1mpjlnqjpj                                              =j=1mpj(lnpjlnqj)               =j=1mpjlnpjj=1mpjlnqj           =j=1mpjlnqj(j=1mpjlnpj)=H(p,q)H(p)                          
由于熵 H ( p ) H(\bm{p}) H(p)是不依赖于 q \bm{q} q的常数,一旦固定 p \bm{p} p,则KL散度等于交叉熵加上常数。
由于在分类问题中,向量 p \bm{p} p一般是训练数据的标签,即 p \bm{p} p是固定不变的,因此关于 q \bm{q} q优化KL散度等价于优化交叉熵,因此常用交叉熵作为分类问题的损失函数。

你可能感兴趣的:(深度学习,人工智能,深度学习,交叉熵,熵,KL散度)