交叉熵损失函数

损失函数之交叉熵

  • 目录
    • 摘要
    • 在定义的角度说交叉熵的脉络
    • 详细推理交叉熵
    • 结语

目录

摘要

  交叉熵可以很好的表示样本所在总体的预测分布与当前分布之间的差异性,因此众多行业所涉及的深度学习模型,在模型训练时都采用交叉熵来做其损失函数。
  本博客会对交叉熵做详细的介绍。首先在定义的角度来介绍交叉熵的来龙去脉,然后详细推理交叉熵;本博客是在拜读了大量大佬的介绍之后,结合自己的理解写的,在此对大佬们表示感谢;本人是纯理科生,推理过程、叙述方式都很直接,有何不妥,请大家不吝赐教!

在定义的角度说交叉熵的脉络

  交叉熵作为深度学习里面一种重要的损失计算方式,可以很好的表示样本所在总体的预测分布与当前分布之间的差异性。交叉熵来自于KL散度,KL散度又称相对熵,表示两个相互独立的概率分布之间的差异性。KL散度是基于信息熵来计算的,信息熵表示某事对某人而言会出现某种结果的不确定性。信息熵是信息量的数学期望,信息量度量的是一个具体事件发生了所带来的信息,而信息熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。信息量通俗的讲,是指信息所消除的人们对认识上的不确定性的大小”。既然根源是信息,那信息的定义是什么?信息,即在一种情况下能减少不确定性的任何事物。

详细推理交叉熵

  是指混乱度,所以熵越小越好。
  要让熵越来越小,就要知道为啥会混乱,是因为事物的不确定性太多了,所以我们要消除不确定性。
  那我们怎么消除不确定性呢,我们可以通过信息输入来消除不确定性。
  为啥信息能消除不确定性呢,是因为信息带着信息量,信息自带的属性就是信息量。
  那啥是信息量,通俗的讲,信息量是指信息所消除的人们对某事物在认识上的不确定性的大小。
  一条信息提供的信息量减少一部分不确定性,两条减少两部分,如果我们获得了全部信息,就能消除所有不确定性了,如果在股票预测上这么牛,那巴菲特就要主动请你吃午饭了。
  既然信息能消除不确定性,那能不能量化一下信息与不确定性之间的关系呢?能,先来个例子:
  我们掷硬币,掷一次硬币有两种结果—正和反,掷两次硬币有四种结果—正反,反正,正正,反反,掷三次硬币有八种结果,嗯,掷n次硬币的结果数对应的是2的n次方。简单总结一下,假设 x i x_i xi表示掷i次硬币, x i x_i xi也叫信息量, a a a表示掷一次硬币可能出现的结果数, y i y_i yi表示掷 x i x_i xi次硬币对应的结果数,那么, y i = a x i (1) y_i=a^{x_i} \tag{1} yi=axi(1)
  即信息量 x i x_i xi消除的不确定性的大小为 y i y_i yi
  我们再考虑一个事实,针对于信息量 x i x_i xi等于3(掷三次硬币),可能的结果数 y i y_i yi为8,每一种结果发生的概率 p ( x i ) p(x_i ) p(xi) 1 8 \frac 1 8 81,我们可以得到,
y i = 1 p ( x i ) (2) y_i=\frac 1 {p(x_i )} \tag{2} yi=p(xi)1(2)
  信息量度量的是一个具体事件发生了所带来的信息,而熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。说白了,信息熵H就是信息量的数学期望,即公式 ( 3 ) (3) (3)
H ( X ) = ∑ 0 ≤ i ≤ n p ( x i ) ⋅ x i (3) H(X)=\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot x_i } \tag{3} H(X)=0inp(xi)xi(3)
  综合公式 ( 1 ) (1) (1)、公式 ( 2 ) (2) (2)和公式 ( 3 ) (3) (3)我们可以得到,
H ( X ) = ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a 1 p ( x i ) (4) H(X)=\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \frac 1 {p(x_i )} } \tag{4} H(X)=0inp(xi)logap(xi)1(4)
  进一步,我们可以看出 y i y_i yi属于掷 x i x_i xi次硬币这个事件所服从的分布, p ( x i ) p(x_i ) p(xi)表示的是“掷 x i x_i xi次硬币”这个事件中每一种结果发生的概率,也就是说掷硬币这个事件的信息熵是 y i y_i yi取对数后乘以其对应的概率然后求和得到的,ok,我们假设 y i y_i yi服从的分布为 P P P,那 p ( x i ) p(x_i ) p(xi)不用说肯定也是基于分布 P P P;那在我们进行模型训练的时候,希望预测得到的结果 y i ^ \hat{y_i} yi^也服从 P P P,但是实际上预测得到的结果 y i ^ \hat{y_i} yi^服从的分布是 Q Q Q, y i ^ \hat{y_i} yi^对应的事件的每种结果发生概率是 q ( x i ) q(x_i ) q(xi),那度量预测值和真实值之间的差异,本质上就是度量分布 Q Q Q P P P的差异。
  预测值的分布只能通过预测结果来表示,即 Q Q Q是未知的,但是有一点我们清楚,我们的目的是让 Q Q Q无限接近 P P P,那我们不妨假设 y i ^ \hat{y_i} yi^服从样本的真实分布 P P P,对应的信息熵为,
H ^ ( X ) = ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a 1 q ( x i ) (5) \hat{H}(X)=\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \frac 1 {q(x_i )} } \tag{5} H^(X)=0inp(xi)logaq(xi)1(5)

PS: 为了帮助理解,在此简单推导一下公式 ( 5 ) (5) (5):
H ^ ( X ) = ∑ 0 ≤ i ≤ n q ( x i ) ⋅ log ⁡ a y i ^ = ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a y i ^ = ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a 1 q ( x i ) (5的推导) \hat{H}(X)=\sum_{\mathclap{0\le i\le n}}{q(x_i ) \centerdot \log_a\hat{y_i} } =\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \hat{y_i} } =\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \frac 1 {q(x_i )} }\tag{5的推导} H^(X)=0inq(xi)logayi^=0inp(xi)logayi^=0inp(xi)logaq(xi)1(5)
  此时很明朗了,要求P与Q的差异,我们直接求它俩对应的信息熵的差值就可以了,如下:
H ( X ) − H ^ ( X ) = ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a 1 p ( x i ) − ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a 1 q ( x i ) = − ∑ 0 ≤ i ≤ n p ( x i ) ⋅ log ⁡ a p ( x i ) q ( x i ) (6) {H}(X)-\hat{H}(X)=\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \frac 1 {p(x_i )} }-\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \frac 1 {q(x_i )} } =-\sum_{\mathclap{0\le i\le n}}{p(x_i ) \centerdot \log_a \frac {p(x_i )} {q(x_i )} }\tag{6} H(X)H^(X)=0inp(xi)logap(xi)10inp(xi)logaq(xi)1=0inp(xi)logaq(xi)p(xi)(6)
  朋友们,《信息论》中有一个概念,KL散度,KL散度就是表示两个独立分布之间的差异性,一起看一下(注意,公式 ( 7 ) (7) (7)中的变量符号与本博客中符号的含义不同,在此主要是让大家看KL散度的形式,如果你非要较真符号的含义,那你就认为 ( 7 ) (7) (7)中的 i i i与本博客中的 x i x_i xi一样),
D ( P ∣ ∣ Q ) = ∑ i ∈ X P ( i ) ⋅ log ⁡ P ( i ) Q ( i ) (7) D(P||Q)=\sum_{\mathclap{i \in X}}{P(i) \centerdot \log \frac {P(i)} {Q(i)} } \tag{7} D(PQ)=iXP(i)logQ(i)P(i)(7)
   ( 6 ) (6) (6) ( 7 ) (7) (7)像不像?像,但是差点啥,对,差的是式中对数的底数不同,再就是正负号不同, ( 6 ) (6) (6)中的底数是 a a a ( 7 ) (7) (7)中的底数是2,虽然没写但是的确是2,不信你去翻课本。那么相差一个底数到底差距多大呢,这么说吧,不大,就一个常数倍,一起算算,
∀ x , l o g a x l o g 2 x = l o g a 2 (8) \forall x, \frac {log_a{x}} {log_2{x}}=log_a{2} \tag{8} x,log2xlogax=loga2(8)
so,常数倍,别care。
  下面,我们把KL散度的公式展开一下,
D ( P ∣ ∣ Q ) = ∑ i ∈ X P ( i ) ⋅ log ⁡ P ( i ) Q ( i ) = ∑ i ∈ X P ( i ) ⋅ log ⁡ P ( i ) − ∑ i ∈ X P ( i ) ⋅ log ⁡ Q ( i ) = − H ( X ) − ∑ i ∈ X P ( i ) ⋅ log ⁡ Q ( i ) D(P||Q)=\sum_{\mathclap{i \in X}}{P(i) \centerdot \log \frac {P(i)} {Q(i)}} =\sum_{\mathclap{i \in X}}{P(i) \centerdot \log{P(i)}}-\sum_{\mathclap{i \in X}}{P(i) \centerdot \log{Q(i)}} =-H(X)-\sum_{\mathclap{i \in X}}{P(i) \centerdot \log{Q(i)}} D(PQ)=iXP(i)logQ(i)P(i)=iXP(i)logP(i)iXP(i)logQ(i)=H(X)iXP(i)logQ(i)
  我们希望KL散度越小越好,即 − ∑ i ∈ X P ( i ) ⋅ log ⁡ Q ( i ) -\sum_{\mathclap{i \in X}}{P(i) \centerdot \log{Q(i)}} iXP(i)logQ(i)越小越好,这就是交叉熵的函数了。
  补充一下,深度学习中用到的交叉熵中对数的底数是 e e e,不过这都无所谓了,因为,常数倍。

结语

读懂这篇博客,你对交叉熵的理解已经很深了!不难,但是需要点数学基础和概率基础,欢迎大家交流~

你可能感兴趣的:(交叉熵,损失函数,Cross,Entropy,Loss,深度学习,人工智能,算法,经验分享)