交叉熵损失函数

sigmoid,softmax,推导,好处

Posted by MrTriste on December 8, 2017

交叉熵损失函数

以前没有特别注意这个东西,今天看XGBoost的时候,看到它里面classification的softmax的代码,不知道为什么这里可以用softmax,但是看到softmax这个函数非常亲切,看PRML时,里面的LR部分提到过,跟sigmoid函数差不多性质,但是类比过来还是有些问题,本质上还是没有深刻理解。

sigmoid函数用于二分类,softmax用于多分类。

下面做一个总结。

LR里面计算loss function 时,用的是交叉熵损失函数。

我们首先要知道sigmoid和softmax函数是可以作为概率的(高斯分布的前提下,具体说明可见PRML第四章)

  1. 某个样本的交叉熵损失函数: 这里要说一下 是我们的预测值,对每个类别 都会预测一个,比如这里可以是 ,在XGBoost中可以直接是各个叶子节点的score和;

    代表是否是第类,只能为0或1;

    是我们用softmax计算得到的这个样本的特征判断为第类的概率;

    是某个样本;

    是第 类的参数(具体可见PRML4.2.1)。

  2. 类预测值 的softmax:

  1. 我们对一个样本 进行预测,关于每个类别 都有一个预测值为,同时可以计算概率,但我们要根据预测值 计算损失函数loss,然后更新相应参数来减小误差,因此要求导。

    下面对loss关于第 类的预测值求导:

    求导可参见https://www.zhihu.com/question/23765351/answer/240869755

    因为一个样本只属于一个类,设为,因此loss只有 不为0,其他y都为0,所以交叉熵损失函数就是第i个样本的真实类别的loss,即

    • 第一种情况:k == i

    • 第二种情况:k != i

  • 交叉熵有什么好处?

    使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。

    一般的均方误差求导后有 ,很多部分都接近于0,用导数来更新参数会很慢,因此用交叉熵误差函数会改变这一点,因为导数是, 只与误差有关。

    具体可见这篇文章http://blog.csdn.net/u012162613/article/details/44239919

Reference

交叉熵代价函数

如何通俗的解释交叉熵与相对熵?

交叉熵损失函数的推导