站点图标 AI技术聚合

[机器学习基础]为什么要使用 softmax 和 交叉熵 ?

在做数据拟合时,如果我们在线性函数中加入高斯噪声,通过极大似然的方法我们可以推导出均方误差(mean squared error,MSE)损失函数。从直观上来看,MSE通过最小化所有点到直线距离平方的加和来确定参数。

在做数据分类的时候,如果我们也想用距离的平方和作为损失函数,那就不是特别好,毕竟离分割超平面越远,损失应该越小。

对于分类问题,最经典的模型就是支持向量机(support vector machine,SVM),它的分割超平面由支撑向量所决定,非支撑向量的微小振动并不会改变最终模型。

今天我们从概率的角度介绍另一个分类标准。

在分类问题中使用交叉熵损失函数的两个合理解释

我们设训练集,其中是one-hot标签,设共有m个类别(因此),我们期望学习到一个函数来使得属于每一类的概率。

如何学习?(我们假设函数已经经过处理使得各分量加和为1)

对于第一种方法,我们可以使用最大似然:

(注意这里是one-hot编码,因此内积其实只有一小项相乘,在数值上等于 $P(x_i) $ 的第项,所在的类)

最大似然等效于最小化负对数似然:

(因为是one-hot,所以我们可以把从内积中提出来,这里对向量求对数等于对每一项求对数)

第二种方法,由于向量都满足各分量的加和为1,因此可以看成是一种分布,在信息论中衡量分布的损失经常用交叉熵损失函数:

我们发现这给出了与最大似然相同的结果,我们通常将此损失函数称为交叉熵损失函数。

函数的预处理

一般我们神经网络某层的输出并不总是满足各分量的和为1,目前使用最多的处理方法是使用softmax的方法。

我浏览了很多讲解softmax的合理性的文章,其中这篇文章 https://intellipaat.com/community/2015/why-is-the-cross-entropy-method-preferred-over-mean-squared-error-in-what-cases-does-this-doesnt-hold-up 提到的softmax函数的二维形式与sigmoid很类似让我很受启发(我刚看了一下百度百科也有类似的介绍):

事实上,这两个函数的导数很好地表示:

我们推导出交叉熵损失函数:(假设

我们下面对sigmoid函数求导:(这个推导网上很多,就不重复了)

我们发现这两个函数对原变量求导,得到导数值在计算过程中都不必知道原变量值的大小,只需要知道自身的值(交叉熵损失函数需要知道外部标签)即可,这在实现误差的反向传播(BP)算法的时候十分方便。

对于sigmoid函数,我们有它的改进版tanh和softsign ,可以参考https://baike.baidu.com/item/Sigmoid%E5%87%BD%E6%95%B0/7981407#%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0

对于Softmax来说,就目前的需求来说,它完全满足,因此目前来看它是合理的。我们可以等将来我们有更多的需求的时候再来构造新的传播函数。

文章出处登录后可见!

已经登录?立即刷新
退出移动版