损失函数具体形式多种多样,先介绍 SVM 损失函数,SVM 的损失函数想要 SVM 在正确分类上的得分始终比不正确分类上的得分高出一个边界值,定义如下:
yi 代表的是正确类别的标签。举例说明:假设有3个分类,得到score=[13,-7,11],真实标签是yi=0,所以:
SVM的损失函数想要正确分类类别 yi 的分数比不正确类别分数高,而且至少要高10。如果不满足这点,就开始计算损失值。关于0的阈值:max(0,-)函数,被称为折叶损失(hinge loss)。
如果不使用正则化,那么上面的损失函数就会有问题:假设有一个数据集和一个权重集 W 能够正确地分类每个数据(即所有的边界都满足,对于所有的i都有 Li=0)。问题在于 W 并不唯一:可能有很多相似的W都能正确地分类所有的数据。
例子:如果 W 能够正确分类所有数据,即对于每个数据,损失值都是0。那么当 r > 1 时,任何数乘 rW 都能使得损失值为 0,因为这个变化将所有分值的大小都均等地扩大了,所以它们之间的绝对差值也扩大了。举个例子,如果一个正确分类的分值和举例它最近的错误分类的分值的差距是15,对 W 乘以2将使得差距变成30。但是整体的损失值还是为0,这就导致 W 不唯一。
所以,通过向特定的权重 W 添加一些偏好,对其他的不添加,以此来消除模糊性。方法是向损失函数增加一个 正则化惩罚 ,最常用的正则化惩罚是 L2 范式,L2 范式通过对所有参数进行逐元素的平方惩罚来抑制大数值的权重,L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。:
上面的表达式中,将 W 中所有元素平方后求和。注意正则化函数不是数据的函数,仅基于权重。完整的目标函数如下:
将其展开完整公式是:
其中,N 是训练集的数据量,下图是引入正则化带来的良好的性质:
需要注意的是,和权重不同,偏差没有这样的效果,因为它们并不控制输入维度上的影响强度。因此通常只对权重 W 正则化,而不正则化偏差 b。
交叉熵是用来判定实际的输出与期望的输出的接近程度。交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布 p 为期望输出(标签),概率分布 q 为实际输出,H(p,q) 为交叉熵。
第一种交叉熵函数的形式为:
下图举例说明:
第二种交叉熵损失函数形式:
这种形式主要是针对于二分类的情况,二分类模型最后通常会通过 Sigmoid 函数输出一个概率值。这里只是将两种情况(标签为0和1的时候)整合在一起。但是这里注意的是,上面公式是通过极大似然估计来推导得出,在机器学习里面,基本上是把极大似然估计跟交叉熵联系在一起的同一概念。下图是极大似然估计推导过程:
再来看一下 softmax 的损失函数:
以多分类来看,交叉熵损失函数为:
对于比较常见的 one-hot 编码来看,yi 只有一个元素值为1,其他的都是0,所以 Softmax 的损失函数求和号去掉,就转换为最开始的形式。
下图有助于区分这 Softmax和SVM这两种分类器:
注意点:
1. 斯坦福CS231n assignment1:softmax损失函数求导
2. CS231n课程笔记翻译:线性分类笔记
3. 深度学习中softmax交叉熵损失函数的理解