【Day 28】支援向量机(Support Vector Machine, SVM)(上)

今天要介绍的是支援向量机(Support Vector Machine, SVM),它有两个特色,而这两个特色加起来,也就是Hinge Loss加上Kernel Trick就是SVM。

Hinge Loss

首先我们透过这张图来复习一下Binary Classification,而步骤二一开始列出的loss function是不可微分的,导致要在步骤三做optimization找到一个最好的function是有困难的,所以我们就把 https://chart.googleapis.com/chart?cht=tx&chl=%5Cdelta 用另一个approximate的loss来表示。

Hinge Loss是一个很特别的式子,写成 https://chart.googleapis.com/chart?cht=tx&chl=max(0%2C%201%20-%20%5Chat%20y%5Enf(x)),如果 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En%20%3D%201,就代表只要 https://chart.googleapis.com/chart?cht=tx&chl=f(x)%20%3E%201,Loss就会等於0,而 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En%20%3D%20-1,就代表 https://chart.googleapis.com/chart?cht=tx&chl=f(x)%20%3C%20-1,Loss就会等於0。

Hinge Loss跟Cross Entropy最大的不同来自於他们对待已经做得好的example的态度,如果我们把 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En 的值从1挪到2,对於Cross Entropy来说,你可以得到Loss的下降,所以Cross Entropy会想要好还要更好,它就有动机让 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En 的值更大来让Loss减少。但是对Hinge Loss来说,它就只需要及格就好,也就是只需要你的值大过margin就可以了。

Linear SVM

Linear SVM就代表我们的funciton是linear的,式子如下图所示,而Loss function在SVM里面的特色就是它采用了Hinge Loss,通常我们还会再加上Regularization的term,这两个都是convex的function,所以这个Loss function就是一个convex的function。

而Logistic Regressino跟Linear SVM的差别只在於Loss function的不同,用Hinge Loss就是Linear SVM,用Cross Entropy就是Logistic Regression,

Linear SVM - gradient descent

有一个用Gradient Descent来训练SVM的方法叫做Picasso,那就是跟之前一样做Gradient Descent,经过计算得到下图的式子,就可以更新参数了。

Linear SVM - another formulation

我们现在把Hinge Loss换成是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En,而我们是要minimize这个Loss function,也就是要选择一个最小的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En,这样子下图两个红色框框中的式子就会是相等的。也就是说,SVM告诉我们 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5Enhttps://chart.googleapis.com/chart?cht=tx&chl=f(x) 要同号的,它们相乘以後要大於等於一个margin 1,但是这个margin是soft的,有时候没办法满足这个margin,所以可以把你的margin稍微放宽,把它减掉一个 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En,这个 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En 会放宽你的margin,所以我们称之为slack variable,要注意的是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En 不能是负的,它必须要大於等於0。

这个formulation是一个Quadratic Programming(QP)的problem,所以你就可以带一个Quadratic Programming的solver把它解出来,当然前面我们也有讲到可以用Gradient Descent来解它。


参考资料

李宏毅老师 - ML Lecture 20


<<:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 27 - 学习 cypress window 的用法

>>:  远距工作停看听:挑战篇

D27 - 「来互相伤害啊!」:运筹帷幄

来规划游戏蓝图吧。 视窗规划 基本上和小恐龙单元一样。 视窗主体 负责提供脚位资料、设定栏位。 游戏...

[D04] wait me

写在前面 有点混阿~ 连假整个松掉 晚点补齐 有点混阿~ 连假整个松掉 晚点补齐 有点混阿~ 连假整...

Day 05 - 想要够给力的机器-EC2

来到了中秋连假的第一天,买不到云上的月亮,我们就到云上买台机器来玩玩吧 1. 使用EC2好处? EC...

唤醒与生俱来的数学力 (4) 逻辑推论

终於到了尾声,本书的最後 80 页我看了 2 次,不太确定自己到底有没有读错,总之就来努力摘要一下。...

[PHP] [Laravel] [Blade] 利用正规表示法,根据不同的网址,显示特定的元素。

目标: 根据前一页的网址,来决定目前所处的页面,显示哪个按钮。假如已经收藏某个东西的话,就不用再显示...