【李宏毅机器学习笔记】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
SVM有两个特色,分别是Hinge Loss和Kernel Method。两者加起来就是SVM。
Hinge Loss
之前说过,机器学习大体分三步。上图以二分类为例。
第二步原本的loss function是:如果预测结果
正确,则等于0。如果预测结果错误,则等于1 。把这些结果累加起来就是loss function 。但是这样的做法,loss function是不可微的。所以需要换用
来近似刚才的做法。
下面是几种的图像。
绿线代表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
这里要说的是Square loss(上图的红线):
如果用Square loss,则
当
时,希望预测结果
当
时,希望预测结果
当
时,
可以整理成
当
时,
可以整理成
此时,在大于0的方向,f(x)越大,越大,loss也越大。不符合刚才说的
越大,loss越小。
所以不能用Square loss作为loss function 。
Sigmoid + Square loss
这里要说的是Sigmoid + Square loss(上图的蓝线):
如果用Sigmoid + Square loss,则
当
时,希望预测结果
当
时,希望预测结果
当
时,
可以整理成
当
时,
可以整理成
此时,
在大于0的方向,随着f(x)越大,越大,loss也越小。
在小于0的方向,随着f(x)越往负无穷的方向走,越接近1,loss越接近1。
符合刚才说的越大,loss越接近0;
越小,loss越接近1 。
Sigmoid + Square loss先作为候选对象。
Sigmoid + cross entropy
这里要说的是Sigmoid + cross entropy(上图的绿线):
此时,
在大于0的方向,随着f(x)越大,越大,loss越接近0。
在小于0的方向,随着f(x)越往负无穷的方向走,越大,loss也越大。
Sigmoid + cross entropy符合刚才说的越大,loss越接近0;但是随着
越小,loss越大,并不是理想情况的接近1 。
这会不会有问题呢?
并不会,反而更有好处。这里将Sigmoid + cross entropy和上面说的候选对象Sigmoid + Square loss作对比。
看上图的蓝线和绿线,
可以看到在负数的方向,Sigmoid + cross entropy的梯度更大。所以在loss很大的时候,使用Sigmoid + cross entropy的话,能更快地更新参数。
而用Sigmoid + Square loss的话,梯度太小,导致更新参数的时候速度太慢。甚至于可能会完全不更新参数。
所以,现在以Sigmoid + cross entropy作为目前最佳的候选对象。
Hinge Loss
这里要说的是Hinge Loss(上图的紫线):
如果用Hinge Loss,则
当
时,
可以整理成
。 如果loss为0的话,则说明
,此时可以推出
当
时,
可以整理成
。 如果loss为0的话,则说明
,此时可以推出
此时,
在大于0的方向,当大于1,loss一直为0。
在小于0的方向,随着f(x)越往负无穷的方向走,越大,loss也越大。
这样可以看到,Hinge Loss和Sigmoid + cross entropy很像,那它们有什么区别呢?
对于Hinge Loss来说,只要大于1,那Hinge Loss就觉得已经很好了,没必要再做更新。
对于Sigmoid + cross entropy来说,即便大于1,但loss仍然没到0,还要再做更新。
这个区别看起来好像Sigmoid + cross entropy会更准确,但实做的时候,准确度的差距并不大。而且Hinge Loss比较不受离群点(outlier)带来的影响,等下讲kernel会更明显看出这一点。
Linear SVM
把Linear SVM按照之前说的三个步骤做。如上图。
可以看到, Linear SVM 和 逻辑回归(logistics regression) 的一个区别:
Loss function 用 cross entropy 的就是逻辑回归(logistics regression)
Linear SVM用 Hinge Loss 的Linear SVM。
接下来看这个loss function怎么做gradient descent:
为了简便,这里省略掉后面的正则项。过程如上图。
Linear SVM – another formulation
上图是Loss Function的另一个形式,其实只是用一个
代替原来的
。
最小化Loss Function就是间接使
最小化。在这个前提下,
才会等于
。
因为
一直最小化下去,为了满足这两个不等式,所以
会等于这两个值比较大的值,此时这两个不等式会起到和max()一样的作用。
把
整理为
(1 代表margin) 。如果不等式左边没办法大于右边,那可以通过加大
使右边变小,来使不等式成立。
是一个slack variable,它是可以使margin的标准变宽的变量,所以
要求一定要大于等于0,这一点刚好和刚才max()的变换呼应了。
Kernel Method
Dual Representation
可以看成是所有training data
乘上一个
的总和。即 w 是所有training data的线性组合。
可以从这个角度去理解:上文说过,参数更新的式子是类似这样。把很多维的参数更新式子合起来,就变成
。可以看到每次 w 的变化量和就是所有training data的线性组合。
在刚才的参数更新式子中, (前文有说过这个偏微分有
和 0 两种结果)。
如果结果为0,则代表此时的
不会被加到 w 里面去(即
之中的
为0)。
如果结果为
,则代表此时的
会加到 w 里面去(即
之中的
不为0),这些
不为0的
会对模型的参数 w 起很大的影响,所以也叫support vectors。
由于(Hinge Loss)大部分情况为0,所以最后只有少数的
能起作用,这样就减小了离群点(outlier)对模型的影响。(这里就是上文说过Hinge Loss比较不受离群点的影响的原因)
将 w 的式子再做一次变形 ,
则变形为
定义一个函数K(Kernel Function)来代表
,这时
做完刚才变换后,现在要最小化Loss Function,就是要找一组 能使loss值最小化。
其中,Loss Function的可以使用Kernel Trick来计算。这样就不需要知道转换到高维的
的vector长什么样,也可以直接算出
值。
接下来具体看下Kernel Trick。
Kernel Trick
之前说过,如果数据在低维不可分离的话,可以映射到高维的space上。上图的就是在将 x 映射映射到高维上。这一步就是做feature transformation 。
然后就会等于
。这一步就是做inner product。
使用Kernel Trick的话,就可以不用做feature transformation和inner product,直接算出的值。
我们将上图的过程做整理,会得出。
所以以后计算直接套这个公式就好,不用做feature transformation然后再做inner product 。
Radial Basis Function Kernel
如果 和
是无穷多维,那么此时没办法算它们的inner product 。
所以需要用Radial Basis Function Kernel, 。
x和z越像(距离近),
的值越大。x和z越不像(距离远),
的值越接近0。
最后把关于 x 的项串成一个vector,把关于 z 的项串成另一个vector。这两个vector相乘就是
的值。
Sigmoid Kernel
使用Sigmoid Kernel后,(tanh函数的图像和sigmoid函数是一样的)。
使用Sigmoid Kernel可以看成一个一层的hidden layer。
每个data point
可以看做是神经元的weight
神经元的数量和support vector的数量相等
既然有Kernel trick,那就可以设计一个kernel function来代替掉 。
当 x 是类似句子这样的structured object,比较难transform到高维,即很难做
。这时就能Kernel Function来求解
的结果
可以看成是在评估 x 和 z 的相似性(similarity)。
可以使用Mercer’s theory来判断所使用的Kernel Function有没有用。
上图是一些音频段,每一段音频讯号长短不一样,所以很难把它转换成vector。所以现在可以直接用Kernel Function。更详细的东西可以见上图所示的论文。
SVM related methods
之前在做Regression的时候,是希望model的output和target越近越好。而Support Vector Regression (SVR),只要output和target距离近到一定程度,loss就为0,不会再继续更新参数了。(文章前面有说过这个)
其它两种想深入了解可以看《机器学习导论》作者:Ethem Alpaydin。所处章节如上图所示。