AI瘋狂進階——凸優化

本文作者專注於AI進階算法,正在推出AI瘋狂進階之基礎理論進階篇,如有興趣可持續關注我。

核心導讀:

1.什麼是凸優化?

2.如何證明函數是凸函數?

3.神經網絡是凸函數嗎?


凸優化算法是機器學習裡面比較重要的一個概念,理解凸優化需要掌握多個高等數學的概念,本文在講解過程中逐步解析這些數學概念,深入淺出的解析整個凸優化相關的問題。

1.什麼是凸優化?

神經網絡通過線性和非線性單元的組合來擬合輸入到輸出的映射,其中有大量的參數需要求解,這是一個高維數據優化問題。高維數據優化求解是一個比較難的問題,比如說優化函數有多個局部極值,需要把所有局部極值找出來再對比得到全局極值(如下圖左圖),這個消耗是非常大的,另外可能還存在鞍點(導數為0的地方不是極值點)問題(如下圖右圖)。

AI瘋狂進階——凸優化

那麼,有什麼辦法或者在什麼樣的情況下能簡化這個問題容易求解呢?於是就有了凸優化概念。凸優化包括以下部分,下面對其中的概念進行解釋下:

(1)凸優化的定義域必須為凸集。凸集的定義如下:

AI瘋狂進階——凸優化

按照上述定義,可以得出:實數空間R是凸集。

(2)凸優化的損失函數/約束函數都必須是凸函數。凸函數的定義為:在函數的定義域內,如果對於任意的x和y,都滿足如下條件:

AI瘋狂進階——凸優化

則函數為凸函數,如下圖的一元函數就是凸函數。在幾何上可以看到,凸函數在任何點的切線都位於函數的下方。


AI瘋狂進階——凸優化

對於一元函數,凸函數的判定規則為其二階導數大於等於0(如果去掉上面的等號,則函數是嚴格凸的),即:

AI瘋狂進階——凸優化

對於多元函數,如果它是凸函數,則其Hessian矩陣為半正定矩陣。如果Hessian矩陣是正定的,則函數是嚴格凸函數。Hessian矩陣的定義和性質如下:

AI瘋狂進階——凸優化

不論是一元函數的二階導數,還是多元函數的Hessian矩陣,都是可以來衡量函數的凹凸性質。如果有同學對Hessian矩陣有不理解的地方,可以關注後續進階系列,會專門講解Hessian矩陣的應用。

上面講述凸優化必須包含凸集和凸函數,這也導致凸優化問題有一個重要的特性:所有局部最優解都是全局最優解。這個特性可以保證我們在求解時不會陷入局部最優解,即如果找到了問題的一個局部最優解,則它一定也是全局最優解,這極大的簡化了問題的求解,這也回答了上面提到的問題。


2.哪些函數是凸函數?如何證明?

我們在上面講述了凸優化問題能相對容易的找到全局最優解,那麼哪些函數是凸優化函數呢?這裡介紹幾個,例如線性迴歸函數,支持向量機,softamx迴歸等都是凸優化函數。下面以最簡單的線性迴歸函數來證明下為啥是凸函數。

AI瘋狂進階——凸優化

損失函數去掉b的影響,MSE LOSS展開可以簡化為:

AI瘋狂進階——凸優化

因此它的Hessian矩陣為:

AI瘋狂進階——凸優化

寫成矩陣形式為:

AI瘋狂進階——凸優化

其中X是所有樣本的特徵向量按照列構成的矩陣。對於任意不為0的向量x,有:


AI瘋狂進階——凸優化

因此Hessian矩陣是半正定矩陣,上面的優化問題是一個不帶約束條件的凸優化問題。


3.神經網絡是凸函數嗎?

先引用大神針對這個問題的回答:

AI瘋狂進階——凸優化

對於單節點感知器的神經網絡,其優化問題是凸問題,在上述章節已經簡單的證明了部分Loss函數是凸函數了;對於深層神經網絡,由於多層線性和非線性單元的複合,大部分神經網絡的損失函數變成非凸的。最直接的方法是在其2階導數上證明其是非正定矩陣,找一些反例即可。因為是非凸的,神經網絡損失函數可能存在多個局部最小值,因此,對其的優化是比較困難的,好在實踐應用中,通過梯度下降法找到的局部最小值,大部分情況下已經可以滿足我們的應用需求,並且有時候為了得到更好的結果,用隨機初始化訓練多次得到多個局部最小值進行比較得到更優的結果。


4.小結

在實際應用中,很多問題都是非凸的,雖然理論上很殘酷,但實際上我們目前的一些優化算法卻工作的還是挺好的,這也是神經網絡目前如此盛行風靡的一大原因。目前一些理論研究也在持續研究這一塊,後續的系列文章中將會持續解析這些成果,如果有興趣,可以持續關注我。


分享到:


相關文章: