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