2线性分类器基本原理-2.2线性分类器之SVM和折叶损失(Hinge Loss)

图像分类器模型的整体结构:
2线性分类器基本原理-2.2线性分类器之SVM和折叶损失(Hinge Loss)

损失函数:

从上一节定义了图像像素值到所属类别的评分函数(score function),该函数的参数是权重矩阵W。在函数中,数据(xi,yi)是给定的,不能修改。但是我们可以调整权重矩阵这个参数,使得评分函数的结果与训练数据集中图像的真实类别一致,即评分函数在正确的分类的位置应当得到最高评分(score)。
2线性分类器基本原理-2.2线性分类器之SVM和折叶损失(Hinge Loss)

回到之前那张猫的图像分类例子,它有针对猫、狗、船三个类别的分数。我们看到例子中权重值非常差,因为猫分类的得分非常低(-96.8),而狗(437.9)和船(61.95)比较高。我们将使用损失函数(Loss Function)(有时候也叫代价函数Cost Function或目标函数Objective)来衡量我们队结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差异越大,损失函数输出越大,反之越小。

多类支持向量机的损失 Muliticlass Support Vector Machine Loss):
损失函数的具体形式多种多样。首先,介绍常用的多类支持向量机(SVM)损失函数。SVM的损失函数想要SVM正确分类上的得分始终比不正确分类上的得分高出一个边界值Δ。我们可以把损失函数想象成一个人,这位SVM先生(或者女士)对于结果又自己的品味,如果某个结果能使得损失值更低,那么SVM就更加喜欢它。

让我们更精确一些。回忆一下,第i个数据中包含图像xi的像素和代表正确类别的标签yi。评分函数输入像素数据,然后通过公式f(xi,W)来计算不同分类类别的分值。这里我们将分值简写为s。比如,针对第j个类别的得分就是第j个元素:sj=f(xi,W)j。针对第i个数据的多类SVM的损失函数定义如下:
Li=jyimax(0,sjsyj+Δ)

那么在这次模型中,我们面对的是线性评分函数(f(xi;W)=Wxi),所以我们可以将损失函数的公式稍微改写一下
Li=jyimax(0,wTjxiwTyixi+Δ)

其中wj是权重W的第j行,被变形为列向量。然而,一旦开始考虑更复杂的评分函数f公式,这样做就不是必须的了。
还必须提一下的是关于0的阈值:max(0,-)函数,它常被称为折叶损失(hinge loss),有时候会听到人们使用平方折叶损失SVM(即L2-SVM),它使用的是max(0,)2,将更强烈(平方地而不是线性地)惩罚过界值。不使用平方是更标准的版本,但是在某些数据集中,平方折叶损失会工作得更好。可以通过交叉验证来决定到底使用哪个。

我们对于预测训练集数据分类标签的情况总有一些不满意,而损失函数就能将这些不满意的程度量化。
Li=jyimax(0,wTjxiwTyixi+Δ)
2线性分类器基本原理-2.2线性分类器之SVM和折叶损失(Hinge Loss)

多类SVM想要正确类别的分类分数比其他不正确分类类别的分数更高,而且至少高出delta的边界值,如果其他分类分数进入了红色的区域,甚至更高,那么就开始计算损失。如果没有这些情况,损失值为0。我们的目标是找到一些权重,他们既能够让训练集中的数据样例满足这些限制,也能让总的损失尽可能地低。

正则化(Regularization):上面损失函数有一个问题。假设有一个数据集和一个权重集W能够正确地分类每个数据(即所有的边界都满足,对于所有的i都有Li=0)。问题在于这个W并不是唯一的:可能有很多相似的W都能正确地分类所有的数据。一个简单的例子:如果W能够正确分类所有数据,即对于每个数据,损失值都是0。那么当λ>1时,任何数乘λW都能使得损失值为0,因为这个变化将所有分值的大小都均等地扩大了,所以它们之间的绝对差值也扩大了。举个例子,如果正确分类的分值和举例它最近的错误分类的分值的差距是15,对W乘以2将使其的差距变为30。

换句话说,我们希望能向某些特定的权重W添加一些偏好,对其他权重则不添加,以此来消除模糊性,这一点是能够实现的,方法是向损失函数添加一个正则化惩罚(Regularization Penalty)R(W)部分。最常用的正则化惩罚是L2范式,L2范式通过对所有参数进行逐元素的平方惩罚来抑制大数值的权重:
R(W)=klW2k,l

上面的表达式中,将W中所有元素平方后求和。注意正则化函数不是数据的函数,仅基于权重。包含正则化惩罚后,就能够给出完整的多类SVM损失函数了,它由两部分组成:数据损失(data loss),即所有样例的平均损失Li,以及正则化损失(Regularization loss),完整公式如下所示:
L=(1NiLi)data loss+(λR(W))regularization loss

Li=jyimax(0,wTjxiwTyixi+Δ)

和公式

L=(1NiLi)data loss+(λR(W))regularization loss

将其展开完整公式是:

L=1Nijyi[max(0,f(xi;W)f(xi;W)yi+Δ)]+λklW2k,l

其中,N是训练集的数据量。现在正则化惩罚添加到了损失函数里面,并用超参数λ来计算其权重。该超参数无法简单确定,需要通过交叉验证来获取。
除了上述理由外,引入正则化惩罚带来很多良好的性质。比如引入了L2惩罚后,SVM就有了最大边界(max margin)这一良好性质。

其中最好的性质就是对大数值权重进行惩罚,可以提升其泛化能力,因为这就意味着没有哪个维度能够独自对于整个分值有过大的影响。举个例子,假设输入向量x=[1,1,1,1],两个权重向量:w1=[1,0,0,0,]w2=[0.25,0.25,0.25,0.25]。那么wT1=wT2=1,两个权重向量都得到同样的内积,但是w1的L2惩罚是1.0,而w2的L2惩罚是0.25。因此,根据L2惩罚来看,w2更好,因为它的正则化损失更小。从直观上来看,这是因为w2的权重值更小且更分散。既然L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。这一效果将会提升分类器的泛化能力,并避免过拟合。

需要注意的是,和权重不同,偏差没有这样的效果,因为他们并不控制输入维度上的影响强度。因此通常只对权重W正则化,而不正则化偏差b。在实际操作中,可发现这一操作的影响可忽略不计。最后,因为正则化惩罚的存在,不可能在所有的例子中得到0的损失值,这是因为只有当W=0的特殊情况下,才能得到损失值为0。

一定要记得SVM损失采取了一种特殊的方法,使得能够衡量对于训练数据预测分类和实际分类标签的一致性。还有,对训练集中数据做出准确分类预测和损失值最小化这两件事是等价的。

接下来就是找到能够使损失值最小化的权重了。

设置Δ:

。。。

与二元支持向量机(Binary Support Vector Machine)的关系
二元支持向量机对于第i个数据的损失计算公式是:
Li=Cmax(0,1yiwTxi)+R(W)

其中,C是一个超参数,并且$$

其他多类SVM公式:
另一种常用的公式是One-Vs-All(OVA)SVM,它针对每个类和其他类训练一个独立的二元分类器。
还有另一种更少用的叫做All-Vs-All(AVA)策略。
最后需要知道的公式是Structured SVM,它将正确分类的分类分值和非正确分类中的最高分值的边界最大化。

被论证为最简单的OVA策略在实践中看起来也能工作地同样出色(在Rikin等人2004年论文In Defence of One-Vs-All Classification中查看)