李宏毅svm_【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)...

【李宏毅机器学习笔记】1、回归问题(Regression)

【李宏毅机器学习笔记】2、error产生自哪里?

【李宏毅机器学习笔记】3、gradient descent

【李宏毅机器学习笔记】4、Classification

【李宏毅机器学习笔记】5、Logistic Regression

【李宏毅机器学习笔记】6、简短介绍Deep Learning

【李宏毅机器学习笔记】7、反向传播(Backpropagation)

【李宏毅机器学习笔记】8、Tips for Training DNN

【李宏毅机器学习笔记】9、Convolutional Neural Network(CNN)

【李宏毅机器学习笔记】10、Why deep?(待填坑)

【李宏毅机器学习笔记】11、 Semi-supervised

【李宏毅机器学习笔记】 12、Unsupervised Learning - Linear Methods

【李宏毅机器学习笔记】 13、Unsupervised Learning - Word Embedding(待填坑)

【李宏毅机器学习笔记】 14、Unsupervised Learning - Neighbor Embedding(待填坑)

【李宏毅机器学习笔记】 15、Unsupervised Learning - Auto-encoder(待填坑)

【李宏毅机器学习笔记】 16、Unsupervised Learning - Deep Generative Model(待填坑)

【李宏毅机器学习笔记】 17、迁移学习(Transfer Learning)

【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)

【李宏毅机器学习笔记】 19、Structured Learning - Introduction(待填坑)

【李宏毅机器学习笔记】 20、Structured Learning - Linear Model(待填坑)

【李宏毅机器学习笔记】 21、Structured Learning - Structured SVM(待填坑)

【李宏毅机器学习笔记】 22、Structured Learning - Sequence Labeling(待填坑)

【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)

【李宏毅机器学习笔记】 24、集成学习(Ensemble)

------------------------------------------------------------------------------------------------------

【李宏毅深度强化学习】视频地址:https://www.bilibili.com/video/av10590361?p=31

课件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html

-------------------------------------------------------------------------------------------------------

Outline

f8ef659d6ad9ed88878906d71108208b.png

SVM有两个特色,分别是Hinge Loss和Kernel Method。两者加起来就是SVM。

Hinge Loss

eb8ca4deaed1701a9d4ba6f8be07ac19.png

之前说过,机器学习大体分三步。上图以二分类为例。

第二步原本的loss function是:如果预测结果

51ef850a098871fcaffc0df62c947815.png 正确,则等于0。如果预测结果错误,则等于1 。把这些结果累加起来就是loss function  。但是这样的做法,loss function是不可微的。所以需要换用f968bcf13478b2661847168add2ad1e2.png来近似刚才的做法。

下面是几种f968bcf13478b2661847168add2ad1e2.png的图像。

22ceda5daabe5a1edb7b1f26ace69935.png

绿线代表Sigmoid + cross entropy

蓝线代表Sigmoid + Square loss

红线代表Square loss

y\hat有+1和-1两种结果。

这个loss function定义为:预测的结果 f(x) 和真正的结果y\hat 同号的话,则f(x)越趋于无穷的方向的话,loss 越低。

接下来看看采用不同函数来做loss function的表现如何

Square loss

7a960c2487da958f89ca17cce0f2fa7c.png

这里要说的是Square loss(上图的红线):febcd8769e0cc4f6baff9273a96cf7b5.png

如果用Square loss,则

a677c8c409269390991c07e0989f1487.png时,希望预测结果334c68f6f2ea49b17e308a66bdbd39bb.png

22c53d52c357ee49306487aa27a8bbda.png时,希望预测结果75de2dc505a994dcc68cf44a2b784374.png

a677c8c409269390991c07e0989f1487.png时,febcd8769e0cc4f6baff9273a96cf7b5.png可以整理成0c85b1c6318d3de5c7a26e2e9a834cd7.png

22c53d52c357ee49306487aa27a8bbda.png时,febcd8769e0cc4f6baff9273a96cf7b5.png可以整理成

0ba1bcd3ad3466828aa152014fc590c0.png

此时,在大于0的方向,f(x)越大,7256a9dee246bc93b7f375ba61b6ba92.png越大,loss也越大。不符合刚才说的7256a9dee246bc93b7f375ba61b6ba92.png越大,loss越小。

所以不能用Square loss作为loss function 。

Sigmoid + Square loss

63c0781e293e631ae8ea5a54d342c953.png

这里要说的是Sigmoid + Square loss(上图的蓝线):de0e3585ae5ac84297371eea4139f558.png

如果用Sigmoid + Square loss,则

a677c8c409269390991c07e0989f1487.png时,希望预测结果53d273e95556ae38ae714945f826ff9c.png

22c53d52c357ee49306487aa27a8bbda.png时,希望预测结果1a743313359494e49009d0e4e3566edc.png

a677c8c409269390991c07e0989f1487.png时,de0e3585ae5ac84297371eea4139f558.png可以整理成5d42f5e41b1d49b5a20f4de2e465371d.png

22c53d52c357ee49306487aa27a8bbda.png时,de0e3585ae5ac84297371eea4139f558.png可以整理成e4f8636012e17e445dc68e47849218a3.png

此时,

在大于0的方向,随着f(x)越大,7256a9dee246bc93b7f375ba61b6ba92.png越大,loss也越小。

在小于0的方向,随着f(x)越往负无穷的方向走,7256a9dee246bc93b7f375ba61b6ba92.png越接近1,loss越接近1。

符合刚才说的7256a9dee246bc93b7f375ba61b6ba92.png越大,loss越接近0;7256a9dee246bc93b7f375ba61b6ba92.png越小,loss越接近1 。

Sigmoid + Square loss先作为候选对象。

Sigmoid + cross entropy

10893849425653a351b5d35bd770085b.png

这里要说的是Sigmoid + cross entropy(上图的绿线):7d6d5c9d37a152a9c40a069257b67231.png

此时,

在大于0的方向,随着f(x)越大,7256a9dee246bc93b7f375ba61b6ba92.png越大,loss越接近0。

在小于0的方向,随着f(x)越往负无穷的方向走,7256a9dee246bc93b7f375ba61b6ba92.png越大,loss也越大。

Sigmoid + cross entropy符合刚才说的7256a9dee246bc93b7f375ba61b6ba92.png越大,loss越接近0;但是随着7256a9dee246bc93b7f375ba61b6ba92.png越小,loss越大,并不是理想情况的接近1 。

这会不会有问题呢?

并不会,反而更有好处。这里将Sigmoid + cross entropy和上面说的候选对象Sigmoid + Square loss作对比。

看上图的蓝线和绿线,

可以看到7256a9dee246bc93b7f375ba61b6ba92.png在负数的方向,Sigmoid + cross entropy的梯度更大。所以在loss很大的时候,使用Sigmoid + cross entropy的话,能更快地更新参数。

而用Sigmoid + Square loss的话,梯度太小,导致更新参数的时候速度太慢。甚至于可能会完全不更新参数。

所以,现在以Sigmoid + cross entropy作为目前最佳的候选对象。

Hinge Loss

51f0ef329e4b5b287e158e182aaa2e0e.png

这里要说的是Hinge Loss(上图的紫线):fdfc612ec06f413ae11349e40e3bade5.png

如果用Hinge Loss,则

a677c8c409269390991c07e0989f1487.png时,fdfc612ec06f413ae11349e40e3bade5.png可以整理成9d03ec2e5335c4e5d38fad5d3d1af892.png 。 如果loss为0的话,则说明

f69974fd6256172024c845e4c6ec1f4d.png,此时可以推出fcb0b39bbe1ae7173d7e4f7184eff47d.png

22c53d52c357ee49306487aa27a8bbda.png时,fdfc612ec06f413ae11349e40e3bade5.png可以整理成33b076c8cb32983c419b03a2ea1349e2.png。 如果loss为0的话,则说明

e3649dda6b279649cba14a0cc5ee7f3b.png,此时可以推出

a1d1d3fee8a750234e1f4785350e98fd.png

此时,

在大于0的方向,当7256a9dee246bc93b7f375ba61b6ba92.png大于1,loss一直为0。

在小于0的方向,随着f(x)越往负无穷的方向走,7256a9dee246bc93b7f375ba61b6ba92.png越大,loss也越大。

这样可以看到,Hinge Loss和Sigmoid + cross entropy很像,那它们有什么区别呢?

对于Hinge Loss来说,只要7256a9dee246bc93b7f375ba61b6ba92.png大于1,那Hinge Loss就觉得已经很好了,没必要再做更新。

对于Sigmoid + cross entropy来说,即便7256a9dee246bc93b7f375ba61b6ba92.png大于1,但loss仍然没到0,还要再做更新。

这个区别看起来好像Sigmoid + cross entropy会更准确,但实做的时候,准确度的差距并不大。而且Hinge Loss比较不受离群点(outlier)带来的影响,等下讲kernel会更明显看出这一点。

Linear SVM

90d786f14957eadcc2b2237ee2761937.png

把Linear SVM按照之前说的三个步骤做。如上图。

可以看到, Linear SVM 和 逻辑回归(logistics regression) 的一个区别:

Loss function 用 cross entropy 的就是逻辑回归(logistics regression)

Linear SVM用 Hinge Loss 的Linear SVM。

接下来看这个loss function怎么做gradient descent:

6bfba58804c2049efcc37f501f6fd2c2.png

为了简便,这里省略掉后面的正则项。过程如上图。

Linear SVM – another formulation

d4b60d8e4a5dd02e1f38837a58073296.png

上图是Loss Function的另一个形式,其实只是用一个

f15ec22905da3cfdd82df8bc425cc178.png代替原来的b9f74aaa7e8772750f2ed7dc24845b6a.png

最小化Loss Function就是间接使

6b9c1b9e30ba6966b7a7a07e86cafb32.png最小化。在这个前提下,a131bea07d14e98589ac4567be5b5242.png 才会等于 bdfac8eb5ea1e8de19b87f66c7862925.png 。

因为

6b9c1b9e30ba6966b7a7a07e86cafb32.png一直最小化下去,为了满足这两个不等式,所以

6b9c1b9e30ba6966b7a7a07e86cafb32.png会等于这两个值比较大的值,此时这两个不等式会起到和max()一样的作用。

62bfd0d39ab136cda2f43fe6c5736b5e.png整理为d71339474da1c65d5428e0ebd70e0f11.png(1 代表margin) 。如果不等式左边没办法大于右边,那可以通过加大

6b9c1b9e30ba6966b7a7a07e86cafb32.png使右边变小,来使不等式成立。

6b9c1b9e30ba6966b7a7a07e86cafb32.png是一个slack variable,它是可以使margin的标准变宽的变量,所以

6b9c1b9e30ba6966b7a7a07e86cafb32.png要求一定要大于等于0,这一点刚好和刚才max()的变换呼应了。

Kernel Method

5e91172659d049da581a6566d89de974.png

Dual Representation

0b767fa498715713bc2a8240303a1361.png

594a3c24e8a5a5c17ef63f942e576310.png可以看成是所有training data 

e017fc4b284354596d0c0f6cec130950.png乘上一个08e4579a5b70890ab0914591caad70d0.png的总和。即 w 是所有training data的线性组合。

可以从这个角度去理解:上文说过,参数更新的式子是类似81b6e399a69eabe9ec9f404f8b682520.png这样。把很多维的参数更新式子合起来,就变成63e31edff05ab366f824e2bc3a84cf58.png。可以看到每次 w 的变化量和就是所有training data的线性组合。

在刚才的参数更新式子中,3703bbae8b522beb0a19ce8f1189a113.png (前文有说过这个偏微分有2bff03e7af4a403c71d6836886c1d65e.png和 0 两种结果)。

如果f60edfbef3bf35709ebf0fb73e5e32c6.png结果为0,则代表此时的b148a57c841d317cf4f5ca8ab8527382.png不会被加到 w 里面去(即cd4608c15dabb028b65002ecf76aee74.png之中的08e4579a5b70890ab0914591caad70d0.png为0)。

如果f60edfbef3bf35709ebf0fb73e5e32c6.png结果为e39a1d32d3d7f9eb260b98862641fcb0.png,则代表此时的b148a57c841d317cf4f5ca8ab8527382.png会加到 w 里面去(即cd4608c15dabb028b65002ecf76aee74.png之中的08e4579a5b70890ab0914591caad70d0.png不为0),这些 08e4579a5b70890ab0914591caad70d0.png 不为0的 b148a57c841d317cf4f5ca8ab8527382.png会对模型的参数 w 起很大的影响,所以也叫support vectors。

由于f60edfbef3bf35709ebf0fb73e5e32c6.png(Hinge Loss)大部分情况为0,所以最后只有少数的b148a57c841d317cf4f5ca8ab8527382.png能起作用,这样就减小了离群点(outlier)对模型的影响。(这里就是上文说过Hinge Loss比较不受离群点的影响的原因)

9bc68888093d91a3f03d85a1448ee6e7.png

将 w 的式子再做一次变形 ,

8394913406712eae022f29f4a82bb065.png

688f7720b6e86909378a7f7ad8b3159f.png则变形为fe725fa97502752f26d7828a444fa66a.png

定义一个函数K(Kernel Function)来代表

65d5eaa727e19e6e18225d7519580a3f.png,这时e4c02db96919f9df29867c6b3c58f09f.png

e5a8b7973e131c3ed714800ae7647f59.png

做完刚才变换后,现在要最小化Loss Function,就是要找一组222e4acacf4bf8f59ad31e187570e8f4.png 能使loss值最小化。

其中,Loss Function的ed3cd03d01faa274dbe4f136f0c3baac.png可以使用Kernel Trick来计算。这样就不需要知道转换到高维的 97188723c59d90bf3dfad413e7d12fb6.png 的vector长什么样,也可以直接算出ed3cd03d01faa274dbe4f136f0c3baac.png值。

接下来具体看下Kernel Trick。

Kernel Trick

210d4053caafa69150d62e06b018300d.png

之前说过,如果数据在低维不可分离的话,可以映射到高维的space上。上图的eea85590c09a62f0e47e58bdb9fcd01e.png就是在将 x 映射映射到高维上。这一步就是做feature transformation 。

然后9caba849a65ee77ff7c0d613ae46829b.png就会等于ccacbe36bb350a785677953c29fd4bc0.png。这一步就是做inner product。

使用Kernel Trick的话,就可以不用做feature transformation和inner product,直接算出d7c21c6cd4759944d3cd9e4acbfb0b82.png的值。

我们将上图的过程做整理,会得出ff3d7789b6f3ef3d683bdd82cffaa10a.png

所以以后计算d7c21c6cd4759944d3cd9e4acbfb0b82.png直接套这个公式就好,不用做feature transformation然后再做inner product 。

Radial Basis Function Kernel

cf681e9431009c3b5f23daf90658d6aa.png

如果 cf73c034a7bb01bd64540ef7eb7b5521.png

4a0e9bc68aff889816ac246e5f490e0d.png 是无穷多维,那么此时没办法算它们的inner product 。

所以需要用Radial Basis Function Kernel,ff44a1f16b9fb1fb1444503620ec3671.png 。

x和z越像(距离近),

8048325d3a51d1e04aadb05c99f6b0e8.png 的值越大。x和z越不像(距离远),

8048325d3a51d1e04aadb05c99f6b0e8.png 的值越接近0。

最后把关于 x 的项串成一个vector,把关于 z 的项串成另一个vector。这两个vector相乘就是

8048325d3a51d1e04aadb05c99f6b0e8.png的值。

Sigmoid Kernel

46b8da0459bb7e26d7ce321caaa43f7b.png

使用Sigmoid Kernel后,dd62121143bd2622b293537e9d674313.png(tanh函数的图像和sigmoid函数是一样的)。

使用Sigmoid Kernel可以看成一个一层的hidden layer。

每个data point

413794b9c80f5d6a41c41fe6ad53e266.png可以看做是神经元的weight

神经元的数量和support vector的数量相等

46c773a6e3f82733c479b9b3a12c936d.png

既然有Kernel trick,那就可以设计一个kernel function来代替掉426fd2cee32e43272873ad7d98030261.png  。

当 x 是类似句子这样的structured object,比较难transform到高维,即很难做

95f4111bbdbf379a020b3c7c86adbc4b.png。这时就能Kernel Function来求解

b4845ae549b47377a7d60f5626e03e55.png的结果

b4845ae549b47377a7d60f5626e03e55.png可以看成是在评估 x 和 z 的相似性(similarity)。

可以使用Mercer’s theory来判断所使用的Kernel Function有没有用。

上图是一些音频段,每一段音频讯号长短不一样,所以很难把它转换成vector。所以现在可以直接用Kernel Function。更详细的东西可以见上图所示的论文。

SVM related methods

d6ae1306bfdf41a6efe4fd2b6fb2d849.png

之前在做Regression的时候,是希望model的output和target越近越好。而Support Vector Regression (SVR),只要output和target距离近到一定程度,loss就为0,不会再继续更新参数了。(文章前面有说过这个)

其它两种想深入了解可以看《机器学习导论》作者:Ethem Alpaydin。所处章节如上图所示。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值