AI面试题之SVM的HingeLoss

站长亦新
站长亦新
站长亦新
81
文章
0
评论
2020年6月22日23:39:50 评论 175 2031字阅读6分46秒

【这边文章主要讨论的问题】:
- 分类任务中为什么用交叉熵而不是平方差?
- hingeloss是什么?为什么用?

SVM的基础内容

这里先介绍一下对SVM的部分基础知识,以及本文使用的算法符号。
- SVM是支持向量机,用在分类任务上,一般是二分类任务,如果是多分类任务的话,就需要多个SVM进行集成;
- SVM中的两类样本的真是标签是【+1】,【-1】,而不是神经网络中的0和1。
- y_n表示第n个样本的真实标签,正一或者负一;
- f(x_n)就是第n个样本的SVM预测值;
- x^i_n表示第n个样本的第i个属性(特征)。
这里,如果SVM是一个线性的,那么SVM模型其实就是一个线性分类器:
f(x)=\sum_i {w_i*x_i+b}

基本就这么多了,咱们开始看损失函数吧。

在学这个之前,如果你已经学过了逻辑回归,那就更好了。
一文搞懂:线性回归与逻辑回归(似然参数估计)

浅谈损失函数

谈到损失函数,我们必须要明确一点:分类任务的目标是什么?

对于SVM来说:
- y_n=1的时候,f(x_n)至少要大于0吧,也许越大越好;
- y_n=-1的时候,f(x_n)至少要小于0吧,也许越小越好;

【为什么用“也许”呢?如果?】
y_n=1的时候,f(x_n)=100f(x_n)=5哪个更好,其实我们并不能得到正确答案。因为两种情况都是分类正确的。

平方损失和交叉熵

一般的平方损失就是:
loss = \sum_n {(y_n-f(x_n))^2}

但是因为这里的两类是用+1和-1来表示的,所以可以写成这个样子:
loss = \sum_n{(y_nf(x_n)-1)^2}

这样的写法的话,就是希望:
- y_n=1时,f(x_n)=1;
- y_n=-1时,f(x_n)=-1;

这里放一个loss function的函数图:
AI面试题之SVM的HingeLoss

然后上面的平方损失,就是途中的红色的曲线。
我们先品一品y_nf(x_n)是什么?
- 当y_nf(x_n)大于0的时候,其实就是f(x_n)y_n同符号,也就是预测正确了。
- y_nf(x_n)越大的时候,也就是模型预测也稳。比较抽象哈。相当于考试的时候,你刚好61分和70分,肯定是70分的学生及格更稳一点。

回到平方损失,可以看到,平方损失在y_nf(x_n)大于1的时候,损失越来越大。这个不合理呀。你考试,肯定是越高越好,不可能只要求你考70分。你考80分怎么还比70分得到更大的损失。

【这也是分类问题为什么不使用平方损失的原因。因为回归的时候,要预测的是一个数值,高了低了都不好。但是回归的时候,是一个阈值,距离这个阈值越远,越好,没有上限。】

来看一下交叉熵损失。交叉熵需要把模型的结果归一化到0~1中间,所以先对y_nf(x_n)的结果,加上一个sigmoid函数。

看一下交叉熵的SVM损失函数:
loss = -ln(\sigma(y_nf(x_n)))
AI面试题之SVM的HingeLoss
这个绿色的损失看起来不错,比平方损失强多了。


目前:交叉熵完爆平方损失。


有人提出,假设使用sigmoid将y_nf(x_n)限制在0~1内,那么,就可以避免平方损失在大于1的区间内出现的问题。

损失函数变成:
loss = \sum_n{(\sigma(y_nf(x_n))-1)^2}

图像是下图中的蓝色的线。
AI面试题之SVM的HingeLoss

但是sigmoid+平方损失还是不如交叉熵。举个例子:
假如一个样本的y_nf(x_n)非常小,那么交叉熵的梯度就会非常大而sigmoid+平方损失的梯度却非常小。非常小的梯度意味着小的变化,如果使用sigmoid+平方损失作为损失函数,会让模型收敛的非常慢。
AI面试题之SVM的HingeLoss

总之,分类问题,用交叉熵非常的好。

hinge loss

那么SVM的hinge loss是什么呢?

hingeloss = max(0,1-y_nf(x_n))

其实这个的函数图像与交叉熵非常的像:
AI面试题之SVM的HingeLoss
图中紫色的就是hinge loss的图像了,为了让其更加明显,用红色的箭头来凸显了。

【PS:有一点点像ReLu的翻转】


【Hinge Loss vs CrossEntropy】
- Hinge Loss:当y_nf(x_n)大于1的时候,就达到了最好的情况,类似于,考试考及格就行了,不用最高分;
- CrossEntroy要求尽可能地得分高。我个人感觉,如果尽可能地得分高的话,可能会造成一定程度的过拟合,模型不太会兼顾全部的样本。

Hinge loss感觉就会把更多的注意力放在没有分类分的很好的那些样本上,不会再注意y_nf(x_n)>1的样本了。像是focal loss的感觉。


最后,可以感觉到。如果线性SVM使用交叉熵损失函数的那,那就是Logistic Regression逻辑回归了。所以SVM与其他模型区分的关键就是Hinge Loss损失函数。

所以有的时候,对于一个多层感知机,使用了Hinge Loss的话,也会被成为深度SVM模型。


喜欢的话请关注我们的微信公众号~【机器学习炼丹术】。

weinxin
我的微信
微信扫一扫
站长亦新
  • 本文由 发表于 2020年6月22日23:39:50
  • 转载请务必保留本文链接:http://helloworld2020.net/500/
AI面试之SVM推导 机器学习

AI面试之SVM推导

SVM现在主流的有两个方法。一个是传统的推导,计算支持向量求解的方法,一个是近几年兴起的梯度下降的方法。 梯度下降方法的核心是使用了hinge loss作为损失函数,所以最近也有人提出的深度SVM其实...
一分钟区别:判别模型与生成模型 数据挖掘

一分钟区别:判别模型与生成模型

1. 直观理解 先给出最直观的理解: 【判别式模型】:要确定一个图片是猫还是狗,用判别模型的方法就是根据数据集X训练模,然后把新的图片输入到模型中,模型给出这个图片是每个类别的概率。 【生成式模型】:...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: