先说熵(entropie),熵最早出现在热力学中,用于度量一个热力学系统的无序程度。后来熵被引入到信息论里面,表示对不确定性的测量。
为了弄清楚交叉熵,首先需要弄清楚交叉熵相关的几个概念。
信息量用于刻画消除随机变量X在x处的不确定性所需的信息量的大小。也就是说不确定性越高,信息量越大。信息量的数学表达式如下,其中 p p p 为随机变量 X X X 的概率分布,即 p ( x ) p(x) p(x) 为随机变量 X X X 在 X = x X=x X=x 处的概率密度函数值。
I ( x ) = − log p ( x ) = log 1 p ( x ) I(x) = -\log{p(x)} = \log{\frac{1}{p(x)}} I(x)=−logp(x)=logp(x)1
信息熵也叫熵。上面的信息量定义了随机变量 X X X 在一个点处的香农信息量,那么如何衡量随机变量 X X X(或整个样本空间)的总体香农信息量呢?下面就要引出随机变量 X X X 的信息熵的概念,或概率分布 p p p 的信息熵。信息熵 H ( p ) H(p) H(p) 是香农信息量 I ( x ) I(x) I(x) 的数学期望,即所有 X = x X=x X=x 处的香农信息量的和,由于每一个 x x x 出现的概率不一样(用概率密度函数值 p ( x ) p(x) p(x) 衡量),需要用 p ( x ) p(x) p(x) 加权求和。因此信息熵是用于刻画消除随机变量 X X X 的不确定性所需要的总体信息量的大小。其数学定义如下:
H ( p ) = H ( X ) = E x p [ I ( x ) ] = − ∑ i = 1 N p ( x i ) log p ( x i ) H(p) = H(X) = E_{x~p}[I(x)] = -\sum_{i=1}^{N}p(x_i)\log{p(x_i)} H(p)=H(X)=Ex p[I(x)]=−i=1∑Np(xi)logp(xi)
相对熵,又称KL散度(Kullback-Leibler divergence),是两个概率分布 p 和 q 之间的差异的非对称性的度量。在信息论中,相对熵等价于两个概率分布的信息熵的差值。
D K L ( p , q ) = E x p [ log p ( x ) q ( x ) ] = E x p [ log p ( x ) − log q ( x ) ] = ∑ i = 1 N p ( x i ) [ log p ( x ) − log q ( x ) ] \begin{aligned} D_{KL}(p,q) &= E_{x~p}[\log{\frac{p(x)}{q(x)}}] \\ &= E_{x~p}[\log{p(x) - \log{q(x)}}] \\ &= \sum_{i=1}^{N}p(x_i)[\log{p(x) - \log{q(x)}}] \end{aligned} DKL(p,q)=Ex p[logq(x)p(x)]=Ex p[logp(x)−logq(x)]=i=1∑Np(xi)[logp(x)−logq(x)]
交叉熵是 Shannon 信息论中的一个重要概念,主要用于度量两个概率分布间的差异性信息。在信息论中,交叉熵表示两个概率分布 p, q,其中 p 表示真实分布,q 表示拟合分布,在同一组事件中,其中用拟合分布 q 来表示某个事件发生所需要的平均比特数。
更进一步,假设 q ( x ) q(x) q(x) 是用来拟合 p ( x ) p(x) p(x) 的概率分布, x x x 属于 p p p 的样本空间,交叉熵用于衡量 q q q 在拟合 p p p 的过程中,用于消除不确定性而充分使用的信息量大小(理解为衡量 q q q 为了拟合 p p p 所付出的努力,另外注意交叉熵定义里的“充分使用”和信息熵定义里的“所需”的区别,“充分使用”不一定能达到全部,“所需”是指全部)。
由于在每一个点 X = x X=x X=x 处 q q q 的香农信息量为 − log q ( x ) -\log{q(x)} −logq(x),也就是在点 X = x X=x X=x 处, q q q 消除不确定性而充分使用的信息量为 − log q ( x ) -\log{q(x)} −logq(x)(理解为衡量 q q q 在 $ X=x$ 处为了拟合 p p p 所作的努力),那么就可以计算出在整个样本空间上 q q q 消除不确定性而充分使用的总体信息量,即 − log q ( x ) -\log{q(x)} −logq(x) 的数学期望,由于每个 x x x 的权重为 p ( x ) p(x) p(x),因此交叉熵 H ( p , q ) H(p,q) H(p,q) 为:
H ( p , q ) = E x p [ I ( x ) ] = − ∑ i = 1 N p ( x i ) log q ( x i ) H(p,q) = E_{x~p}[I(x)] = -\sum_{i=1}^{N}p(x_i)\log{q(x_i)} H(p,q)=Ex p[I(x)]=−i=1∑Np(xi)logq(xi)
由于交叉熵可以度量两个概率分布间的的差异性信息,常被应用于分类任务中,度量标签分布与预测分布的差异。
需要注意的是交叉熵的输入应该是概率分布,所以需要在交叉熵损失函数前加入 sigmoid 或者 softmax 函数将网络的输出转化为概率分布(即0 到 1 之间)。
下面我们以神经网络最后一层输出为例,看一下交叉熵的具体应用场景:
(1)在神经网络的最后一层(输入为 x i x_i xi,权重为 w i w_i wi) 里,我们首先得到了每个类别的得分 scores ( S i S_i Si);
(2)这个得分经过 sigmoid(或 softmax) 函数的变换会获得一个概率输出 ( P i P_i Pi);
(3)将得到的概率输出与真实类别 ( y i y_i yi) 的 one hot 形式进行交叉熵损失函数的计算。
二分类任务下的交叉熵损失函数可以表达如下:
L o s s = − ∑ i = 1 2 y i log P i = − [ y l o g P + ( 1 − y ) l o g ( 1 − P ) ] (2.1.1) \begin{aligned} Loss&=-\sum_{i=1}^{2}y_i\log{P_i} \tag{2.1.1}\\ &=-[ylogP + (1-y)log(1-P)] \end{aligned} Loss=−i=1∑2yilogPi=−[ylogP+(1−y)log(1−P)](2.1.1)
L o s s = − ∑ i = 1 C y i log P i (2.2.1) \begin{aligned} Loss&=-\sum_{i=1}^{C}y_i\log{P_i} \tag{2.2.1}\\ \end{aligned} Loss=−i=1∑CyilogPi(2.2.1)
从上面的损失函数可以看出, L o s s Loss Loss 的取值总为正,而且当 P i P_i Pi 趋近 y i y_i yi 时 L o s s Loss Loss 趋近于 0。
下面透过交叉熵损失函数的求导结果来看看交叉熵在反向传播过程中的表现。
对于二分类问题一般采用 sigmoid 函数将 score 映射为概率。 sigmoid 函数的表达式如下:
σ ( x ) = 1 1 + e − x (3.1.1) \sigma(x) = \frac{1}{1 + e^{-x}}\tag{3.1.1} σ(x)=1+e−x1(3.1.1)
对交叉熵损失函数进行求导如下:
∂ L ∂ w i = ∂ L ∂ P ∂ P ∂ S ∂ S ∂ w i (3.1.2) \begin{aligned} \frac{\partial{L}}{\partial{w_i}} = \frac{\partial{L}}{\partial{P}}\frac{\partial{P}}{\partial{S}}\frac{\partial{S}}{\partial{w_i}} \tag{3.1.2}\\ \end{aligned} ∂wi∂L=∂P∂L∂S∂P∂wi∂S(3.1.2)
其中
∂ L ∂ P = − y P + 1 − y 1 − P ∂ P ∂ S = σ ( S ) ( 1 − σ ( S ) ) ∂ S ∂ w i = x i (3.1.3) \begin{aligned} \frac{\partial{L}}{\partial{P}} &= -\frac{y}{P} + \frac{1-y}{1-P}\tag{3.1.3} \\ \frac{\partial{P}}{\partial{S}} &= \sigma(S)(1-\sigma(S)) \\ \frac{\partial{S}}{\partial{w_i}} &= x_i \\ \end{aligned} ∂P∂L∂S∂P∂wi∂S=−Py+1−P1−y=σ(S)(1−σ(S))=xi(3.1.3)
将式 3.1.3 带入 式3.1.2 可得
∂ L ∂ w i = [ − y P + 1 − y 1 − P ] ∗ σ ( S ) ∗ ( 1 − σ ( S ) ) ∗ x i = [ − y σ ( S ) + 1 − y 1 − σ ( S ) ] ∗ σ ( S ) ∗ ( 1 − σ ( S ) ) ∗ x i = [ − y ∗ ( 1 − σ ( S ) ) + ( 1 − y ) ∗ σ ( S ) ] ∗ x i = ( σ ( S ) − y ) ∗ x i \begin{aligned} \frac{\partial{L}}{\partial{w_i}} &= [-\frac{y}{P} + \frac{1-y}{1-P}]*\sigma(S)*(1-\sigma(S))*x_i\\ &= [-\frac{y}{\sigma(S)} + \frac{1-y}{1-\sigma(S)}]*\sigma(S)*(1-\sigma(S))*x_i\\ &= [-y*(1-\sigma(S)) + (1-y)*\sigma(S)]*x_i \\ &=(\sigma(S)-y)*x_i \\ \end{aligned} ∂wi∂L=[−Py+1−P1−y]∗σ(S)∗(1−σ(S))∗xi=[−σ(S)y+1−σ(S)1−y]∗σ(S)∗(1−σ(S))∗xi=[−y∗(1−σ(S))+(1−y)∗σ(S)]∗xi=(σ(S)−y)∗xi
从上面可以看出,交叉熵权重学习的速率受到 ( σ ( S ) − y ) (\sigma(S)-y) (σ(S)−y) 的影响,在误差较大时有更大的学习速度,误差较小时有较小的学习速度,这个性质很关键,这也是交叉熵和 MSE 相比的一个优点。
对于多分类问题一般采用 softmax 函数将 score 映射为概率。 softmax 函数的表达式如下:
y i = e x i ∑ k = 1 C e x k (3.2.1) y_i = \frac{e^{x_i}}{\sum _{k = 1}^{C}e^{x_k}}\tag{3.2.1} yi=∑k=1Cexkexi(3.2.1)
其中 C 为预测的 class 数量, k 的取值为 1 到 C。
具体到这里就是
P i = e S i ∑ k = 1 C e S k (3.2.2) P_i = \frac{e^{S_i}}{\sum _{k = 1}^{C}e^{S_k}}\tag{3.2.2} Pi=∑k=1CeSkeSi(3.2.2)
对损失函数的求导和上面的类似:
∂ L ∂ w i = ∂ L ∂ P m ∂ P m ∂ S n ∂ S n ∂ w i (3.2.3) \begin{aligned} \frac{\partial{L}}{\partial{w_i}} = \frac{\partial{L}}{\partial{P_m}}\frac{\partial{P_m}}{\partial{S_n}}\frac{\partial{S_n}}{\partial{w_i}} \tag{3.2.3}\\ \end{aligned} ∂wi∂L=∂Pm∂L∂Sn∂Pm∂wi∂Sn(3.2.3)
根据式 2.2.1,对 softmax 进行求导。
∂ L ∂ S i = − ∑ i = 1 C y i P i ∂ P i ∂ S j (3.2.4) \begin{aligned} \frac{\partial{L}}{\partial{S_i}} &= -\sum_{i = 1}^{C} \frac{y_i}{P_i}\frac{\partial P_i}{\partial S_j}\tag{3.2.4} \\ \end{aligned} ∂Si∂L=−i=1∑CPiyi∂Sj∂Pi(3.2.4)
下面就是对 softmax 进行求导了。
$$
\begin{aligned}
\frac{\partial{P_i}}{\partial{S_j}} &= \frac{\partial{\frac{e^{S_i}}{\sum _{k = 1}{C}e{S_k}}}}{\partial{S_j}}\tag{3.2.5} \
&= \frac{(e^{S_i})’\sum _{k = 1}{C}e{S_k} - e^{S_i}(\sum _{k = 1}{C}e{S_k})’}{(\sum _{k = 1}{C}e{S_k})^2} \
\end{aligned}
$$
∂ P i ∂ S j = e S i ∑ k = 1 C e S k − e S i e S j ( ∑ k = 1 C e S k ) 2 = e S i ∑ k = 1 C e S k − e S i ∑ k = 1 C e S k e S j ∑ k = 1 C e S k = P i − P i P j = P i ( 1 − P j ) (3.2.6) \begin{aligned} \frac{\partial{P_i}}{\partial{S_j}} &= \frac{e^{S_i}\sum _{k = 1}^{C}e^{S_k} - e^{S_i}e^{S_j}}{(\sum _{k = 1}^{C}e^{S_k})^2} \tag{3.2.6}\\ &= \frac{e^{S_i}}{\sum _{k = 1}^{C}e^{S_k}} - \frac{e^{S_i}}{\sum _{k = 1}^{C}e^{S_k}} \frac{e^{S_j}}{\sum _{k = 1}^{C}e^{S_k}} \\ &= P_i-{P_i}{P_j} \\ &= P_i(1-P_j) \end{aligned} ∂Sj∂Pi=(∑k=1CeSk)2eSi∑k=1CeSk−eSieSj=∑k=1CeSkeSi−∑k=1CeSkeSi∑k=1CeSkeSj=Pi−PiPj=Pi(1−Pj)(3.2.6)
∂ e S i ∂ S j = 0 (3.2.7) \frac{\partial{e^{S_i}}}{\partial{S_j}} = 0 \tag{3.2.7} ∂Sj∂eSi=0(3.2.7)
因此
∂ P i ∂ S j = e S i ∑ k = 1 C e S k − e S i e S j ( ∑ k = 1 C e S k ) 2 = − P i P j (3.2.8) \begin{aligned} \frac{\partial{P_i}}{\partial{S_j}} &= \frac{e^{S_i}\sum _{k = 1}^{C}e^{S_k} - e^{S_i}e^{S_j}}{(\sum _{k = 1}^{C}e^{S_k})^2} \tag{3.2.8}\\ &= -P_i{P_j}\\ \end{aligned} ∂Sj∂Pi=(∑k=1CeSk)2eSi∑k=1CeSk−eSieSj=−PiPj(3.2.8)
结合式 3.2.6 和 3.2.8 , 式 3.2.4 可得
∂ L ∂ S j = − ∑ i = 1 C y i P i ∂ P i ∂ S j = − ∑ i = 1 C y i P i ∂ P i ∂ S j = − [ ∑ i = j y i P i ∂ P i ∂ S j ] − [ ∑ i ≠ j C y i P i ∂ P i ∂ S j ] = − [ y i P i P i ( 1 − P j ) ] i = j + [ ∑ i ≠ j C y i P i P i P j ] = − [ y i ( 1 − P j ) ] i = j + [ ∑ i ≠ j C y i P j ] = − y j + y i P j + [ ∑ i ≠ j C y i P j ] = − y j + [ ∑ i = 0 C y i P j ] = − y j + P j [ ∑ i = 0 C y i ] = − y j + P j ∗ 1 = P j − y j (3.2.9) \begin{aligned} \frac{\partial{L}}{\partial{S_j}} &= -\sum_{i = 1}^{C} \frac{y_i}{P_i} \frac{\partial P_i}{\partial S_j} \tag{3.2.9} \\ &= -\sum_{i = 1}^{C} \frac{y_i}{P_i}\frac{\partial P_i}{\partial S_j} \\ &= -[\sum_{i = j} \frac{y_i}{P_i}\frac{\partial P_i}{\partial S_j}] - [\sum_{i \neq j}^{C} \frac{y_i}{P_i}\frac{\partial P_i}{\partial S_j}] \\ &= -[\frac{y_i}{P_i} P_i(1-P_j)]_{i=j} + [\sum_{i \neq j}^{C} \frac{y_i}{P_i}P_i{P_j}] \\ &= -[{y_i}(1-P_j)]_{i=j} + [\sum_{i \neq j}^{C} {y_i}{P_j}] \\ &= -y_j + y_i{P_j} + [\sum_{i \neq j}^{C} {y_i}{P_j}] \\ &= -y_j + [\sum_{i = 0}^{C} {y_i}{P_j}] \\ &= -y_j + P_j[\sum_{i = 0}^{C} {y_i}] \\ &= -y_j + P_j * 1 \\ &= P_j - y_j \end{aligned} ∂Sj∂L=−i=1∑CPiyi∂Sj∂Pi=−i=1∑CPiyi∂Sj∂Pi=−[i=j∑Piyi∂Sj∂Pi]−[i=j∑CPiyi∂Sj∂Pi]=−[PiyiPi(1−Pj)]i=j+[i=j∑CPiyiPiPj]=−[yi(1−Pj)]i=j+[i=j∑CyiPj]=−yj+yiPj+[i=j∑CyiPj]=−yj+[i=0∑CyiPj]=−yj+Pj[i=0∑Cyi]=−yj+Pj∗1=Pj−yj(3.2.9)
另外
∂ S j ∂ w i = x i (3.2.10) \frac{\partial{S_j}}{\partial{w_i}} = x_i \tag{3.2.10} ∂wi∂Sj=xi(3.2.10)
综合式 3.2.3, 3.2.9 和 3.2.10 可得
∂ L ∂ w i = ( P j − y j ) x i (3.2.11) \begin{aligned} \frac{\partial{L}}{\partial{w_i}} = (P_j - y_j)x_i \tag{3.2.11}\\ \end{aligned} ∂wi∂L=(Pj−yj)xi(3.2.11)