在一个周日下午,夏天的雨稀里哗啦地下着
我躺在床上,捧着ipad看支持向量机
睡了好几个觉…支持向量机太好睡了
拉格朗日乘数法太好睡了
几何函数太好睡了
在我看来,支持向量机是目前学下来,最难以理解的内容
希望日后不要太难…脑子不支持的
1. 支持向量机的分类原理
支持向量积的原理,网上已经有很多人解释了。
支持向量机(SVM)——原理篇
机器学习笔记(五):支持向量机(SVM)
支持向量机算法(SVM)详细讲解(含手推公式)
但即使看了原理篇,依然有绊倒自己的地方,或许是自己数学基础跟不上各大阿婆主,只好自己列出困惑的数学问题。
当数据集线性可分时,假设有一个线性函数能将数据集分类,这就是感知机模型该做的事:找到能让数据集线性划分的一个线性函数 y = ∑ w i x i + b y = ∑w_ix_i + b y=∑wixi+b
但实际上,不一定只有一个线性函数,能线性划分数据集,那么哪个线性函数的划分效果更好呢?这就是支持向量机进一步要做的事。
支持向量机是以感知机为基础,进一步要求线性函数划分距离更宽:也就是线性函数两侧的数据集,距离最远,即求出线性函数对称两侧的最大宽度距离2d
这挺好理解的,要想井水不犯河水,那就离得远远的。最好是一个天上,一个地下,互不打扰
比如深海里的鲨鱼,和高空上的雄鹰,这俩就不是一类…因为离得太远…好吧,这个比喻纯粹扯淡了
从逻辑上来说,空间距离越大,差异越大,这是公认事实。
但要怎么求出2d的最大值呢?
这就要涉及到我困惑很久的第一个问题:点到线(点到面或超平面)的距离计算公式
1.2 第一个数学困惑:点到线(面)的距离公式
d = ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 d = \frac{|W^TX+b|}{||W||_2} d=∣∣W∣∣2∣WTX+b∣
为什么是这个公式??这让我困惑很久…数学没学好
我试着从几何的角度,从一元线性函数、二元线性函数图像上去推导,但仅仅能推导到二元,一旦涉及到三元【三维空间】,我脑子就废了
后来,无意间看到一个博主的解释
恍然大悟,哦~~~~
但哦什么呢。。。。这个法向量n是怎么算的
如果超平面的函数为 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0
求点 x b x_b xb到超平面 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0的距离,(设点 x a x_a xa位于平面上)
那个博主说法向量设为 n → = ( A , B , C ) n^→=(A,B,C) n→=(A,B,C)
则向量 x a x b → = ( x a 1 − x b 1 , x a 2 − x b 2 , x a 3 − x b 3 ) {x_ax_b}^→=(x_{a1}-x_{b1},x_{a2}-x_{b2},x_{a3}-x_{b3}) xaxb→=(xa1−xb1,xa2−xb2,xa3−xb3)
d = x a x b → ∗ n → ∣ n → ∣ = A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) A 2 + B 2 + C 2 d = \frac{{x_ax_b}^→*n^→}{|n^→|}=\frac{A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})}{\sqrt{A^2+B^2+C^2}} d=∣n→∣xaxb→∗n→=A2+B2+C2A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)
由于点 x a x_a xa位于平面上,因此 A x a 1 + B x a 2 + C x a 3 + D = 0 Ax_{a1}+Bx_{a2}+Cx_{a3}+D = 0 Axa1+Bxa2+Cxa3+D=0
则 A x a 1 + B x a 2 + C x a 3 = − D Ax_{a1}+Bx_{a2}+Cx_{a3}= -D Axa1+Bxa2+Cxa3=−D
则分子部分: A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3}) A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)
= − ( A x b 1 + B x b 2 + C x b 3 + D ) =-(Ax_{b1}+Bx_{b2}+Cx_{b3}+D) =−(Axb1+Bxb2+Cxb3+D)
整合起来的 d = ∣ x a x b → ∗ n → ∣ ∣ n → ∣ = ∣ A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) ∣ A 2 + B 2 + C 2 = ∣ − ( A x b 1 + B x b 2 + C x b 3 + D ) ∣ A 2 + B 2 + C 2 d = \frac{|{x_ax_b}^→*n^→|}{|n^→|}=\frac{|A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})|}{\sqrt{A^2+B^2+C^2}}=\frac{|-(Ax_{b1}+Bx_{b2}+Cx_{b3}+D)|}{\sqrt{A^2+B^2+C^2}} d=∣n→∣∣xaxb→∗n→∣=A2+B2+C2∣A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)∣=A2+B2+C2∣−(Axb1+Bxb2+Cxb3+D)∣
这不就是 d = ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 d = \frac{|W^TX+b|}{||W||_2} d=∣∣W∣∣2∣WTX+b∣ 的公式了嘛!!!
但要注意:
d = ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 d = \frac{|W^TX+b|}{||W||_2} d=∣∣W∣∣2∣WTX+b∣公式,表示的是点到中间分类函数线的距离
不同的点,计算出的d值是不同的。
顿悟!!
但问题又来了
凭什么法向量可以设为
n → = ( A , B , C ) n^→=(A,B,C) n→=(A,B,C)
这也是困惑很久的小问题,但也可以证明:首先知道法向量是垂直于平面的
求法向量 n → = ( x n 1 , x n 2 , x n 3 ) n^→=(x_{n1},x_{n2},x_{n3}) n→=(xn1,xn2,xn3)
那么当平面上有两个不共线的向量 Q → = ( x q 1 , x q 2 , x q 3 ) Q^→=(x_{q1},x_{q2},x_{q3}) Q→=(xq1,xq2,xq3), F → = ( x f 1 , x f 2 , x f 3 ) F^→=(x_{f1},x_{f2},x_{f3}) F→=(xf1,xf2,xf3)
法向量与这两个向量的乘积均为0
n → ∗ Q = x n 1 x q 1 + x n 2 x q 2 + x n 3 x q 3 = 0 n^→*Q^=x_{n1}x_{q1}+x_{n2}x_{q2}+x_{n3}x_{q3} = 0 n→∗Q=xn1xq1+xn2xq2+xn3xq3=0
n → ∗ F = x n 1 x f 1 + x n 2 x f 2 + x n 3 x f 3 = 0 n^→*F^=x_{n1}x_{f1}+x_{n2}x_{f2}+x_{n3}x_{f3} = 0 n→∗F=xn1xf1+xn2xf2+xn3xf3=0
上述两个式子相减得到 x n 1 ( x f 1 − x q 1 ) + x n 2 ( x f 1 − x q 2 ) + x n 3 ( x f 1 − x q 3 ) = 0 x_{n1}(x_{f1}-x_{q1})+x_{n2}(x_{f1}-x_{q2})+x_{n3}(x_{f1}-x_{q3})=0 xn1(xf1−xq1)+xn2(xf1−xq2)+xn3(xf1−xq3)=0
并且由于向量 Q → 和 F → Q^→和F^→ Q→和F→都在平面上,因此:
A x q 1 + B x q 2 + C x q 3 + D = 0 Ax_{q1}+Bx_{q2}+Cx_{q3}+D = 0 Axq1+Bxq2+Cxq3+D=0
A x f 1 + B x f 2 + C x f 3 + D = 0 Ax_{f1}+Bx_{f2}+Cx_{f3}+D = 0 Axf1+Bxf2+Cxf3+D=0
上述两个式子相减 A ( x f 1 − x q 1 ) + B ( x f 1 − x q 2 ) + C ( x f 1 − x q 3 ) = 0 A(x_{f1}-x_{q1})+B(x_{f1}-x_{q2})+C(x_{f1}-x_{q3}) = 0 A(xf1−xq1)+B(xf1−xq2)+C(xf1−xq3)=0
综合可得:
x n 1 ( x f 1 − x q 1 ) + x n 2 ( x f 1 − x q 2 ) + x n 3 ( x f 1 − x q 3 ) = 0 x_{n1}(x_{f1}-x_{q1})+x_{n2}(x_{f1}-x_{q2})+x_{n3}(x_{f1}-x_{q3})=0 xn1(xf1−xq1)+xn2(xf1−xq2)+xn3(xf1−xq3)=0
A ( x f 1 − x q 1 ) + B ( x f 1 − x q 2 ) + C ( x f 1 − x q 3 ) = 0 A(x_{f1}-x_{q1})+B(x_{f1}-x_{q2})+C(x_{f1}-x_{q3}) = 0 A(xf1−xq1)+B(xf1−xq2)+C(xf1−xq3)=0
因此,可以设 x n 1 = A x_{n1}=A xn1=A, x n 2 = B x_{n2}=B xn2=B, x n 3 = C x_{n3}=C xn3=C
因此法向量可以设为函数的系数!!!!
又悟了!!!数学渣渣的困惑。。。终于悟了
1.3 第二个数学困惑:距离公式的分子用1来计算
教科书,包括很多up主,在求解最大宽度距离 2 d = 2 ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 2d= \frac{2|W^TX+b|}{||W||_2} 2d=∣∣W∣∣22∣WTX+b∣时,又转化为 求 2 ∣ ∣ W ∣ ∣ 2 \frac{2}{||W||_2} ∣∣W∣∣22的最大值
why??
其实我也悟了。。。但太困了。。。明天再搞吧
公式推导一下:
将划分数据集的分类函数为 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0
而两侧对称的边界函数分为设为:
- A x 1 + B x 2 + C x 3 + D = Q Ax_1+Bx_2+Cx_3+D = Q Ax1+Bx2+Cx3+D=Q,移项得 A x 1 + B x 2 + C x 3 + D − Q = 0 Ax_1+Bx_2+Cx_3+D - Q=0 Ax1+Bx2+Cx3+D−Q=0
- A x 1 + B x 2 + C x 3 + D = − Q Ax_1+Bx_2+Cx_3+D = -Q Ax1+Bx2+Cx3+D=−Q,移项得 A x 1 + B x 2 + C x 3 + D + Q = 0 Ax_1+Bx_2+Cx_3+D + Q=0 Ax1+Bx2+Cx3+D+Q=0
这两个函数之间的距离,并不是2Q,而是 2 Q ∣ ∣ W ∣ ∣ 2 \frac{2Q}{||W||_2} ∣∣W∣∣22Q
为什么是这样呢?
假设
点 x a x_a xa位于 A x 1 + B x 2 + C x 3 + D − Q = 0 Ax_1+Bx_2+Cx_3+D - Q=0 Ax1+Bx2+Cx3+D−Q=0边界函数上
点 x b x_b xb位于 A x 1 + B x 2 + C x 3 + D + Q = 0 Ax_1+Bx_2+Cx_3+D + Q=0 Ax1+Bx2+Cx3+D+Q=0边界函数上
A x 1 + B x 2 + C x 3 + D − Q = 0 Ax_1+Bx_2+Cx_3+D - Q=0 Ax1+Bx2+Cx3+D−Q=0和 A x 1 + B x 2 + C x 3 + D + Q = 0 Ax_1+Bx_2+Cx_3+D + Q=0 Ax1+Bx2+Cx3+D+Q=0是平行的边界函数
设点 x a x_a xa和点 x b x_b xb的连线,垂直于这两条边界函数,则向量 x a x b → x_ax_b^→ xaxb→则相当于这两个边界函数的法向量,同时模| x a x b → x_ax_b^→ xaxb→|表示两个边界函数的距离。
现在要求的就是模| x a x b → x_ax_b^→ xaxb→|,即两个边界函数的距离。
法向量设为 n → = ( A , B , C ) n^→=(A,B,C) n→=(A,B,C)
则向量 x a x b → = ( x a 1 − x b 1 , x a 2 − x b 2 , x a 3 − x b 3 ) {x_ax_b}^→=(x_{a1}-x_{b1},x_{a2}-x_{b2},x_{a3}-x_{b3}) xaxb→=(xa1−xb1,xa2−xb2,xa3−xb3)
d 边界 = x a x b → ∗ n → ∣ n → ∣ = A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) A 2 + B 2 + C 2 d_{边界} = \frac{{x_ax_b}^→*n^→}{|n^→|}=\frac{A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})}{\sqrt{A^2+B^2+C^2}} d边界=∣n→∣xaxb→∗n→=A2+B2+C2A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)
由于点 x a x_a xa有 A x a 1 + B x a 2 + C x a 3 + D − Q = 0 Ax_{a1}+Bx_{a2}+Cx_{a3}+D -Q= 0 Axa1+Bxa2+Cxa3+D−Q=0
点 x b x_b xb有 A x b 1 + B x b 2 + C x b 3 + D + Q = 0 Ax_{b1}+Bx_{b2}+Cx_{b3}+D +Q= 0 Axb1+Bxb2+Cxb3+D+Q=0
则上述两式相减可得: A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) − 2 Q = 0 A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})-2Q=0 A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)−2Q=0
则 d 边界 = ∣ x a x b → ∗ n → ∣ ∣ n → ∣ = ∣ A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) ∣ A 2 + B 2 + C 2 = 2 Q A 2 + B 2 + C 2 d_{边界} = \frac{|{x_ax_b}^→*n^→|}{|n^→|}=\frac{|A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})|}{\sqrt{A^2+B^2+C^2}}=\frac{2Q}{\sqrt{A^2+B^2+C^2}} d边界=∣n→∣∣xaxb→∗n→∣=A2+B2+C2∣A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)∣=A2+B2+C22Q
因此,两个边界函数的公式可对应为
- W T X + b = Q W^TX+b = Q WTX+b=Q
- W T X + b = − Q W^TX+b = -Q WTX+b=−Q
且两个边界函数的距离为 2 Q ∣ ∣ W ∣ ∣ 2 \frac{2Q}{||W||_2} ∣∣W∣∣22Q
而实际边界函数的W、b系数同比例增大或减小,对函数是毫无影响的
就比如2x + 4 = 0 与 x+2 = 0 本质都是相同的函数。
因此可对两个边界函数的W和b参数进行同比例的缩放
- W T X + b = Q W^TX+b = Q WTX+b=Q,变为 W Q T X + b Q = 1 \frac{W}{Q}^TX+\frac{b}{Q} = 1 QWTX+Qb=1
- W T X + b = − Q W^TX+b = -Q WTX+b=−Q,变为 W Q T X + b Q = − 1 \frac{W}{Q}^TX+\frac{b}{Q} = -1 QWTX+Qb=−1
此时,系数更新为 W = W Q W = \frac{W}{Q} W=QW, b = b Q b=\frac{b}{Q} b=Qb
因此两个边界函数最终变为了
- W T X + b = 1 W^TX+b = 1 WTX+b=1
- W T X + b = − 1 W^TX+b = -1 WTX+b=−1
并且两个边界函数的距离为 d 边界 = 2 ∣ ∣ W ∣ ∣ 2 d_{边界} = \frac{2}{||W||_2} d边界=∣∣W∣∣22
至此,证成!!!
妈呀…应该是对的吧!!!
但其实我有个困惑,最初证明的点到线(面)的距离公式,以及两个边界函数的距离公式,分别有什么意义呢?
支持向量机,到底是要求距离中间分类线最近的点到线(面)的距离最大,还是要求两个边界函数的距离最大呢?
本质上看,这两个要求其实都是同一个要求,但实际上这两个要求所进行的计算方式是不同的。
如果是要求距离中间分类线最近的点,到中间分类函数的距离最大,那就必须先能求出中间分类函数——但实际我们没有边界函数,是没办法求出中间分类函数的。
- 因此,应该是要求两个边界函数的距离最大,因为两个边界函数的距离,实际是可以根据某个分类函数来求的。
听起来很绕口,但实际就是我们可以根据感知机模型,求出一个分类函数,但这个分类函数并不一定是能将数据集平均分的函数
但这个不怎么完美的函数,却是一个有着明确参数W的函数,那么假设两个边界函数分别在这个分类函数的两侧【注:两个边界函数未必对称分布在分类函数的两边】
我们无需计算出具体的参数b,只要根据参数W,就可以求出两个边界函数的距离
- d 边界 = 2 ∣ ∣ W ∣ ∣ 2 d_{边界} = \frac{2}{||W||_2} d边界=∣∣W∣∣22
但要注意,边界函数是要能够将数据集分类的,因此边界函数的还要满足以下两个条件 - W T X + b ≥ 1 W^TX+b ≥ 1 WTX+b≥1时, y = 1 y=1 y=1,要求分类正确,即 y ∗ ( W T X + b ) ≥ 1 y*(W^TX+b)≥1 y∗(WTX+b)≥1
- W T X + b ≤ − 1 W^TX+b ≤ -1 WTX+b≤−1时, y = − 1 y=-1 y=−1,要求分类正确,即 y ∗ ( W T X + b ) ≥ 1 y*(W^TX+b)≥1 y∗(WTX+b)≥1
- 整合起来就是两条边界函数均满足: y ∗ ( W T X + b ) ≥ 1 y*(W^TX+b)≥1 y∗(WTX+b)≥1
因此,我们只需求出 d 边界 d_{边界} d边界的最大值,并且满足条件 y ∗ ( W T X + b ) ≥ 1 y*(W^TX+b)≥1 y∗(WTX+b)≥1,即可得到模型的最优解。
那么究竟要怎么在有条件限制的情况下,求出极值呢?
这就涉及到拉格朗日乘数法了
这痛苦的让人哭泣的拉格朗日
明天继续吧!!
- 求 d 边界 m a x = 2 ∣ ∣ W ∣ ∣ 2 d_{边界max} = \frac{2}{||W||_2} d边界max=∣∣W∣∣22,实际相当于求 W 2 2 \frac{W^2}{2} 2W2的最小值
要是换以前,求最小值,要么用求导法或是用梯度下降法,就可以实现。
但现在不行了,因为求最小值时,是有条件约束的。
如何求条件约束下的极小值呢?
1.4 第三个数学困惑:拉格朗日乘数法的数理推导
这就要用到号称“条件极值杀手”的【拉格朗日乘数法】了。
死脑筋用拉格朗日乘数法,其实会比较简单,
但真的要理解拉格朗日乘数法,真的是头疼
首先,当要求的原函数为f(x,y),条件约束为等式约束g(x,y)=0时,求条件约束下的原函数极小值。
- 原函数: f ( x , y ) f(x,y) f(x,y)
- 等式约束条件: g ( x , y ) = 0 g(x,y)=0 g(x,y)=0
- 求 m i n ( f ( x , y ) ) min(f(x,y)) min(f(x,y))
拉格朗日乘数法的计算过程为求 L ( x , y ) = f ( x , y ) + λ g ( x , y ) L(x,y) = f(x,y)+λg(x,y) L(x,y)=f(x,y)+λg(x,y)的极值
- L x ′ = f x ′ + λ g x ′ L'_x= f'_x+λg'_x Lx′=fx′+λgx′
- L y ′ = f x ′ + λ g x ′ L'_y= f'_x+λg'_x Ly′=fx′+λgx′
- L λ ′ = g ( x , y ) L'_λ= g(x,y) Lλ′=g(x,y)
- 并解出x,y,λ的值,其中 x,y就是可能的符合约束条件下的极小值
看到这的时候,我直觉是合理的,但不知道是如何得出这样的计算过程,并产生了几个问题:
- 为什么有λ?
- 为什么可以构成拉格朗日函数?
- 为什么求出拉格朗日函数极值,就可以求出符合约束条件的极小值???
所以自己又翻阅了很多知乎阿婆主的各种解释
终于功夫不负爱搜索的人
很多人的解释是:用等高线来绘制原函数f(x,y)时,会呈现层层嵌套的圈圈,然后绘制g(x,y)时,很多人却又不是用等高线来绘制g(x,y),然后很多人的解析就直接说g(x,y)取到极值的时候(与f(x,y)相切),就取到了符合约束条件的最小值。
说实话,几何法我还是不太理解
找到有个up主的数理推导:
通过g(x,y)=0,说明这个g(x,y)是隐函数,然后我们可设为显函数y = φ(x)
然后代入f原函数: z = f ( x , φ ( x ) ) z=f(x,φ(x)) z=f(x,φ(x)),用z表示代入后的函数表达,使得z与原函数f区分开
从KKT条件推导穿越回来的我,不得不俯首痛哭:下边关于拉格朗日乘数法的推导,all bullshit
是的,我想,我应该全盘推翻
还是要把基础打好,先理解好导数、偏导数、微分、偏微分、全微分、梯度、方向导数这些基础概念
不然自己理解起来,会十分混淆
是的,基础很重要
【错误的开始:
z x ′ = ə f ə x + ə f ə y d φ ( x ) d x = f x ′ + f y ′ ∗ φ x ′ z'_x= \frac{əf}{əx}+\frac{əf}{əy}\frac{dφ(x)}{dx}=f'_x+f'_y*φ'_x zx′=əxəf+əyəfdxdφ(x)=fx′+fy′∗φx′
根据隐函数求导法则: d y d x = − F x ′ F y ′ \frac{dy}{dx}= - \frac{F'_x}{F'_y} dxdy=−Fy′Fx′为什么隐函数求导法则是这样的,后续再证明
则知道 φ x ′ = d y d x = − g x ′ g y ′ φ'_x=\frac{dy}{dx}=-\frac{g'_x}{g'_y} φx′=dxdy=−gy′gx′
因此 z x ′ = f x ′ + f y ′ ∗ φ x ′ = f x ′ − f y ′ ∗ g x ′ g y ′ = f x ′ − f y ′ g y ′ ∗ g x ′ z'_x = f'_x+f'_y*φ'_x= f'_x-f'_y*\frac{g'_x}{g'_y}= f'_x-\frac{f'_y}{g'_y}*g'_x zx′=fx′+fy′∗φx′=fx′−fy′∗gy′gx′=fx′−gy′fy′∗gx′
设 λ = − f y ′ g y ′ ,则有 f x ′ ( x , y ) = f x ′ − f y ′ g y ′ ∗ g x ′ = f x ′ + λ ∗ g x ′ λ =- \frac{f'_y}{g'_y},则有f'_x(x,y) = f'_x-\frac{f'_y}{g'_y}*g'_x= f'_x+λ*g'_x λ=−gy′fy′,则有fx′(x,y)=fx′−gy′fy′∗gx′=fx′+λ∗gx′
而此时,y的偏导数为 z y ′ = f y ′ + λ ∗ g y ′ = f y ′ − f y ′ g y ′ ∗ g y ′ = 0 z'_y = f'_y+λ*g'_y=f'_y-\frac{f'_y}{g'_y}*g'_y=0 zy′=fy′+λ∗gy′=fy′−gy′fy′∗gy′=0
融入了约束条件的函数f求得极值点,需要令x,y的偏导数均为0
- 要使 z x ′ = f x ′ + λ ∗ g x ′ = 0 ,则可能 λ = − f x ′ g x ′ 要使z'_x = f'_x+λ*g'_x=0,则可能 λ = -\frac{f'_x}{g'_x} 要使zx′=fx′+λ∗gx′=0,则可能λ=−gx′fx′
- 要使 z y ′ = f y ′ + λ ∗ g y ′ = 0 ,则可能 λ = − f y ′ g y ′ 要使z'_y = f'_y+λ*g'_y=0,则可能 λ = -\frac{f'_y}{g'_y} 要使zy′=fy′+λ∗gy′=0,则可能λ=−gy′fy′
此时,要求的λ既等于 λ = − f y ′ g y ′ λ =- \frac{f'_y}{g'_y} λ=−gy′fy′,又 λ = − f x ′ g x ′ λ = -\frac{f'_x}{g'_x} λ=−gx′fx′
那么 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′因此可推出: f x ′ f y ′ = g x ′ g y ′ \frac{f'_x}{f'_y}= \frac{g'_x}{g'_y} fy′fx′=gy′gx′
em。。。这式子很整齐,但这是个什么式子呢????
根据隐函数的求导法则可知 f x ′ f y ′ = − d y d x \frac{f'_x}{f'_y}=-\frac{dy}{dx} fy′fx′=−dxdy, g x ′ g y ′ = − d y d x \frac{g'_x}{g'_y}=-\frac{dy}{dx} gy′gx′=−dxdy
所以, f x ′ f y ′ = g x ′ g y ′ \frac{f'_x}{f'_y}= \frac{g'_x}{g'_y} fy′fx′=gy′gx′可以表示f(x,y)和g(x,y)的切线斜率相等
哇!!!这不就出来了吗!!!这不就是很多人用几何作图来表示的,为什么f(x,y)和g(x,y)在两函数的切线处取到极值吗!!!!用数学推导应该是这样证明的吧!!!!
但是,后边KKT条件推导的我穿越回到这里,还是要唾骂一声: λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′不一定能推出 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′
因为如果 f x ′ f'_x fx′和 f y ′ f'_y fy′都是0的时候,就推不出 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′啦!!!!!!!
总之,当 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′,如果$ f x ′ f'_x fx′和 f y ′ f'_y fy′都不为0,可推出 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′,得到两个方程:
- z x ′ = f x ′ + λ ∗ g x ′ = 0 z'_x = f'_x+λ*g'_x=0 zx′=fx′+λ∗gx′=0
- z y ′ = f y ′ + λ ∗ g y ′ = 0 z'_y = f'_y+λ*g'_y=0 zy′=fy′+λ∗gy′=0
对这两个式子左右两边分别乘以dx和dy,得到: - z x ′ d x = f x ′ d x + λ ∗ g x ′ d x = ə f ə x d x + λ ∗ ə g ə x d x = 0 z'_x dx = f'_xdx+λ*g'_xdx=\frac{əf}{əx}dx+λ*\frac{əg}{əx}dx=0 zx′dx=fx′dx+λ∗gx′dx=əxəfdx+λ∗əxəgdx=0
- z y ′ d y = f y ′ d y + λ ∗ g y ′ d y = ə f ə y d y + λ ∗ ə g ə y d y = 0 z'_ydy = f'_ydy+λ*g'_ydy=\frac{əf}{əy}dy+λ*\frac{əg}{əy}dy=0 zy′dy=fy′dy+λ∗gy′dy=əyəfdy+λ∗əyəgdy=0
对上述两个式子左右两边相加,得到: - z x ′ d x + z y ′ d y = ə f ə x d x + ə f ə y d y + λ ∗ ə g ə x d x + λ ∗ ə g ə y d y = 0 z'_xdx +z'_ydy =\frac{əf}{əx}dx+\frac{əf}{əy}dy+λ*\frac{əg}{əx}dx+λ*\frac{əg}{əy}dy=0 zx′dx+zy′dy=əxəfdx+əyəfdy+λ∗əxəgdx+λ∗əyəgdy=0
对上述式子左右两边进行积分 - z ( x , y ) = f ( x , y ) + λ g ( x , y ) z(x,y)=f(x,y)+λg(x,y) z(x,y)=f(x,y)+λg(x,y)
而这个z函数,正是我们最后的拉格朗日函数 L ( x , y , λ ) = f ( x , y ) + λ g ( x , y ) L(x,y,λ)=f(x,y)+λg(x,y) L(x,y,λ)=f(x,y)+λg(x,y)
将g(x,y)=0约束条件转变为显示函数y = φ(x),并融入原函数f(x,y)后,原函数f(x,y)不再是那个自由自在的纯粹的原函数了,它有了条件约束就称为拉格朗日函数 L ( x , y , λ ) = f ( x , φ ( x ) ) L(x,y,λ)=f(x,φ(x)) L(x,y,λ)=f(x,φ(x))
并且当 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′时,且 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′,即原函数f(x,y)与约束条件g(x,y)函数相切时,下列式子成立,即可根据下列式子,求出x,y,λ后,求出拉格朗日函数的极值
- L x ′ = f x ′ + λ ∗ g x ′ = 0 L'_x = f'_x+λ*g'_x=0 Lx′=fx′+λ∗gx′=0
- L y ′ = f y ′ + λ ∗ g y ′ = 0 L'_y = f'_y+λ*g'_y=0 Ly′=fy′+λ∗gy′=0
- L λ ′ = g ( x , y ) = 0 L'_λ = g(x,y)=0 Lλ′=g(x,y)=0
我天呐!!!!我感觉完成了一大壮举!!!虽然我觉得偏导数、导数符号可能稍微有点儿问题
但没关系啊。。。至少,在我目前的认知层面来说。。。能圆过去
主要参照了两篇文章,并结合理解(其实这两篇文章中间都有我不理解的地方,但这么一相互融合理解,忽然就懂了呀!)
拉格朗日乘数法推导
拉格朗日乘数法理解
但问题尚未结束,因为之前引用了隐函数求导法则,但还不知道隐函数求导法则究竟是怎么推导出来的
:错误的结束】
1.4 第四个数学困惑:隐函数求导法则的公式推导
这是很简单的,看别人的就好
隐函数求导法则的证明——某博主
1.5 第五个数学困惑:KKT条件的推导
这是我理解到一半,就头晕地想放弃的
好难理解
首先,为什么拉格朗日乘数法不够用了呢?
因为支持向量机要解决的是:
- 求 m i n : w 2 2 求min:\frac{w^2}{2} 求min:2w2,约束条件是: y i ( w i x i + b ) ≥ 1 y_i(w_ix_i+b)≥1 yi(wixi+b)≥1
`但拉格朗日乘数法要求的约束条件是等式约束,但支持向量机却不是等式约束
那这种情况下,就需要对进一步地讲解KKT条件,KKT条件其实是拉格朗日乘数法的进化形态。
只有先理解拉格朗日乘数法,才能更好地理解KKT条件。
约束条件是非等式约束时,我们要将它化为等式约束,再进一步应用拉格朗日乘数法来求解
非等式约束: y i ( w i x i + b ) ≥ 1 y_i(w_ix_i+b)≥1 yi(wixi+b)≥1,要转化为与求解的极值同向:
- 即求min时,非等式约束需要转化为 1 − y i ( w i x i + b ) ≤ 0 1-y_i(w_ix_i+b)≤0 1−yi(wixi+b)≤0👉求min时,约束必须是≤0
- 求max时,非等式约束需要转化为 y i ( w i x i + b ) − 1 ≥ 0 y_i(w_ix_i+b)-1≥0 yi(wixi+b)−1≥0👉求max时,约束必须是≤0
why????说实话,我到现在都不理解为什么一定要同向,为什么为什么为什么???后续再慢慢想吧
考虑到支持向量机求得是 求 m i n : w 2 2 求min:\frac{w^2}{2} 求min:2w2,则约束条件应该化为 1 − y i ( w i x i + b ) ≤ 0 1-y_i(w_ix_i+b)≤0 1−yi(wixi+b)≤0
- 为了后边表示简便,将 1 − y i ( w i x i + b ) 1-y_i(w_ix_i+b) 1−yi(wixi+b)表示为 g ( x , y ) g(x,y) g(x,y),则不等式约束条件为 g ( x , y ) ≤ 0 g(x,y)≤0 g(x,y)≤0
- 当前不等式约束条件有两种情况:
-
- 约束条件g(x,y)=0,则表示约束
-
而 g ( x , y ) ≤ 0 g(x,y)≤0 g(x,y)≤0化为等式约束,则可以在右侧加上一个参数 α 2 α^2 α2
即: g ( x , y ) + α 2 = 0 g(x,y)+α^2=0 g(x,y)+α2=0
为什么是α²,而不是α,因为避免了要去判断α为负的情况。
化为等式约束 g ( x , y ) + α 2 = 0 g(x,y)+α^2=0 g(x,y)+α2=0后,就可以应用拉格朗日乘数法
- 求min: w 2 2 \frac{w^2}{2} 2w2,约束条件应该是对w的约束,为 g ( w ) + α 2 = 0 g(w)+α^2=0 g(w)+α2=0
- 建立拉格朗日函数: L ( w , λ , a ) = w 2 2 + λ ( g ( w ) + α 2 ) = w 2 2 + λ g ( w ) + λ α 2 L(w,λ,a) = \frac{w^2}{2}+λ(g(w)+α^2)=\frac{w^2}{2}+λg(w)+λα^2 L(w,λ,a)=2w2+λ(g(w)+α2)=2w2+λg(w)+λα2
如果按我之前推导的,当 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′时,且 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′时,可取到极值
注意:支持向量机中已知数据是x,y,而参数w,b未知,因此是通过拉格朗日求取w和b
对应之前推导的
f ( x , y ) = f ( w ) = w 2 2 f(x,y)=f(w) = \frac{w^2}{2} f(x,y)=f(w)=2w2
g ( x , y ) = g ( w ) = − λ y ( w x + b ) + λ ( 1 − α 2 ) g(x,y) = g(w)=-λy(wx+b)+λ(1-α^2) g(x,y)=g(w)=−λy(wx+b)+λ(1−α2)f w ′ = w f'_w = w fw′=w
g w ′ = − λ x y g'_w=-λxy gw′=−λxy
因此, λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′时,且 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′并不是拉格朗日函数法求得极值的唯一条件。因为可能原函数变量只有一个w,此时的我,要穿越回拉格朗日乘数法推导的过程中,纠正历史错误。。。。
根据拉格朗日函数构建后, L ( w , λ , a ) = w 2 2 + λ g ( w ) + λ α 2 L(w,λ,a)=\frac{w^2}{2}+λg(w)+λα^2 L(w,λ,a)=2w2+λg(w)+λα2如下计算出 L L L的极值
- ① L w ′ = w + λ d ( 1 − y ( x w + b ) ) d w = w − λ y x = 0 ,可得到 w = λ y x L'_w=w+λ\frac{d(1-y(xw+b))}{dw}=w-λyx=0,可得到w=λyx Lw′=w+λdwd(1−y(xw+b))=w−λyx=0,可得到w=λyx
- ② L λ ′ = g ( w ) + α 2 = 0 , 可得到 w = 1 − a 2 − y b x y L'_λ=g(w)+α^2=0,可得到w=\frac{1-a^2-yb}{xy} Lλ′=g(w)+α2=0,可得到w=xy1−a2−yb
- ③ L a ′ = 2 λ α = 0 ,可得到 λ = 0 或是 α = 0 L'_a=2λα=0,可得到λ=0或是α=0 La′=2λα=0,可得到λ=0或是α=0
-
如果λ=0,根据上式 ② g ( w ) + α 2 = 0 ②g(w)+α^2=0 ②g(w)+α2=0,则得到g(w)≤0,g(w)≤0表示约束不起作用【约束不起作用就相当于,我要求你考试不低于0分,这个要求无效,因为底线太低】
-
如果λ≠0,则α=0,根据上式 ② g ( w ) + α 2 = 0 ②g(w)+α^2=0 ②g(w)+α2=0,则说明g(w)=0,表示当L求得极值时,恰好是在g(w) =0的时候取到的。
- 注意,α的引入,是为了让函数能够满足g(w)≤0。
- 另外,此时的λ只能是λ≥0 ,
为什么呢?后续有机会再证明
-
由③知2λα=0,因此原本求min: L ( w , λ , a ) = w 2 2 + λ g ( w ) + λ α 2 L(w,λ,a)=\frac{w^2}{2}+λg(w)+λα^2 L(w,λ,a)=2w2+λg(w)+λα2,就可以转化为求min: L ( w , λ ) = w 2 2 + λ g ( w ) L(w,λ)=\frac{w^2}{2}+λg(w) L(w,λ)=2w2+λg(w)
-
于是,方程组的求解重新列为如下式子条件,这些条件正是KKT条件:
- L w ′ = w + λ d ( 1 − y ( x w + b ) ) d w = w + λ d ( g ( w ) ) d w = w − λ y x = 0 L'_w=w+λ\frac{d(1-y(xw+b))}{dw}=w+λ\frac{d(g(w))}{dw}=w−λyx=0 Lw′=w+λdwd(1−y(xw+b))=w+λdwd(g(w))=w−λyx=0
- λ g ( w ) = λ ( 1 − y ( x w + b ) ) = 0 λg(w)=λ(1-y(xw+b))=0 λg(w)=λ(1−y(xw+b))=0
- g ( w ) ≤ 0 g(w)≤0 g(w)≤0
- λ ≥ 0 λ≥0 λ≥0
得到KKT条件,则可以确保函数满足约束条件。
然后呢?这些条件如何能够推导出最大间隔的支持向量,也就是如何能够求出所构造的拉格朗日函数极小值,也就是如何能够得到边界函数的参数w和b呢?
- 当g(w,b)=0时,表示 y i ( x i w + b ) = 1 y_i(x_iw+b)=1 yi(xiw+b)=1,倒推分为了两种情况:
- y i = 1 , x i w + b = 1 ,表示上边界函数上的点 y_i=1, x_iw+b=1,表示上边界函数上的点 yi=1,xiw+b=1,表示上边界函数上的点
- y i = − 1 , x i w + b = − 1 ,表示下边界函数上的点 y_i=-1, x_iw+b=-1,表示下边界函数上的点 yi=−1,xiw+b=−1,表示下边界函数上的点
- 因此如果取λ>0时,g(w,b)=0,表示的是两边的边界函数(即支持向量)
- 但是如果取λ=0时,要保证g(w,b)≤0,如果出现g(w,b)>0的情况,说明λ值使分类结果不正确,应重新调整λ值
所以要KKT条件是要λ>0求g=0的最优解,λ=0要验证g≤0“
目标是要求出边界函数的参数w和b,并且符合KKT条件,因此这里需要调整三个未知量w、b、λ,来实现拉格朗日函数对这三个参数求偏导,最终求得极值的情况。
-
同时调整三个参数,会使约束条件变得非常复杂,因此,能不能想办法找到这三个参数之间的关系,然后通过调整其中一个参数,来推导出另外两个参数呢?
这就是接下来要引出的对偶问题的意义
- 原目标是要求出 w 2 2 \frac{w^2}{2} 2w2的极小值,对应为求拉格朗日函数的极小值 min:L(w,b,λ)
- 由于假设在w、b固定的情况下,要使 L ( w , b ) = w 2 2 + λ g ( w , b ) L(w,b)=\frac{w^2}{2}+λg(w,b) L(w,b)=2w2+λg(w,b)取到极小值,应该要让λ取到最大值,因为λ≥0,而g(w,b)≤0,只有当λ最大,λg(w,b)才会最小。
- 因此第一步:max_λ(L(w,b)),表示取λ的最大值时的拉格朗日函数值
- 但由于λ达最大值时,或许有多个拉格朗日函数值(因为有多个λ)
- 则应该在这些拉格朗日函数值中,选取拉格朗日值最小的那个,即min:max_λ(L)
- 但由于还含有参数w和b,因此即使求导,也无法得到具体的数值,所以考虑将w,b用λ来代替即可
- L ( w , b , λ ) = w 2 2 + λ g ( w , b ) = w 2 2 + λ ( 1 − y ( x y + b ) ) L(w,b,λ)=\frac{w^2}{2}+λg(w,b)=\frac{w^2}{2}+λ(1-y(xy+b)) L(w,b,λ)=2w2+λg(w,b)=2w2+λ(1−y(xy+b))对w和b分别求偏导,并设为0,表示拉格朗日在极值点时的w和b方向上的偏导分为0:
- L w ′ = w − λ x y = 0 , w = λ x y L'_w = w-λxy = 0,w=λxy Lw′=w−λxy=0,w=λxy
- L b ′ = λ y = 0 L'_b = λy = 0 Lb′=λy=0
- 将上式代入拉格朗日函数得到
- L ( w , b , λ ) = w 2 2 + λ ( 1 − y ( x w + b ) ) = − 1 2 λ 2 x 2 y 2 + λ L(w,b,λ)=\frac{w^2}{2}+λ(1-y(xw+b))=-\frac{1}{2}λ^2x^2y^2+λ L(w,b,λ)=2w2+λ(1−y(xw+b))=−21λ2x2y2+λ
- 且要求λ≥0
- 这时要求L的min值,是需要求出max_λ,即当λ达到最大时,L会是最小的
- 现在的问题是,如何求解λ
对偶问题