【java机器学习】支持向量机之拉格朗日乘子法解释
什么是拉格朗日乘子法
按照維基百科的定義,拉格朗日乘數(shù)法是一種尋找多元函數(shù)在其變量受到一個或多個條件的約束時的極值的方法。用數(shù)學式子表達為:
簡單理解就是,我們要在滿足 這個等式的前提下,求 函數(shù)的最小值(最大值道理相同)。這樣的問題我們在高中的時候就遇到過了,只不過高中時遇到的限制條件 都比較簡單,一般而言都可以將 用 的式子表示出來,然后用變量替換的方法代回 求解。但是,如果 的形式過于復雜,或者變量太多時,這種方法就失效了。而拉格朗日乘子法就是解決這類問題的通用策略。
拉格朗日乘子法的原理
一個約束條件
我們先從只有一個約束條件的情況入手,看看拉格朗日乘子法到底是怎么做的。
假設,我們的問題如下:
當然,這個問題比較簡單,直接用 解出 y 再代入 也可以求解,但這里,我們準備用拉格朗日乘子法。
首先我們畫出 的圖像,這個圖像應該是 3 維的,但為了方便講解,這里給出它的 2 維投影:
圖中的紅色圓表示 ,越靠近原點的部分,值越小(表示“谷底”),這些圓又稱為「等高線」,因為同一個圓代表的函數(shù)值相同。
圖中的藍線代表 ,這里只取 的部分。
整幅圖像可以想象成一個巨大的山谷,原點是谷底,而我們的任務是在藍線表示的道路上,找到最低的位置。
那要如何找到這個最低點呢?注意,圖中用橙色和黑色標記了兩個點。如果我們走到了橙色這個位置,那么很明顯,可以發(fā)現(xiàn)這個點肯定不是最低的,因為我們可以沿著藍線繼續(xù)往內(nèi)部的圓走,當我們走到黑色這個點時,會發(fā)現(xiàn)沒法再往里面走了,而且,這個時候如果繼續(xù)沿藍線走,我們的位置反而升高了,這時,我們基本可以認為:我們找到了在藍線這個限制條件下的最低點。
那么橙色這個點和黑色這個點有什么本質(zhì)區(qū)別呢?拉格朗日觀察到,黑點位置,藍線和圓是相切的,而橙點位置顯然不滿足這個性質(zhì)。那相切是否是必然的呢?拉格朗日告訴我們,是的,一定是相切的。而這一點,正是拉格朗日乘子法的核心。
梯度
在正式理解拉格朗日乘子法的原理之前,我們要回顧一下梯度的概念。
在數(shù)學里面,梯度指的是函數(shù)變化最快的方向。例如:在一元函數(shù) 中,梯度只能沿 x 軸正方向或負方向,而在二元函數(shù) 中,梯度則是一個二維向量 。
現(xiàn)在,我們要用到梯度一個重要的性質(zhì):梯度跟函數(shù)等高線是垂直的。
證明需要用到一點極限的知識。
梯度的數(shù)學定義為:。假設 , 是兩個極小的變化量,根據(jù)全微分的知識,可以得到:
如果 是在等高線方向的增量,那么 ,這意味著 ,換句話說,向量 和向量 的內(nèi)積為 0。所以,梯度和函數(shù)的等高線是垂直的。
拉格朗日乘子法的幾何認識
現(xiàn)在,我們來感性地認識一下,為什么拉格朗日認為相切才能找到最低點(只是感性認識,不添加任何數(shù)學推導)。
在橙點這個位置,由于兩條曲線不相切,所以橙線的梯度(上圖橙色箭頭)和藍線的切線(藍色虛線)肯定不垂直。在這種情況下,藍線的兩個切線方向,必定有一個往函數(shù)高處走(與梯度的夾角小于 90 度),有一個往函數(shù)低處走(與梯度的夾角大于 90 度)。所以,在兩條曲線相交時,我們肯定不在最低點或最高點的位置。
那么,反過來想,如果兩條曲線相切(上圖),那么在切點這個位置,藍線的切線和橙線的梯度是垂直的,這個時候,藍線的切線方向都指向橙線的等高線方向。換句話說,在切點的位置沿藍線移動很小的一步,都相當于在橙線的等高線上移動,這個時候,可以認為函數(shù)值已經(jīng)趨于穩(wěn)定了。所以,我們認為這個點的值“可能”是最低(高)的(之后解釋為什么是“可能“。另外,個人覺得拉格朗日乘子法最好用反證法從不相切的點入手思考,從相切的點思考總有點別扭)。
既然相切可以幫助我們找到最低點,那么接下來我們要研究的便是如何利用相切來找出最低點。
相切,意味著在切點的位置,兩條曲線的等高線方向是平行的,考慮到梯度與等高線垂直, 我們可以用兩條曲線的梯度平行來求出切點位置(最低點)。
因此,根據(jù)梯度平行,我們能夠得到一個方程組:,其中 表示一個標量,因為我們雖然能保證兩個梯度平行,但不能保證它們的長度一樣(或者方向相同)。在高維函數(shù)中, 表示的是函數(shù)在各個自變量方向的偏導。對于上面的例子,我們可以求出函數(shù) 和 的偏導,再根據(jù)方程組:
求出切點。由于總共有三個方程和三個未知數(shù),一般都能找到解(也可能存在多個解或無解的情況,之后會簡單討論)。
在實際求解時,人們會使用一個統(tǒng)一的拉格朗日函數(shù):,令這個函數(shù)偏導為 0,我們可以得到:
結(jié)果和上面的方程組是一樣的。
多個約束條件
多個約束條件和單個約束條件是一樣的。如果是多個約束條件,那么這些約束函數(shù)肯定是相交的,否則無解。多個約束條件一般會把變量約束到一個更低維的空間,例如,下圖中,紫色球面和黃色平面將變量約束到黑色線的位置。
求解過程和單個約束條件是一樣的,我們定義一個新的拉格朗日函數(shù):
然后同樣令這個函數(shù)的導數(shù) ,最后可以得到 個方程以及 個未知數(shù),一般也能求解出來。
總結(jié)
根據(jù)拉格朗日乘子法的定義,這是一種尋找極值的策略,換句話說,該方法并不能保證找到的一定是最低點或者最高點。事實上,它只是一種尋找極值點的過程,而且,拉格朗日乘子法找到的切點可能不只一個(也就是上面的方程組可能找到多個解),例如下圖:
圖中相切的點有兩個,而紅點的函數(shù)值明顯比黑點小。事實上,要想判斷找到的點是極低點還是極高點,我們需要將切點代入原函數(shù)再進行判斷。
另外,在寫作本文時,我仍然有一個疑惑沒有解決:拉格朗日乘子法在哪些情況下無解(也就是上面的方程組 無解)?換句話說,約束條件和函數(shù)沒有切點時,我們要怎么求出最低點或最高點。這個問題留待之后想通再補上。
原文:https://blog.csdn.net/ndzzl/article/details/79079561
總結(jié)
以上是生活随笔為你收集整理的【java机器学习】支持向量机之拉格朗日乘子法解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: no segments* file fo
- 下一篇: flink常见算子的一些操作