從最一般的定義上說,一個求最小值的問題就是一個優(yōu)化問題(也叫尋優(yōu)問題,更文縐縐的叫法是規(guī)劃——Programming),它同樣由兩部分組成,目標函數(shù)和約束條件,可以用下面的式子表示:

clip_image002(式1)

約束條件用函數(shù)c來表示,就是constrain的意思啦。你可以看出一共有p+q個約束條件,其中p個是不等式約束,q個等式約束

關(guān)于這個式子可以這樣來理解:式中的x是自變量,但不限定它的維數(shù)必須為1(視乎你解決的問題空間維數(shù),對我們的文本分類來說,那可是成千上萬啊)。要求f(x)在哪一點上取得最小值(反倒不太關(guān)心這個最小值到底是多少,關(guān)鍵是哪一點),但不是在整個空間里找,而是在約束條件所劃定的一個有限的空間里找,這個有限的空間就是優(yōu)化理論里所說的可行域。注意可行域中的每一個點都要求滿足所有p+q個條件,而不是滿足其中一條或幾條就可以(切記,要滿足每個約束),同時可行域邊界上的點有一個額外好的特性,它們可以使不等式約束取得等號!而邊界內(nèi)的點不行。

關(guān)于可行域還有個概念不得不提,那就是凸集,凸集是指有這么一個點的集合,其中任取兩個點連一條直線,這條線上的點仍然在這個集合內(nèi)部,因此說“凸”是很形象的(一個反例是,二維平面上,一個月牙形的區(qū)域就不是凸集,你隨便就可以找到兩個點違反了剛才的規(guī)定)。

回頭再來看我們線性分類器問題的描述,可以看出更多的東西。

clip_image002[5](式2)

在這個問題中,自變量就是w,而目標函數(shù)是w的二次函數(shù),所有的約束條件都是w的線性函數(shù)(哎,千萬不要把xi當成變量,它代表樣本,是已知的),這種規(guī)劃問題有個很有名氣的稱呼——二次規(guī)劃(Quadratic Programming,QP),而且可以更進一步的說,由于它的可行域是一個凸集,因此它是一個凸二次規(guī)劃

一下子提了這么多術(shù)語,實在不是為了讓大家以后能向別人炫耀學識的淵博,這其實是我們繼續(xù)下去的一個重要前提,因為在動手求一個問題的解之前(好吧,我承認,是動計算機求……),我們必須先問自己:這個問題是不是有解?如果有解,是否能找到?

對于一般意義上的規(guī)劃問題,兩個問題的答案都是不一定,但凸二次規(guī)劃讓人喜歡的地方就在于,它有解(教科書里面為了嚴謹,常常加限定成分,說它有全局最優(yōu)解,由于我們想找的本來就是全局最優(yōu)的解,所以不加也罷),而且可以找到!(當然,依據(jù)你使用的算法不同,找到這個解的速度,行話叫收斂速度,會有所不同)

對比(式2)和(式1)還可以發(fā)現(xiàn),我們的線性分類器問題只有不等式約束,因此形式上看似乎比一般意義上的規(guī)劃問題要簡單,但解起來卻并非如此。

因為我們實際上并不知道該怎么解一個帶約束的優(yōu)化問題。如果你仔細回憶一下高等數(shù)學的知識,會記得我們可以輕松的解一個不帶任何約束的優(yōu)化問題(實際上就是當年背得爛熟的函數(shù)求極值嘛,求導再找0點唄,誰不會啊?笑),我們甚至還會解一個只帶等式約束的優(yōu)化問題,也是背得爛熟的,求條件極值,記得么,通過添加拉格朗日乘子,構(gòu)造拉格朗日函數(shù),來把這個問題轉(zhuǎn)化為無約束的優(yōu)化問題云云(如果你一時沒想通,我提醒一下,構(gòu)造出的拉格朗日函數(shù)就是轉(zhuǎn)化之后的問題形式,它顯然沒有帶任何條件)。

讀者問:如果只帶等式約束的問題可以轉(zhuǎn)化為無約束的問題而得以求解,那么可不可以把帶不等式約束的問題向只帶等式約束的問題轉(zhuǎn)化一下而得以求解呢?

聰明,可以,實際上我們也正是這么做的。下一節(jié)就來說說如何做這個轉(zhuǎn)化,一旦轉(zhuǎn)化完成,求解對任何學過高等數(shù)學的人來說,都是小菜一碟啦。