遵循统一的机器学习框架理解SVM
遵循统一的机器学习框架理解SVM
一、前言
- 我的博客仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
- 本文参考了李宏毅教授讲解SVM的课程和李航大大的统计学习方法。
二、理解
统一的机器学习框架(MLA):
1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)
按照如上所说框架,SVM最核心的就是使用了 Hinge Loss 和 核方法 。
SVM: Hinge Loss + Kernel Method
Model
给定数据集 \((x^1,\hat{y}^1),(x^2,\hat{y}^2)...(x^n,\hat{y}^n)\),其中\(\hat{y}^i\in\{1,-1\}\),且线性函数:
同时:
当 \(\hat{y}=1\) 时,\(f(x)\)越大越好; \(\hat{y}=-1\) 时,\(f(x)\)越小越好。
综合来说即:\(\hat{y}f(x)\) 越大越好。
Loss
结构风险最小化:经验风险+正则项
经验风险
上面说到我们希望 \(\hat{y}f(x)\) 越大越好,也就是当 \(\hat{y}f(x)\) 越大时,损失应该越小(Large Value, Small Loss)。
1.考虑使用 \(sigmoid + cross\ entropy\) 的损失函数:
考虑到 \(1-\sigma(f(x))=1-\frac{1}{1+exp(-f(x))}=\frac{1}{1+exp(f(x))}=\sigma(-f(x))\)
这个就是西瓜书中的对率损失。
2.使用Hinge Loss损失函数:
使用对率损失时,希望\(\hat{y}f(x)\)越大越好,好上加好,永无止境的那种。
换一种角度看,假如我们希望 \(\hat{y}f(x)\) 做的足够好就可以了,也就是说当 \(\hat{y}f(x)>1\) 时,我们认为它已经做的足够好了,此时损失就为0了。
题外话:Hinge Loss就好像横向学习,很多时候我们需要学习很多领域的知识,此时大概知道、了解就行;对率损失就像纵向学习,在自己的领域需要钻研,好上加好。
正则项
综上所述,最终的损失函数:
注意到Loss中正则项是凸函数,经验损失项也是凸函数,直接用梯度下降法就可以求解。
Algorithm
梯度下降法
其中\(\delta(\hat{y}^i f(x^i) < 1)\)是指示函数。
总结
到目前位置所做的事就是:对于一组给定的数据,找到一个超平面划分它们,进行分类,且要求尽可能做的好(策略是HingeLoss)。考虑到在当前维度或者空间可能做的不是很好(可分性不是很好),可以把这些数据点变换空间或者升维,在另一个空间具有更好的可分性,这样可以把当前任务做的更好。
z表示对x进行变换后的形式(可以是高维空间,也可以是低维空间),此时再使用上面所说的方法
不足之处:对x进行变换后得到z,首先我们需要计算得到z,再进行后续的计算,当升维后z的维度很大,此时虽然可分性增加了,但是计算量会大大增加,而且对于特殊情况,比如z是无限维时,z根本就无法计算出来,由此引出核方法。
扩展
- 对于一个深度神经网络做二分类任务,一般我们使用交叉熵作为损失函数,假如把损失函数替换为hingeloss,则就是深度学习版的SVM。
- 把深度神经网络的前n-1层看作一个特征变换层,最后一层看作分类层,与我们总结中说的就非常相似了,把 \(x\) 进行转换,再进行分类。不同点在于:我们所说的SVM这个变换的函数是我们定义的,是确定的,而Deep Learning里的转换函数是不定的,是通过数据学出来的。
总的来说,SVM和深度学习分类任务遵循统一的思想,从本质上来说没必要区分它们。
三、对偶形式
写出对偶形式的目的是:将 \(w,b\) 表示为数据点的线性组合,这样可以把 \(\phi(x^i)\phi(x^j)\) 这种在高维空间的计算转换成成 \(\kappa(x^i,x^j)\) 在低维空间计算,再通过核函数直接得到最终的值的方式。
隐含的思想是:我并不需要了解中间的过程(升维后的值),只需要得到他们之间的关系就行(核函数),核函数 \(\kappa\) 就表示了这种关系。
根据 \(w,b\) 的求解公式的特性,当 \(w^0=0,b^0=0\) 时,容易看出 \(w,b\) 是给定数据点的线性组合(Linear Combination)
这里要区别于感知机,因为在此处有正则项,\(\lambda > 0\),假如 \(\lambda=0\) 时,则 \(\alpha_i=\beta_i\)
此时: