信息论和交叉熵损失函数

480 阅读8分钟

在机器学习和深度学习中,很多时候需要进行分类,这时会涉及到决策边界,比如sigmod激活函数;
但是当面对多分类的时候(比如经典的MNIST),我们需要预测每一个种类output的概率,比如softmax,这时候我们需要对:
信息论和交叉熵有一个清晰的认识
那么我们的文章将会对 信息论和交叉熵损失函数 进行一个讲解;

1.信息论
2.自信息
3.香农熵
4.交叉熵

1.信息论

1.1 信息论是从物理学中借鉴过来的,我们只讲其数学意义:

其实信息论是一种用来描述 概率分布或者蒋概率分布之间的相似性 的一种思想
信息论的核心思想就是用来表示 意外程度 ,即小概率事件发生的信息量大

  • 1.必然事件的信息量为0
  • 2.事件发生的概率越小,其提供的信息量就越大
  • 3.信息是具有增量的特征的,即同一事件,发生一次的信息量是 I I I I ,则重复投递两次的信息量是 2 I 2I 2I 2I
    那么为了实现我们的目的 将概率事件的信息量进行量化

2.自信息

就是单个事件的信息量的量化值

我们构建这样一个公式:
I (x) =−l og (p( x)) I(x)=−log(p(x)) I(x) = -log(p(x)) I ( x)= −lo g( p(x))

  • 这里 P (x) P(x) P(x) P ( x) 就是随机事件 X =x X=x X = x X = x 时候事件发生的概率
  • l og 对 数 函 数 式 增 函 数 , 那 么 − lo g 函 数 就 是 减 函 数 log对数函数式增函数,那么−log函数就是减函数 log对数函数式增函数,那么-log函数就是减函数 log对 数函数式增 函数, 那 么− l og函数 就是减函数 ,这样构建出来的函数就实现了我们的某种目的,随着概率的减小,信息量就越大
    但是自信息仅能预测一个事件的信息量
  • I (x) I(x) I(x) I ( x) 的单位是奈特 n at nat nat na t ,就是说1 n at nat nat na t 代表以 1 /e 1/e 1/e 1/ e 概率的一个事件的自信息量

3.香农熵

往往在我们的实际应用中我们需要使用 香农熵 来对整个事件概率分布中的不确定性总量进行量化

在这里我们可以借鉴 随机变量X的数学期望的求值公式
E (X )=∑ ∞ k =1 x k p k E(X)=∑k=1∞xkpk E(X) = \sum_{k = 1}^{∞}x_kp_k E( X)= k=1 ∑ ∞ ​ x k ​ p k ​
这里的香农熵其实可以看做是: 信息量I(x)I(x) I(x)I(x)的数学期望的求值公式
H (X )= ∑ n k =1 p k lo g( p k ) H(X)=∑k=1npklog(pk) H(X) = \sum_{k = 1}^{n}p_klog(p_k) H (X) = k= 1 ∑ n ​ p k ​ log( p k ​ )

  • 这里k是类别,n代表总类别

下面我们举例说明:

  • 数组1: 111111

  • 数组2: 111 222

  • 数组3: 11 22 33

我们来算数组1 ,2 和 3的香农熵

H (1) = −1∗log ( p(1)) = 1∗ 0 =0 H(1)=−1∗log(p(1))=1∗0=0 H(1)=-1*log(p(1)) = 1 * 0= 0 H (1)= −1 ∗log(p (1))= 1 ∗ 0= 0

H (2) = −1/2∗ l og (p( 1)) +(−1/ 2 ∗l o g(p(2 ) )= − 1/2∗I n1/ 2+1 /2∗ I n 1/2 ≈ 0.7 H(2)=−1/2∗log(p(1))+(−1/2∗log(p(2))=−1/2∗In1/2+1/2∗In1/2≈0.7 H(2)=-1/2*log(p(1)) + (-1/2*log(p(2)) = -1/2 * In1/2 +1/2 * In1/2 ≈ 0.7 H (2)= − 1/ 2∗ lo g( p(1) ) + (−1 /2 ∗ log (p (2)) = −1/2 ∗ In1 /2 + 1 /2 ∗ In1/ 2 ≈ 0 .7

H (3) = −1/3∗ l og (p( 1)) +(−1/ 3 ∗l o g(p(2 ) )+ ( −1/3∗ lo g ( p( 3))≈1 H(3)=−1/3∗log(p(1))+(−1/3∗log(p(2))+(−1/3∗log(p(3))≈1 H(3)=-1/3*log(p(1)) + (-1/3*log(p(2)) + (-1/3*log(p(3)) ≈ 1 H (3)= −1/ 3 ∗ lo g(p (1)) + (−1/3 ∗ log ( p(2)) + (−1 /3 ∗ log ( p(3)) ≈ 1

这样来看数组1的香农熵为0,则为必然事件,数组2居中,数组3最大,则其概率分布的概率最小

4.交叉熵

前面我们有讲到 自信息香农熵
那么如何用到机器学习和深度学习中呢,不着急慢慢往下看
我们记得之前在多类别分类的模型中我们有用到 s of tma x softmax softmax so ftmax 进行每个类别概率估计,然后取最大概率做为预测值
而当我们反向更新soft为激活函数的模型或者神经网络时候,是将交叉熵做为loss函数loss函数 loss函数loss函数进行梯度调节的

那么让我们聚焦交叉熵
在这之前我们需要看下 K L KL KL K L 散列,这是基于香农熵用来衡量对于同一个随机变量X的两个单独分布 P (X )和 Q(X ) P(X)和Q(X) P(X)和Q(X) P ( X)和Q( X) 的差异的途径:
D k l (P ∣∣Q )= E x −p [l og (P (x )/ Q(x ) )] =E x −p [ log (P (x ))−l og (P (x ))] Dkl(P∣∣Q)=Ex−p[log(P(x)/Q(x))]=Ex−p[log(P(x))−log(P(x))] D_{kl}(P||Q) = E_{x-p}[log(P(x)/Q(x))] = E_{x-p}[log(P(x))-log(P(x))] D kl ​ (P∣∣Q ) = E x−p ​ [log (P( x)/ Q(x ))] = E x−p ​ [lo g (P( x) ) − lo g( P(x )) ]
但是在深度学习中我们使用 K L KL KL KL 散列的变形,也就是交叉熵来作为某些场景的 l os s loss loss loss 函数,即:

H (P ,Q) =H (P )+D K L (P ∣∣Q ) H(P,Q)=H(P)+DKL(P∣∣Q) H(P,Q) = H(P) + D_{KL}(P||Q) H (P,Q )= H(P) + D KL ​ (P∣∣Q )
根据 K L KL KL K L 散列我们队上述公式进行变形:
H (P ,Q )= −E x −p [l o g P ( x )] +E x −p [ l o g P (x )]−E x −p [ l o g Q( x) ] H(P,Q)=−Ex−p[logP(x)]+Ex−p[logP(x)]−Ex−p[logQ(x)] H(P,Q) = -E_{x-p}[logP(x)] + E_{x-p}[logP(x)] - E_{x-p}[logQ(x)] H(P, Q) = −E x− p ​ [logP( x )]+ E x− p ​ [lo gP(x )]− E x− p ​ [l o gQ (x) ]
经过变形就得到:

H (P ,Q) =− E x −p [l og Q(x)] H(P,Q)=−Ex−p[logQ(x)] H(P,Q) = - E_{x-p}[logQ(x)] H (P,Q )= −E x−p ​ [log Q(x)]
接着,我们变化成易于理解的 l oss loss loss l oss 函数
H (P ,Q )= ∑ x P (x )l og Q( x) H(P,Q)=∑xP(x)logQ(x) H(P,Q) = \sum_{x}P(x)logQ(x) H (P, Q )= x ∑ ​ P( x )log Q(x )
到这里我们看到了我们熟悉的成本函数, s of tm ax softmax softmax s oft ma x 回归分类器的成本函数

接着我们探讨为什么使用这个成本函数

主要是softmax等多分类器,在评估真实值( y y y y )和预测值( y e xc p t yexcpt y^{excpt} y excp t )距离时,更多的是在评估概率之间的距离,这样使用传统的均方根误差做为 l oss loss loss l oss 函数毫无意义

我们来举个例子(以MNIST为例: 识别0~9的数字图片):
假设输出层是 s of tma x softmax softmax so ftmax 为激活函数:

那么我们假设用两组标签相同的实例 A 和B A和B A和B A和 B 来进行分析
首先我们的 l abel label label l a bel 都是0,所以真实值得向量组合是(1,0,0,0,0,0,0,0,0,0)

  • A的预测值向量组合(0.9,0.2,0.1,0,0,0,0,0,0,0)
  • B的预测值向量组合(0.8,0,0.1,0,0.5,0,0,0,0,0)

接着算A和B的交叉熵(也就是 l oss loss loss l o ss 函数) :
H (P ,Q) =−(1∗ log ( 0.9)+ 0∗l og (0.2)+0 ∗l o g( 0.1) + 7∗ ( 0∗ l og (0) )≈ 0.1 H(P,Q)=−(1∗log(0.9)+0∗log(0.2)+0∗log(0.1)+7∗(0∗log(0))≈0.1 H(P,Q) = -(1* log(0.9) + 0 * log(0.2) + 0 *log(0.1) + 7 * (0 * log(0)) ≈ 0.1 H (P, Q )= −( 1∗ l o g(0 .9) + 0∗ l o g(0 .2) + 0∗ l og (0. 1 )+ 7 ∗ (0 ∗ l og( 0) ) ≈ 0. 1
H (P ,Q )= −( 1∗ l o g ( 0.8 ) + 0 ∗ l o g ( 0.1 ) + 0 ∗ l o g ( 0.5 ) + 7 ∗ ( 0 ∗ l o g ( 0 ) ) ≈ 0.2 H(P,Q)=−(1∗log(0.8)+0∗log(0.1)+0∗log(0.5)+7∗(0∗log(0))≈0.2 H(P,Q) = -(1* log(0.8) + 0 * log(0.1) + 0 *log(0.5) + 7 * (0 * log(0)) ≈ 0.2 H( P , Q ) = − ( 1 ∗ l o g ( 0 . 8 ) + 0 ∗ l o g ( 0 . 1 ) + 0 ∗ l o g ( 0 . 5 ) + 7 ∗ ( 0 ∗ l o g ( 0 ) ) ≈ 0 . 2

  • P代表真实值
  • Q代表预测值
    因为 0.1 &lt;0.2 0.1&lt;0.2 0.1 &lt; 0.2 0.1 < 0 .2 ,所以明显第一组要由于第二组

补充一点:交叉熵 H (P ,Q) H(P,Q) H(P,Q) H ( P,Q) 不是对称的,所以 H (P ,Q) ≠H (Q, P) H(P,Q)≠H(Q,P) H(P,Q) ≠ H(Q,P) H (P,Q ) ̸ ​ = H(Q, P) 所以要注意P和Q的顺序,一版情况下,P代表真实值,Q代表预测值

最近很热,大家谨防中暑,但是学习不能断 ^^