笔记:ML-LHY-20: Support Vector Machine (SVM)

主要从Hinge Loss 和 Kernel Method 入门介绍SVM
Hinge Loss : 从平方损失Square Loss角度来说,对于分类问题不是很好的损失函数,然后和交叉熵损失Cross Entropy Loss做笔记,其实Hinge Loss就是Cross Entropy Loss的鲁棒表示。
Kernel Method:这一过程就是输入 x x x,输出 ϕ ( x ) \phi(x) ϕ(x)。然后在高维空间做内积,即 K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) K(x, z)=\phi(x) \cdot \phi(z) K(x,z)=ϕ(x)ϕ(z)。而我们知道,在高维空间做内积可能运算量是巨大的。然后又发现高维空间内积的形式其实可以在低维空间中表示。
pdf 视频

在这里插入图片描述
下面先来说下 Hinge Loss 是什么。

Binary Classification

对于经典的而分类问题,之前已经提到可以使用逻辑回归解决,之前label使用0和1标记。现在label用-1和1来标记。
在这里插入图片描述
同样,分3步骤:设计模型 Function set(Model) 损失函数 找最好的模型(训练)

• Step 1: Function set (Model)

理想的模型输出:
g ( x ) = f ( x ) > 0  Output  = + 1 f ( x ) < 0  Output  = − 1 g(x)=\begin{array}{ll} f(x)>0 & \text { Output }=+1 \\ f(x)<0 & \text { Output }=-1 \end{array} g(x)=f(x)>0f(x)<0 Output =+1 Output =1

• Step 2: Loss function

假设直接使用:
L ( f ) = ∑ n δ ( g ( x n ) ≠ y ^ n ) L(f)=\sum_{n} \delta\left(g\left(x^{n}\right) \neq \hat{y}^{n}\right) L(f)=nδ(g(xn)=y^n)
其中 δ \delta δ是信号函数,表示g在training set上放了多少次错,但是它是没办法微分的,没法在第3步使用GD求解。

换一个近似的:

L ( f ) = ∑ n l ( f ( x n ) , y ^ n ) L(f)=\sum_{n} l\left(f\left(x^{n}\right), \hat{y}^{n}\right) L(f)=nl(f(xn),y^n)


函数分析:
在这里插入图片描述
可以看到, L ( f ) = ∑ n δ ( g ( x n ) ≠ y ^ n ) L(f)=\sum_{n} \delta\left(g\left(x^{n}\right) \neq \hat{y}^{n}\right) L(f)=nδ(g(xn)=y^n)就是黑色的线,当模型识别正确时有 1 ∗ 1 = 1 1 *1 = 1 11=1 − 1 ∗ − 1 = 1 -1 * -1=1 11=1,经过 δ ( 1 ) = 0 \delta(1) = 0 δ(1)=0可以认为loss更小。当模型识别错误时有 1 ∗ − 1 = − 1 1 *-1 = -1 11=1 − 1 ∗ 1 = − 1 -1 * 1=-1 11=1,经过 δ ( − 1 ) = 1 \delta(-1) = 1 δ(1)=1可以认为loss更大。函数图像很显示在0点附近它没法微分。

Square Loss

那么用平方损失Square Loss是否合理呢?

在这里插入图片描述

形式可以写成:
l ( f ( x n ) , y ^ n ) = ( y ^ n f ( x n ) − 1 ) 2 l\left(f\left(x^{n}\right), \hat{y}^{n}\right)=\left(\hat{y}^{n} f\left(x^{n}\right)-1\right)^{2} l(f(xn),y^n)=(y^nf(xn)1)2
但是, y ^ n f ( x ) \hat{y}^{n} f(x) y^nf(x)很接近,它们的值会>1也就是上面横轴大于1,loss也开始上升。能不能说用 y ^ n g ( x ) \hat{y}^{n}g(x) y^ng(x)表示横轴,这样的话,虽然 y ^ n g ( x ) \hat{y}^{n}g(x) y^ng(x)的最大值为1,同时也限定了 y ^ n g ( x ) \hat{y}^{n}g(x) y^ng(x)的最小值为-1,那么loss最大就限定在 ( − 1 − 1 ) 2 = 4 (-1 -1)^2 = 4 (11)2=4了,所以对于非常negative的输出,都是4,模型就没法学习。

Sigmoid + Square Loss

既然 y ^ n f ( x ) > 1 \hat{y}^{n} f(x)> 1 y^nf(x)>1会出现更大的loss,那么加个sigmoid函数不就限定到0~1了
σ = 1 1 + e x \sigma=\frac{1}{1+e^{x}} σ=1+ex1
图像:
在这里插入图片描述
那么加了sigmoid函数的loss就变成:
l ( f ( x n ) , y ^ n ) = ( σ ( y ^ n f ( x ) ) − 1 ) 2 l\left(f\left(x^{n}\right), \hat{y}^{n}\right)=\left(\sigma\left(\hat{y}^{n} f(x)\right)-1\right)^{2} l(f(xn),y^n)=(σ(y^nf(x))1)2
图像:
在这里插入图片描述
和上面一样,发现loss最大就限定在1了,所以对于非常negative的输出,都是1,模型就没法学习。

在这里插入图片描述
所以对于这个model,loss设计成平方损失是不合理的。在之前二分类中提到使用交叉熵作为loss。

Sigmoid + Cross Entropy Loss

最后推导的结果:
l ( f ( x n ) , y ^ n ) = ln ⁡ ( 1 + exp ⁡ ( − y ^ n f ( x ) ) ) \begin{array}{l} l\left(f\left(x^{n}\right), \hat{y}^{n}\right) =\ln \left(1+\exp \left(-\hat{y}^{n} f(x)\right)\right) \end{array} l(f(xn),y^n)=ln(1+exp(y^nf(x)))

函数图像:
在这里插入图片描述

Hinge Loss

在这里插入图片描述
函数形式:
l ( f ( x n ) , y ^ n ) = max ⁡ ( 0 , 1 − y ^ n f ( x ) ) l\left(f\left(x^{n}\right), \hat{y}^{n}\right)=\max \left(0,1-\hat{y}^{n} f(x)\right) l(f(xn),y^n)=max(0,1y^nf(x))
图上,penalty = 1表示 y ^ n f ( x ) \hat{y}^{n} f(x) y^nf(x)要Positive一段距离(=1)。才算足够好,否者就会有penalty。
Hinge Loss和Sigmoid + Cross Entropy Loss 最大的不同在于对已经Positive的结果怎么处理,Sigmoid + Cross Entropy Loss 想要好还要更好,Hinge Loss有一个及格就好了。
在实际中Hinge Loss有一个好处就是比较不害怕异常点(outlier)。Cross Entropy 总是想要好还更好,那么就像考试很多科目,会偏科。而Hinge Loss只要及格就好,所以会有更多精力在各个科目上。所以是更鲁棒的。

Linear SVM

• Step 1: Function (Model)

f ( x ) = ∑ i w i x i + b = [ w b ]   ⋅ [ x 1 ] = w T x f(x)=\sum_{i} w_{i} x_{i}+b=\left[\begin{array}{l} w \\ b \end{array}\right]\ \cdot\left[\begin{array}{l} x \\ 1 \end{array}\right]=w^{T} x f(x)=iwixi+b=[wb] [x1]=wTx
w w w b b b组成新的向量 w w w, 用 x x x 1 1 1组成新的向量 x x x

• Step 2: Loss function

L ( f ) = ∑ n l ( f ( x n ) , y ^ n ) + λ ∥ w ∥ 2 L(f)=\sum_{n} l\left(f\left(x^{n}\right), \hat{y}^{n}\right)+\lambda\|w\|_{2} L(f)=nl(f(xn),y^n)+λw2

l ( f ( x n ) , y ^ n ) = max ⁡ ( 0 , 1 − y ^ n f ( x ) ) l\left(f\left(x^{n}\right), \hat{y}^{n}\right)=\max \left(0,1-\hat{y}^{n} f(x)\right) l(f(xn),y^n)=max(0,1y^nf(x))

Logistic Regression我们分析过过loss是使用Cross entropy。而SVM使用的就是上面提到的Hinge Loss。

• Step 3: gradient descent

由于Hinge Loss长这样:
在这里插入图片描述

正则项 λ ∥ w ∥ 2 \lambda\|w\|_{2} λw2长这样:
在这里插入图片描述

都是凸函数,相加之后的 L ( f ) L(f) L(f)就也是凸函数,那么就可以顺利使用GD来求

在这里插入图片描述

Tip:函数不一定是要线性的,也可以使用非线性的比如NN,那么就是Deep版本。NN+Hinge Loss,深度学习版SVM。

具体的gradient descent步骤:
链式求导:
∂ l ( f ( x n ) , y ^ n ) ∂ w i = ∂ l ( f ( x n ) , y ^ n ) ∂ f ( x n ) ∂ f ( x n ) ∂ w i \frac{\partial l\left(f\left(x^{n}\right), \hat{y}^{n}\right)}{\partial w_{i}}=\frac{\partial l\left(f\left(x^{n}\right), \hat{y}^{n}\right)}{\partial f\left(x^{n}\right)} \frac{\partial f\left(x^{n}\right)}{\partial w_{i}} wil(f(xn),y^n)=f(xn)l(f(xn),y^n)wif(xn)

先看第一项:
∂ l ( f ( x n ) , y ^ n ) ∂ f ( x n ) = ∂ max ⁡ ( 0 , 1 − y ^ n f ( x n ) ) ∂ f ( x n ) = { − y ^ n  If  y ^ n f ( x n ) < 1 0  otherwise  \frac{\partial l\left(f\left(x^{n}\right), \hat{y}^{n}\right)}{\partial f\left(x^{n}\right)} = \frac{\partial \max \left(0,1-\hat{y}^{n} f\left(x^{n}\right)\right)}{\partial f\left(x^{n}\right)}=\left\{\begin{array}{cc} -\hat{y}^{n} & \text { If } \hat{y}^{n} f\left(x^{n}\right)<1 \\ 0 & \text { otherwise } \end{array}\right. f(xn)l(f(xn),y^n)=f(xn)max(0,1y^nf(xn))={y^n0 If y^nf(xn)<1 otherwise 
第二项:
因为
f ( x ) = w T x f(x) = w^{T} x f(x)=wTx
所以
∂ f ( x n ) ∂ w i = x i n \frac{\partial f\left(x^{n}\right)}{\partial w_{i}} = x_{i}^{n} wif(xn)=xin

最后:
∂ L ( f ) ∂ w i = ∑ n − δ ( y ^ n f ( x n ) < 1 ) y ^ n x i = ∑ n c n ( w ) x i \frac{\partial L(f)}{\partial w_{i}}=\sum_{n}-\delta\left(\hat{y}^{n} f\left(x^{n}\right)<1\right) \hat{y}^{n} x_{i}=\sum_{n}c^n(w)x_{i} wiL(f)=nδ(y^nf(xn)<1)y^nxi=ncn(w)xi
进行梯度更新:
w i ← w i − η ∑ n c n ( w ) x i n w_{i} \leftarrow w_{i}-\eta \sum_{n} c^{n}(w) x_{i}^{n} wiwiηncn(w)xin

another formulation

通常SVM的做法是:
y ^ n f ( x ) ≥ 1 − ε n \hat{y}^{n} f(x) \geq 1-\varepsilon^{n} y^nf(x)1εn

希望找到 y ^ n f ( x ) \hat{y}^{n} f(x) y^nf(x)同号,并且大于等于margin = 1,但是有时候没法满足这个margin,所以就要减一个 ε n ( ≥ 0 ) \varepsilon^{n}(\geq 0) εn(0)来放宽margin。作为Quadradic programming problem求解。
约束可以表示成:
ε n ≥ 0 ε n ≥ 1 − y ^ n f ( x ) \begin{aligned} \varepsilon^{n} & \geq 0 \\ \varepsilon^{n} & \geq 1-\hat{y}^{n} f(x) \end{aligned} εnεn01y^nf(x)
是一个空间面

回到上面:
如果把loss表示成:
L ( f ) = ∑ n ε n + λ ∥ w ∥ 2 L(f)=\sum_{n} \quad \varepsilon^{n}+\lambda\|w\|_{2} L(f)=nεn+λw2
也就是:
ε n = max ⁡ ( 0 , 1 − y ^ n f ( x ) ) \varepsilon^{n}=\max \left(0,1-\hat{y}^{n} f(x)\right) εn=max(0,1y^nf(x))

总结:可以看到常规SVM的做法的约束在做最小化时,其实和Hinge Loss的含义是一样的,比如给SVM的做法的约束加一个很大的值,但是为了使得loss最小,也会使得空间面趋向于与Hinge Loss线

在这里插入图片描述

Kernel Method

Dual Representation

实际上w是由x线性组成的
w ∗ = ∑ n α n ∗ x n w^{*}=\sum_{n} \alpha_{n}^{*} x^{n} w=nαnxn
证明:

在这里插入图片描述
意味着,我们初始化的时候w是一个0向量。每次更新w的量都是由x线性变换组成的w。所以最后的w也是由x组成的线性变换。这个线性变换就是 α n ∗ \alpha_{n}^{*} αn

其中:
c n ( w ) = ∂ l ( f ( x n ) , y ^ n ) ∂ f ( x n ) \begin{array}{l} c^{n}(w) =\frac{\partial l\left(f\left(x^{n}\right), \hat{y}^{n}\right)}{\partial f\left(x^{n}\right)} \end{array} cn(w)=f(xn)l(f(xn),y^n)

l ( f ( x n ) , y ^ n ) l\left(f\left(x^{n}\right), \hat{y}^{n}\right) l(f(xn),y^n)长这样
在这里插入图片描述
所以当 y ^ n f ( x ) ≥ 1 \hat{y}^{n} f(x) \geq 1 y^nf(x)1时,就求导就都为0。有可能使用Hinge loss通常求导后为0,导致线性变换 α n ∗ \alpha_{n}^{*} αn是离散的, 即w由x组成的线性变换 α n ∗ \alpha_{n}^{*} αn,有可能部分是0。非0对应的就是支持向量x,这也就是SVM支持向量机的由来。

这也就意味着,在数据里的点不会都是支持向量,假如异常点不是支持向量,所以SVM是比较鲁棒的。而Cross Entropy的Loss函数的每个点微分都不会是0,所以它是更密的。意味异常数据影响更大。

总结:w是由x线性组成的,这个线性变换就是 α n ∗ \alpha_{n}^{*} αn


在这里插入图片描述
做变换,改成矩阵相乘表示。那么改一下3步骤样子:

Step 1: f ( x ) = ∑ n α n K ( x n , x ) f(x)=\sum_{n} \alpha_{n} K\left(x^{n}, x\right) f(x)=nαnK(xn,x)
在这里插入图片描述
上面把 x n ⋅ x x^{n} \cdot x xnx表示成 K ( x n , x ) K\left(x^{n}, x\right) K(xn,x)这么一个函数,也就是核函数(Kernel Function)

Step 2, 3:
在这里插入图片描述
K ( x n , x ) K\left(x^{n}, x\right) K(xn,x)里面没有参数,所以变成找 α n \alpha_{n} αn最小化Loss
观察上面式子,我们发现不需要知道x的vector是什么,知道 K ( x n , x ) K\left(x^{n}, x\right) K(xn,x)是什么就可以继续下去,然后结束。真正需要知道的是 X T x X^{T} x XTx,就可以做所有的优化。这一方法就叫核技巧(Kernel trick),可以带来的好处我们下面分析。

Kernel Trick

在低维空间可能线性不可分,Kernel Trick其实就是想把数据从低维转到高维然后在高维空间进行超平面划分。
这一过程就是输入 x x x,输出 ϕ ( x ) \phi(x) ϕ(x)。然后在高维空间做内积,即 K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) K(x, z)=\phi(x) \cdot \phi(z) K(x,z)=ϕ(x)ϕ(z)。而我们知道,在高维空间做内积可能运算量是巨大的。然后又发现高维空间内积的形式其实可以在低维空间中表示,比如下面的例子

假设有个变换 ϕ \phi ϕ可以把输入的x进行Feature Transform
比如输入数据:
x = [ x 1 x 2 ] x=\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right] x=[x1x2]
Feature Transform:
ϕ ( x ) = [ x 1 2 2 x 1 x 2 x 2 2 ] \phi(x)=\left[\begin{array}{c} x_{1}^{2} \\ \sqrt{2} x_{1} x_{2} \\ x_{2}^{2} \end{array}\right] ϕ(x)=x122 x1x2x22

发现:
ϕ ( x ) ⋅ ϕ ( z ) = [ x 1 2 2 x 1 x 2 x 2 2 ] ⋅ [ z 1 2 2 z 1 z 2 z 2 2 ] = x 1 2 z 1 2 + 2 x 1 x 2 z 1 z 2 + x 2 2 z 2 2 = ( x 1 z 1 + x 2 z 2 ) 2 = ( [ x 1 x 2 ] ⋅ [ z 1 z 2 ] ) 2 = ( x ⋅ z ) 2 \begin{array}{l} \phi(x) \cdot \phi(z)=\left[\begin{array}{c} x_{1}^{2} \\ \sqrt{2} x_{1} x_{2} \\ x_{2}^{2} \end{array}\right] \cdot\left[\begin{array}{c} z_{1}^{2} \\ \sqrt{2} z_{1} z_{2} \\ z_{2}^{2} \end{array}\right] \\ =x_{1}^{2} z_{1}^{2}+2 x_{1} x_{2} z_{1} z_{2}+x_{2}^{2} z_{2}^{2} \\ =\left(x_{1} z_{1}+x_{2} z_{2}\right)^{2}=\left(\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right] \cdot\left[\begin{array}{l} z_{1} \\ z_{2} \end{array}\right]\right)^{2} \\ =(x \cdot z)^{2} \end{array} ϕ(x)ϕ(z)=x122 x1x2x22z122 z1z2z22=x12z12+2x1x2z1z2+x22z22=(x1z1+x2z2)2=([x1x2][z1z2])2=(xz)2

所以有这么一个Kernel Function:
K ( x , z ) = ( x ⋅ z ) 2 K(x, z) = (x \cdot z)^{2} K(x,z)=(xz)2
对应的Feature Transform是 ϕ ( x ) \phi(x) ϕ(x)。其实对于SVM来说,输入还是 X T X^{T} XT x x x,如果不做任何变化,即 K ( x , z ) = x ⋅ z K(x,z) = x \cdot z K(x,z)=xz,那么其实这个核函数是什么Feature Transform都没做,而上面的例子 K ( x , z ) = ( x ⋅ z ) 2 K(x, z) = (x \cdot z)^{2} K(x,z)=(xz)2,是说做了 ϕ ( x ) = [ x 1 2 2 x 1 x 2 x 2 2 ] \phi(x)=\left[\begin{array}{c} x_{1}^{2} \\ \sqrt{2} x_{1} x_{2} \\ x_{2}^{2} \end{array}\right] ϕ(x)=x122 x1x2x22这么一个Feature Transform。

RBF(Radial Basis Function)Kernel

下面先给KF,然后解释Feature Transform

先给出Kernel Function:
K ( x , z ) = exp ⁡ ( − 1 2 ∥ x − z ∥ 2 ) K(x, z)=\exp \left(-\frac{1}{2}\|x-z\|_{2}\right) K(x,z)=exp(21xz2)
我们现在进行反推,尝试理解这个Kernel Function对应的Feature Transform是什么。
exp ⁡ ( − 1 2 ∥ x − z ∥ 2 ) = exp ⁡ ( − 1 2 ∥ x ∥ 2 − 1 2 ∥ z ∥ 2 + x ⋅ z ) = exp ⁡ ( − 1 2 ∥ x ∥ 2 ) exp ⁡ ( − 1 2 ∥ z ∥ 2 ) exp ⁡ ( x ⋅ z ) = C x C z exp ⁡ ( x ⋅ z ) = C x C z ∑ i = 0 ∞ ( x ⋅ z ) i i ! = C x C z + C x C z ( x ⋅ z ) + C x C z 1 2 ( x ⋅ z ) 2 ⋯ \begin{array}{l} \exp \left(-\frac{1}{2}\|x-z\|_{2}\right)\\ =\exp \left(-\frac{1}{2}\|x\|_{2}-\frac{1}{2}\|z\|_{2}+x \cdot z\right)\\ =\exp \left(-\frac{1}{2}\|x\|_{2}\right) \exp \left(-\frac{1}{2}\|z\|_{2}\right) \exp (x \cdot z)\\ =C_{x} C_{z} \exp (x \cdot z) \\ =C_{x} C_{z} \sum_{i=0}^{\infty} \frac{(x \cdot z)^{i}}{i !}\\ =C_{x} C_{z}+C_{x} C_{z}(x \cdot z)+C_{x} C_{z} \frac{1}{2}(x \cdot z)^{2} \cdots \end{array} exp(21xz2)=exp(21x221z2+xz)=exp(21x2)exp(21z2)exp(xz)=CxCzexp(xz)=CxCzi=0i!(xz)i=CxCz+CxCz(xz)+CxCz21(xz)2
后面几步是进行泰勒展开
在这里插入图片描述
所以这个RBF Kernel Function 对应的Feature Transform是把输入的data x转换到无穷多维的一个空间上。
比如下图,输入数据的特征在低维空间上表示的,不能线性区分,现在做了Feature Transform: ϕ \phi ϕ转到右边高维空间,而RBF Kernel Function 对应的 ϕ \phi ϕ是转换到一个无限高维空间,这就导致一个缺点:可能在训练集上过拟合
在这里插入图片描述

Sigmoid Kernel

和NN的关系

先给出Kernel Function:
K ( x , z ) = tanh ⁡ ( x ⋅ z ) K(x, z)=\tanh (x \cdot z) K(x,z)=tanh(xz)
那么
f ( x ) = ∑ n α n K ( x n , x ) = ∑ n α n tanh ⁡ ( x n ⋅ x ) f(x)=\sum_{n} \alpha^{n} K\left(x^{n}, x\right)=\sum_{n} \alpha^{n} \tanh \left(x^{n} \cdot x\right) f(x)=nαnK(xn,x)=nαntanh(xnx)
这其实就相当于只有1层hidden layer的NN

在这里插入图片描述
每个神经元的权重是输入每笔数据,比如第一个神经元的w是第一笔数据。
最后加权的weight就是 α \alpha α。注意到神经元的数目就是支持向量的数目,不是支持向量对应的 α i = 0 \alpha^i = 0 αi=0

在这里插入图片描述
当输入是声音sequence时,因为长度不一样,很难用vector统一表示。
但是我们可以直接设定 K ( x , z ) K(x, z) K(x,z)就是x和z的相似度。所以只要知道怎么算两个sequence的相似度,就可以进行SVM了。那怎么检查这样的相似度是不是真的存在支持向量呢?可以使用Mercer’s theory。

Deep Learning 和 SVM 差别

在这里插入图片描述
前几个layer做的就是Feature transformation,后面就是linear classifier

在这里插入图片描述
SVM做的也是类似的事情,使用一个Kernel Function: ϕ ( x ) \phi(x) ϕ(x),也是做Feature transformation。把feature转到高维对的空间上面,然后在高维空间进行linear classifier。而SVM里面一般linear classifier使用hinge loss。
事实上,SVM的kernel也是可以学习的,但是它学习能力没法像DP那么多,核心思想就是有好几和kernel,中间的weight是可以学习的。当只有一个kernel就类似只有1层hidden layer的NN。当有多个kernel组合时,就像有2层hidden layer的NN。

以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值