凸優化理論本身非常博大,事實上我也只是瞭解了一個皮毛中的皮毛,但是對於廣大僅僅想要了解一下機器學習或者深度學習的同學來說,稍微瞭解一點凸優化也就夠了。在實際工程問題中,比如現在我們用的最多的深度神經網絡的求解優化問題,都是非凸的,因此很多凸優化理論中非常有價值的定理和方法,在非凸優化問題中不適用,或者說並沒有收斂保證等。但是,作爲知識的基礎,依然有必要來理解和學習一下凸優化,本篇整理了非常基礎的一些概念。主要參考網上一些資料,和《凸優化》這本書的一些概念。
1. 爲什麼要學習凸優化?
凸優化在數學規劃領域具有非常重要的地位。一旦將一個實際問題表述爲凸優化問題,大體上意味着相應問題已經得到徹底解決,這是非凸的優化問題所不具有的性質。其應用非常廣泛,機器學習中很多優化問題都要通過凸優化來求解;在非凸優化中,凸優化同樣起到重要的作用,很多非凸優化問題,可以轉化爲凸優化問題來解決;
2. 什麼是優化問題?
3. 什麼是凸優化問題?
4. 什麼是凸函數?
有一個經典的示意圖:
凸函數的幾何意義表示爲函數任意兩點的連線上的取值大於該點在函數上的取值
5. 凸函數的一階充要條件
一階條件的意義是,對於函數在定義域的任意取值,函數的值都大於或者等於對函數在這點的一階近似。用圖來說明就是下圖:
口語化理解就是說凸函數總是在其任意一點的切線的上方(或者可以有部分相切的)。通過圖可以很清楚地理解這個充要條件,但是,具體在應用中,我們不可能對每一個點都去計算函數的一階導數,因此後面會說道利用凸函數的二階特徵來進行判斷一個函數是否是一個凸函數。下面貼一下證明充分性和必要性的過程,來自《convex optimization》,不是很在意的同學可以跳過,直接看下一節。但是建議手推一下,還是比較簡單的:
6. 凸函數的二階充要條件
記函數的一階導數和二階導數爲g和H,
舉例用二階充要條件來證明log-sum-exp函數是convex的:
最後一步用到了柯西不等式,很巧妙。
上面提到了函數的二階導數是Hessian矩陣,Hessian矩陣經常用於牛頓法優化方法中。牛頓法是一種迭代求解方法,有一階和二階方法,主要應用在兩個方面:1、求方程的根, 2、 最優化方法。
(1)牛頓迭代求解方程的根:
並不是所有的方程都有求根公式, 或者求根公式很複雜, 導致求解困難. 利用牛頓法, 可以迭代求解。原理是利用泰勒公式, 在
處展開, 且展開到一階,
求解方程
,即
,整理後得到
但是因爲我們用的是一階泰勒展開,只能近似相等,求得的解並不能完全使
成立。記這個金近似解爲
,只能說
比
更接近
的解,因此我們可以寫成一個遞推公式:
一個比較形象的動態圖[9]:從初始點開始每次找f(x)的切線和座標軸的交點,慢慢逼近真正的f(x)=0點。
(2)二階優化方法——牛頓法
對於非線性優化問題,牛頓法提供了一種求解的辦法。假設任務是優化一個目標函數
, 求函數
的極大或者極小問題, 可以轉化爲求解函數的導數
的問題, 這樣求可以把優化問題看成方程求解問題。剩下的問題就和第一部分提到的牛頓迭代法求解很相似了。
我們先直接套用一下前面公式(3),但是現在我們要把
想象成
,要求
的根,則:
當然,拓展一下思維,我們也必然可以從泰勒展開獲得推導:泰勒展開到二階:
假設我們要求 的極小值(注:我們並沒有假設 是convex的,所以可能是一個局部極小值。如果有一定基礎的同學,可以把 理解爲loss function),並且希望一步就要走到儘可能使 變小最多(loss儘可能低),那麼記,