害,今天想看SVM,发现涉及到一个很重要的数学知识 --> 拉格朗日乘子法。我仿佛失忆了一样,完全还给我可爱的数学老师了,所以,看懂了之后,我来写一写吧。 拉格朗日乘子法:
举个例子:
等式约束:当约束条件是等式的时候,例子:
直观操作步骤:
那么,我们能得到什么信息呢?
由此可知,在最优点 \textbf x^* ,梯度 \nabla g(\textbf x) 和 \nabla f(\textbf x) 的方向必相同或相反,即存在 \lambda \ne 0 ,使得: \nabla f(\textbf x^*) + \lambda\nabla g(\textbf x^*)=0 , \lambda 称之为拉格朗日乘子。 所以在求解 f(x) 极值的问题上,我们相当于有两个条件了: \begin{equation}\left\{\begin{array}{l} \nabla f(\textbf x) + \lambda\nabla g(\textbf x)=0 \\ g(\textbf x) = x_1^2x_2-3=0 \end{array}\right.\end{equation} 对于上面的具体例子,我们这两个条件,可联立方程: \begin{equation}\left\{\begin{array}{l} \nabla f(\textbf x)=\lambda \nabla g(\textbf x) \\ g(\textbf x)=x_1^{2} x_2-3=0 \end{array}\right.\end{equation} ,求解得到: \begin{equation}\left\{\begin{array}{l} \left(\begin{array}{c} 2 x_1 \\ 2 x_2 \end{array}\right)=\lambda\left(\begin{array}{c} 2 x_1 x_2 \\ x_1^{2} \end{array}\right) \\ x_1^{2} x_2-3=0 \end{array} \Longrightarrow\left\{\begin{array}{l} x_1 \approx \pm 1.61 \\ x_2 \approx 1.1 \\ \lambda \approx 0.87 \end{array}\right.\right.\end{equation} 上面的步骤就是用了拉格朗日乘子法进行求解的,最终求得了极值点。 仔细观察上面推出极值点的两个条件: \begin{equation}\left\{\begin{array}{l} \nabla f(\textbf x) + \lambda\nabla g(\textbf x)=0 \\ g(\textbf x) =0 \end{array}\right.\end{equation}
所以对 f(\textbf x) 在约束条件 g(\textbf x)=0 的求极值问题,是不是就转化成了对拉格朗日函数 L(\textbf x,\lambda) 的无约束优化问题啊。太棒了简直啊是不是。 所以呼应前面的定义:“通过引入拉格朗日乘子,可将有 d 个变量与 k 个约束条件的最优化问题转化为具有 d+k 个变量的无约束优化问题求解。”这句话突然都眉清目秀了起来是不是。 不等式约束:当约束条件是不等式的时候,存在不等式约束时,最优解的位置只有两种情况,一种是最优解在不等式约束的边界上,另一种就是不等式约束的区域内,需要分为两种情况讨论。例子: 情况一:最优点在不等式约束的区域内
直观操作步骤:
抛开约束条件,按照正常求极值办法,直接对 f(\textbf x)=x_1^2+x_2^2 求梯度,令其等于0,即可得到极值点。 \nabla f(\textbf x)=0\Rightarrow(x_1,x_2)=(0,0) 情况二:最优点在不等式的边界上
直观操作步骤:
在约束条件的边界上取得?稍等,这不就直接是等式约束了吗,相当于求 minf(\textbf x)\ \ \ \ \ s.t. g(\textbf x)=0 ,是不是这样呀。那就直接套上面拉格朗日乘子法的方法来求呗。 写出拉格朗日函数: L(\textbf x,\lambda)=f(\textbf x)+\lambda g(\textbf x)=x_1^2+x_2^2+\lambda(x_1+x_2+2) , \lambda \ne 0 ,现在求约束条件下的极值问题就转换成求 L(\textbf x,\lambda) 的极值问题啦,所以令 \nabla _xL(\textbf x,\lambda)=0 和 \nabla _\lambda L(\textbf x,\lambda)=0 可求得最优解。 \begin{equation}\left\{\begin{array}{l} \nabla _xL(\textbf x,\lambda)=\nabla f(\textbf x)+\lambda \nabla g(\textbf x)=\left(\begin{array}{c} 2 x_1 \\ 2 x_2 \end{array}\right)+\lambda\left(\begin{array}{c} 1 \\ 1 \end{array}\right) =0\\ \nabla _\lambda L(\textbf x,\lambda)=g(\textbf x)=x_1+ x_2+2=0 \end{array} \Longrightarrow\left\{\begin{array}{l} x_1 = -1 \\ x_2 = -1 \\ \lambda = 0.5 \end{array}\right.\right.\end{equation} 两种情况合并: 那这两种情况,我们每次都需要分开讨论??这不是很鸡肋吗,所以,让我们来找找规律,万一,有什么神奇的发现呢。
至于这个KKT,先留着吧,我就得到这里可能就够我看SVM的了? 拉格朗日乘子法总结:就是求在约束条件下的极值问题的一种方法,把约束条件下求极值问题转化为求拉格朗日函数的极值问题。 参考:
害,请问学习了拉格朗日乘子法的我,明天有资格手撕SVM了吗??? |