duality
這套理論不僅適用于 SVM 的優化問題,而是對于所有帶約束的優化問題都適用的,是優化理論中的一個重要部分。簡單來說,對于任意一個帶約束的優化都可以寫成這樣的形式:
mins.t.f0(x)fi(x)≤0,i=1,…,mhi(x)=0,i=1,…,p
形式統一能夠簡化推導過程中不必要的復雜性。其他的形式都可以歸約到這樣的標準形式,例如一個 maxf(x) 可以轉化為 min?f(x) 等。假如 f0,f1,…,fm 全都是凸函數,并且 h1,…,hp 全都是仿射函數(就是形如 Ax+b 的形式),那么這個問題就叫做凸優化(Convex Optimization)問題。凸優化問題有許多優良的性質,例如它的極值是唯一的。不過,這里我們并沒有假定需要處理的優化問題是一個凸優化問題。
雖然約束條件能夠幫助我們減小搜索空間,但是如果約束條件本身就是比較復雜的形式的話,其實是一件很讓人頭痛的問題,為此我們希望把帶約束的優化問題轉化為無約束的優化問題。為此,我們定義 Lagrangian 如下:
L(x,λ,ν)=f0(x)+∑i=1mλifi(x)+∑i=1pνihi(x)
它通過一些系數把約束條件和目標函數結合在了一起。當然 Lagrangian 本身并不好玩,現在讓我們來讓他針對 λ 和 ν 最大化,令:
z(x)=maxλ?0,νL(x,λ,ν)
這里 λ?0 理解為向量 λ 的每一個元素都非負即可。這個函數 z(x) 對于滿足原始問題約束條件的那些 x 來說,其值等于 f0(x) ,這很容易驗證,因為滿足約束條件的 x 會使得 hi(x)=0 ,因此最后一項消掉了,而 fi(x)≤0 ,并且我們要求了 λ?0 ,因此 λifi(x)≤0 ,所以最大值只能在它們都取零的時候得到,這個時候就只剩下 f0(x) 了。因此,對于滿足約束條件的那些 x 來說,f0(x)=z(x) 。這樣一來,原始的帶約束的優化問題其實等價于如下的無約束優化問題:
minxz(x)
因為如果原始問題有最優值,那么肯定是在滿足約束條件的某個 x? 取得,而對于所有滿足約束條件的 x ,z(x) 和 f0(x) 都是相等的。至于那些不滿足約束條件的 x ,原始問題是無法取到的,否則極值問題無解。很容易驗證對于這些不滿足約束條件的 x 有 z(x)=∞,這也和原始問題是一致的,因為求最小值得到無窮大可以和“無解”看作是相容的。
到這里,我們成功把帶約束問題轉化為了無約束問題,不過這其實只是一個形式上的重寫,并沒有什么本質上的改變。我們只是把原來的問題通過 Lagrangian 寫作了如下形式:
minx?maxλ?0,νL(x,λ,ν)
這個問題(或者說原始的帶約束的形式)稱作 primal problem 。如果你看過之前關于 SVM 的推導,那么肯定就知道了,相對應的還有一個 dual problem ,其形式非常類似,只是把 min 和 max 交換了一下:
maxλ?0,ν?minxL(x,λ,ν)
交換之后的 dual problem 和原來的 primal problem 并不相等,直觀地,我們可以這樣來理解:胖子中最瘦的那個都比瘦骨精中最胖的那個要胖。當然這是很不嚴格的說法,而且扣字眼的話可以糾纏不休,所以我們還是來看嚴格數學描述。和剛才的 z(x) 類似,我們也用一個記號來表示內層的這個函數,記:
g(λ,ν)=minxL(x,λ,ν)
并稱 g(λ,ν) 為 Lagrange dual function (不要和 L 的 Lagrangian 混淆了)。g 有一個很好的性質就是它是 primal problem 的一個下界。換句話說,如果 primal problem 的最小值記為 p? ,那么對于所有的 λ?0 和 ν ,我們有:
g(λ,ν)≤p?
因為對于極值點(實際上包括所有滿足約束條件的點)x?,注意到 λ?0 ,我們總是有
∑i=1mλifi(x?)+∑i=1pνihi(x?)≤0
因此
L(x?,λ,ν)=f0(x?)+∑i=1mλifi(x?)+∑i=1pνihi(x?)≤f0(x?)
于是
g(λ,ν)=minxL(x,λ,ν)≤L(x?,λ,ν)≤f0(x?)=p?
這樣一來就確定了 g 的下界性質,于是
maxλ?0,νg(λ,ν)
實際上就是最大的下界。這是很自然的,因為得到下界之后,我們自然地就希望得到最好的下界,也就是最大的那一個——因為它離我們要逼近的值最近呀。記 dual problem 的最優值為 d? 的話,根據上面的推導,我們就得到了如下性質:
d?≤p?
這個性質叫做 weak duality ,對于所有的優化問題都成立。其中 p??d? 被稱作 duality gap 。需要注意的是,無論 primal problem 是什么形式,dual problem 總是一個 convex optimization 的問題——它的極值是唯一的(如果存在的話),并且有現成的軟件包可以對凸優化問題進行求解(雖然求解 general 的 convex optimization 實際上是很慢并且只能求解規模較小的問題的)。這樣一來,對于那些難以求解的 primal problem (比如,甚至可以是 NP 問題),我們可以通過找出它的 dual problem ,通過優化這個 dual problem 來得到原始問題的一個下界估計?;蛘哒f我們甚至都不用去優化這個 dual problem ,而是(通過某些方法,例如隨機)選取一些 λ?0 和 ν ,帶到 g(λ,ν) 中,這樣也會得到一些下界(只不過不一定是最大的那個下界而已)。當然要選 λ 和 ν 也并不是總是“隨機選”那么容易,根據具體問題,有時候選出來的 λ 和 ν 帶入 g 會得到 ?∞ ,這雖然是一個完全合法的下界,然而卻并沒有給我們帶來任何有用的信息。
故事到這里還沒有結束,既然有 weak duality ,顯然就會有 strong duality 。所謂 strong duality ,就是
d?=p?
這是一個很好的性質,strong duality 成立的情況下,我們可以通過求解 dual problem 來優化 primal problem ,在 SVM 中我們就是這樣做的。當然并不是所有的問題都能滿足 strong duality ,在講 SVM 的時候我們直接假定了 strong duality 的成立,這里我們就來提一下 strong duality 成立的條件。不過,這個問題如果要講清楚,估計寫一本書都不夠,應該也有不少專門做優化方面的人在研究這相關的問題吧,我沒有興趣(當然也沒有精力和能力)來做一個完整的介紹,相信大家也沒有興趣來看這樣的東西——否則你肯定是專門研究優化方面的問題的了,此時你肯定比我懂得更多,也就不用看我寫的介紹啦。
所以,這里我們就簡要地介紹一下 Slater 條件和 KKT 條件。Slater 條件是指存在嚴格滿足約束條件的點 x ,這里的“嚴格”是指 fi(x)≤0 中的“小于或等于號”要嚴格取到“小于號”,亦即,存在 x 滿足
fi(x)<0hi(x)=0i=1,…,mi=1,…,p 我們有:如果原始問題是 Convex 的并且滿足 Slater 條件的話,那么 strong duality 成立。需要注意的是,這里只是指出了 strong duality 成立的一種情況,而并不是唯一情況。例如,對于某些非 convex optimization 的問題,strong duality 也成立。這里我們不妨回顧一下 SVM 的 primal problem ,那是一個 convex optimization 問題(QP 是凸優化問題的一種特殊情況),而 Slater 條件實際上在這里就等價于是存在這樣的一個超平面將數據分隔開來,亦即是“數據是可分的”。當數據不可分是,strong duality 不能成立,不過,這個時候我們尋找分隔平面這個問題本身也就是沒有意義的了,至于我們如何通過把數據映射到特征空間中來解決不可分的問題,這個當時 已經介紹過了,這里就不多說了。
讓我們回到 duality 的話題。來看看 strong duality 成立的時候的一些性質。假設 x? 和 (λ?,ν?) 分別是 primal problem 和 dual problem 的極值點,相應的極值為 p? 和 d? ,首先 p?=d? ,此時我們可以得到
f0(x?)=g(λ?,ν?)=minx(f0(x)+∑i=1mλ?ifi(x)+∑i=1pν?ihi(x))≤f0(x?)+∑i=1mλ?ifi(x?)+∑i=1pν?ihi(x?)≤f0(x?)
由于兩頭是相等的,所以這一系列的式子里的不等號全部都可以換成等號。根據第一個不等號我們可以得到 x? 是 L(x,λ?,ν?) 的一個極值點,由此可以知道 L(x,λ?,ν?) 在 x? 處的梯度應該等于 0 ,亦即:
?f0(x?)+∑i=1mλ?i?fi(x?)+∑i=1pν?i?hi(x?)=0
此外,由第二個不等式,又顯然 λ?ifi(x?) 都是非正的,因此我們可以得到
λ?ifi(x?)=0,i=1,…,m
這個條件叫做 complementary slackness 。顯然,如果 λ?i>0,那么必定有 fi(x?)=0 ;反過來,如果 fi(x?)<0 那么可以得到 λ?i=0 。這個條件正是我們在介紹支持向量的文章末尾時用來證明那些非支持向量(對應于 fi(x?)<0)所對應的系數 αi (在本文里對應 λi )是為零的。 :) 再將其他一些顯而易見的條件寫到一起,就是傳說中的 KKT (Karush-Kuhn-Tucker) 條件:
fi(x?)≤0,hi(x?)=0,λ?i≥0,λ?ifi(x?)=0,?f0(x?)+∑mi=1λ?i?fi(x?)+∑pi=1ν?i?hi(x?)=0i=1,…,mi=1,…,pi=1,…,mi=1,…,m 任何滿足 strong duality (不一定要求是通過 Slater 條件得到,也不一定要求是凸優化問題)的問題都滿足 KKT 條件,換句話說,這是 strong duality 的一個必要條件。不過,當原始問題是凸優化問題的時候(當然還要求一應函數是可微的,否則 KKT 條件的最后一個式子就沒有意義了),KKT 就可以升級為充要條件。換句話說,如果 primal problem 是一個凸優化問題,且存在 x? 和 (λ?,ν?) 滿足 KKT 條件,那么它們分別是 primal problem 和 dual problem 的極值點并且 strong duality 成立。 其證明也比較簡單,首先 primal problem 是凸優化問題的話, g(λ,ν)=minxL(x,λ,ν) 的求解對每一組固定的 (λ,ν) 來說也是一個凸優化問題,由 KKT 條件的最后一個式子,知道 x? 是 minxL(x,λ?,ν?) 的極值點(如果不是凸優化問題,則不一定能推出來),亦即: g(λ?,ν?)=minxL(x,λ?,ν?)=L(x?,λ?,ν?)=f0(x?)+∑i=1mλ??ifi(x?)+∑i=1pνi??hi(x?)=f0(x?) 最后一個式子是根據 KKT 條件的第二和第四個條件得到。由于 g 是 f0 的下界,這樣一來,就證明了 duality gap 為零,也就是說,strong duality 成立。 到此為止,做一下總結。我們簡要地介紹了 duality 的概念,基本上沒有給什么具體的例子。不過由于內容比較多,為了避免文章超長,就挑了一些重點講了一下。總的來說,一個優化問題,通過求出它的 dual problem ,在只有 weak duality 成立的情況下,我們至少可以得到原始問題的一個下界。而如果 strong duality 成立,則可以直接求解 dual problem 來解決原始問題,就如同經典的 SVM 的求解過程一樣。有可能 dual problem 比 primal problem 更容易求解,或者 dual problem 有一些優良的結構(例如 SVM 中通過 dual problem 我們可以將問題表示成數據的內積形式從而使得 kernel trick 的應用成為可能)。此外,還有一些情況會同時求解 dual 和 primal problem ,比如在迭代求解的過程中,通過判斷 duality gap 的大小,可以得出一個有效的迭代停止條件。總結
- 上一篇: c语言实参和形参占用存储单元_C语言判断
- 下一篇: pipy国内镜像