前言
優化方法是幾乎所有機器學習模型中最重要的核心部分,其重要性也是需要強調的。凸優化是優化方法論中的特例,是一個非常大的領域,想要細緻地學習需要花費不少時間,本文作為階段性學習的總結,通過演算法思維和常見演算法的目標函式引出凸優化內容,並介紹了作為演算法工程師我們最需要了解的凸優化領域的重要方法論,希望通過分享給大家,能夠對大家在演算法領域的學習有所幫助,如果本文中的方法論有誤的話,還請各路大神進行指正。
目錄
演算法思維及常見目標函式
凸集與凸函式
經典凸優化問題
非凸優化問題的優化
一. 演算法思維及常見目標函式
演算法思維
針對一個AI問題,我們都可以將AI問題拆解為建立模型+優化模型這兩塊內容的,對於任何一個AI問題,其目標函式都可以用以下形式表示:
我將解決業務問題中的常用套路稱為演算法思維,並總結了以下4個重要步驟:
將業務場景中需要解決的問題轉化為數學問題,並寫出嚴格的數學模型(目標函式)
針對寫出的數學模型判斷凹凸性
根據目標的函式的凹凸性判斷問題型別(如果目標函式是凸函式,我們需要判斷該函式所屬問題型別,常見的問題型別有Linear Programming、Quadratic Programming等;如果目標函式是非凸函式,也需要判斷其所屬問題型別,常見有Setcover Problem,Max flow Problem等)
根據不同的問題型別使用不同的優化方法論解決問題。
其實在實際解決問題的過程中,其實大家都不太會在意第1,2個步驟點,可能都會直接通過經驗去查詢相應的工具解決問題,但是這樣的解決思路是不太好的,因為在這個過程中,我們可能不知道需要解決的問題和我們選擇的工具是否匹配,如果結果不太理想,我們可能也不知道其中的原因。但是如果我們在解決問題前,定義了嚴格的目標函式,我們不僅可以針對該目標函式選擇相應的優化方法,也可以根據業務場景,對目標函式進行相應調整,增加專案的成功率。
常見目標函式
我將工作中可能會用到的常見的一些演算法的目標函式進行了列舉,如下:
二. 凸集與凸函式
凸優化的重要性
從函式的凹凸性而言,我們通常把函式分為凸函式和非凸函式。凸函式是有且只有全域性最優解的,而非凸函式可能有多個區域性最優解,這些特性我會在下文中進行詳細解釋。在前言中,我提到過優化問題是機器學習模型中的核心部分,而針對不同模型,有不同的方法論對其目標函式進行優化。例如針對邏輯迴歸、線性迴歸這樣的凸函式,使用梯度下降或者牛頓法可以求出引數的全域性最優解,針對神經網路這樣的非凸函式,我們可能會找到許多區域性最優解。
不難看出,我們希望在實際解決問題過程中,都希望我們建立的目標函式是凸函式,這樣我們不必擔心區域性最優解問題,但實際上,我們遇到的問題大多數情況下建立的目標函式都是非凸函式,因此我們需要根據場景選擇不同的優化方法。
凸優化定義
就定義而言,凸優化是:在最小化(最大化)的優化要求下,目標函式是凸函式且約束條件所形成的可行域集合是一個凸集的優化方法,因此凸優化的判定條件有兩個,1.函式定義域是凸集 2.目標函式是凸函式。
凸集的定義:假設對於任意x, y ∈ C and 任意引數α ∈ [0, 1], 我們有αx + (1 − α)y ∈ C,集合C為凸集。
凸集的理解:對凸集的理解,我們可以分別從理論定義的角度和函式影象的角度兩方面理解。從定義上講,對於集合C中的任意兩個元素x和y,需要滿足αx + (1 − α)y 的值也需要在集合C中;從函式影象角度講,這個定義中的式子含義是,x、y兩點連線上的任意一個點都需要屬於集合C,如下圖所示,任何證明集合是凸集的方法都可以通過定義和函式影象兩方面進行。
凸集的性質:兩個凸集的交集也是凸集。
常見凸集與證明方法:
凸函式定義:函式f的定義域為凸集,對於定義域裡的任意x, y,函式滿足:
凸函式與凹函式之間的關係:如果f(x)是凸函式,則-f(x)是凹函式
凸函式的證明方法(函式定義域為凸集的前提下):
常見凸函式及證明:
三. 經典的凸優化問題
維基百科中羅列了一些經典的凸優化問題和對應的維基百科連結,在此總結一下:
Least squares(最小二乘法,常用,目標:線性關係;限制條件:線性關係)
Convex quadratic minimization with linear constraints(線性約束條件下的二次規劃問題,常用,目標:平方關係;限制條件:線性關係)
Linear programming(線性規劃)
Quadratic minimization with convex quadratic constraints
Conic optimization
Geometric programming
Second order cone programming
Semidefinite programming
Entropy maximization with appropriate constraints
四. 非凸優化問題的優化
在實際的業務應用場景中 ,我們定義出的目標函式很可能是非凸函式,非凸函式不僅可能存在很多區域性最優解,對我們尋找全域性最優解造成了很大的困擾,甚至有些優化方法論的複雜度非常高,可能O(P^N)這樣的NP hard問題,這樣的問題我們是沒有辦法很好進行優化的,因此我們在尋找優化方法論時,一定要選擇更合理的方法論。很多非凸優化問題可以轉化(並非是等價的)為凸優化問題,並給出問題的近似解。
鬆弛(Relaxation)
通過對問題限制條件的鬆弛,可以將原問題等價為凸優化問題。注:鬆弛原問題,只能得到一個可行域更大的問題,如果原問題是求最小,則鬆弛後的問題的最優值一定小於等於原問題的最優值,這也是一種給出下界的方法。鬆弛不僅僅用於整數約束,只要利於將定義域非凸變為凸集即可。
說起來可能比較抽象,我們通過下面的Set cover Problem來詳細說明一下
Set cover Problem
優化方法:
鬆弛(Relaxation)的問題點
通過上面Set cover Problem中通過relaxation的方式求解引數,我們不難發現,其實通過對問題的轉化,我們雖然能夠快速對問題求解了,但是我們求出來的最優解與原問題的最優解可能是相等,也可能有一定的誤差的,所以通過relaxation,我們需要證明relaxation得出的最優解和原問題的最優解的誤差範圍。
當我們拿到一個業務問題,一定需要按照演算法思維那一節做,先將問題轉換為一個嚴謹的數學問題,判斷我們寫出的目標函式的凹凸性,如果目標函式非凸,我們需要對問題的限制條件做一些轉化,進而求出轉化後問題的近似解,並證明其與原問題的誤差範圍。如果是凸函式,我們需要選擇相應的優化方法論進行優化,因為優化問題是機器學習演算法中的核心部分。
以上是對凸優化的方法論的一些總結與梳理,不得不說,凸優化是一個很深奧也很大的領域,並且通過一些非凸函式的優化方法論,也能感受出如果要嚴格解決一個數學問題,步驟是很嚴謹的,文中的觀點如果有錯誤的地方,還請各路大神不吝賜教。
參考:
貪心學院 - 做線上教育領域的MIT, 立志於培養最頂級的工程師,www.greedyai.com
www2.imm.dtu.dk/pubdb/v
en.wikipedia.org/wiki/C
原文來自學員知乎作業:
https://zhuanlan.zhihu.com/p/55295699