交叉熵损失函数被广泛的运用于各种神经网络的训练目标函数,今天我们来深度刨析一番这一函数的优势何在,它又是从何而来?
在一步步介绍到交叉熵损失函数之前,先让我们来看一下最初的方差损失函数,为什么我们需要更优的交叉熵损失函数?先了解方差损失函数有助于我们更好的把握交叉熵损失函数的优势与性能。现在我们假设有一个独立的多输入单输出神经元的结构如下:
其中输入向量 X=(x1,x1,...,xn) ,权重系数 W=(w1,w2,...,wn) , 偏置b,激活函数 σ 为 sigmoid 函数 。由此我们可以得到该神经元的实际输出函数如下:
有了上面的基础,现在我们就可以给出最基础的方差损失函数
上式中, y 为我们期望的输出,在训练神经网络的过程中,我们通过梯度下降算法来更新 W 和 b ,这一过程中,我们需要分别求损失函数 C 对 W 和 b 的偏导如下:
其中 η 为自行设置的迭代步长,这里我们又需要了解一下激活函数 sigmoid 的性质,其函数曲线如下:
从上图我们可以看出来, 激活函数 sigmoid 的变化空间集中在0附近,与0的距离越远,函数的变化越小,即导数越小。这一性质会导致 σ′ 在 Z 取绝大多数值的时候会非常小,从而使 W 和 b 更新的非常慢,而交叉熵损失函数正是为了解决这一问题而被引入神经网络的优化过程。
看完了方差损失函数,我们先不急着说交叉熵损失函数,别急,我们还需要了解一下可以使交叉损失函数更方便应用的一些神经网络设置与技巧。
我们可以先回忆一下我们平时使用的二分类器,通常我们使用0表示“是“,1表示“不是“,这其实也是一种编码,我们称其为自然编码。而我们要说的独热编码是这样的:“01“表示“是“,“10“表示“不是“。说到这里大家应该明白了,独热编码是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
做过逻辑回归分类问题的同学应该知道,在logistic regression二分类问题中,我们使用 sigmoid 函数将输入 WX+b 映射到(0,1)区间中,从而得到输入样本属于某个类别的概率。将这一思想推广到多分类问题中,我们就可以使用SoftMax函数来实现,对输出的值归一化为概率值。
这里假设在进入SoftMax函数之前,已有模型输出,一个输入样本的输出个数为C(在独热编码下即为类别数),记输出为 a1,a2,...,ac ,对于每个样本,它属于类别 i 的概率为:
通过上式,即SoftMax函数,可以保证 ∑Ck=1yi=1 ,即属于各个类别的概率和为1。
千呼万唤始出来,终于要讲到交叉熵损失函数的概念了。在信息论中,熵是对信息量的一个度量,我们先来介绍一下什么是信息量。
假设 X 是一个离散型随机变量,其取值集合为 χ , X 的概率密度函数为 P(x)=Pr(X=x),xϵχ , 于是,我们可以定义事件 X=x0 的信息量为:
小宝贝考试及格的概率是0.9
骏骏哥哥考试及格的概率是0.6
则“小宝贝考试及格“这一事件带给我们的信息量(这里以e为底)是 −loge(0.9)=0.105
而“骏骏哥哥考试及格“这一事件带给我们的信息量是 −loge(0.6)=0.511
对此,我们可以理解为,一个事件发生的概率越大,则它所携带的信息量就越小,当 P(x0=1) 时,熵将等于0,也就是说该事件的发生不会导致任何信息量的增加。
有了信息量的基础,我们就可以较好的理解熵的概念。对于一个随机变量 X ,它的所有可能取值的信息量的期望 E[I(x)] 就称为熵,其数学定义为:
如果 p(x) 是连续型随机变量的概率密度函数,则可以类似的定义熵为:
相对熵是一个非常容易和交叉熵弄混的概念,相对熵又称为KL散度,KL距离,是两个随机分布间的距离的度量。记为 DKL(p||q) ,它所描述的是当真实分布为 p 时,分布 q 的失效性(越大越失效)。数学描述如下:
终于说到重头戏了,假设有两个分布 p,q ,则它们在给定样本集上的交叉熵定义如下:
特别的,在logistic regression中,我们有
p :真实样本分布,服从参数为 p 的0-1分布,即 x ~ B(1,p)
q :待估计的模型,服从参数为 q 的0-1分布,即 x ~ B(1,q)
两者的交叉熵为:
现在我们可以回答一开始的问题:交叉熵损失函数相比于方差损失函数好在哪里?
让我们对交叉熵损失函数C求偏导(y为期望输出,a为实际输出):