人工智能數學基礎——最優化方法

    人工智能的目標就是最優化:在複雜環境與多體交互中做出最優決策。幾乎所有的人工智能問題最後都會歸結爲一個優化問題的求解,因而最優化理論是人工智能必備的基礎知識。

    最優化理論(optimization)研究的問題是判定給定目標函數的最大值(最小值)是否存在,並找到令目標函數取到最大值(最小值)的數值

    要實現最小化或最大化的函數被稱爲目標函數(objective function)或評價函數,大多數最優化問題都可以通過使目標函數f(x) 最小化解決,最大化問題則可以通過最小化f(x) 實現。

    實際的最優化算法既可能找到目標函數的全局最小值(global minimum),也可能找到局部極小值(local minimum),兩者的區別在於全局最小值比定義域內所有其他點的函數值都小;而局部極小值只是比所有鄰近點的函數值都小。

    理想情況下,最優化算法的目標是找到全局最小值。但找到全局最優解意味着在全局範圍內執行搜索。

    目前實用的最優化算法都是找局部極小值。

    當目標函數的輸入參數較多、解空間較大時,絕大多數實用算法都不能滿足全局搜索對計算複雜度的要求,因而只能求出局部極小值。但在人工智能和深度學習的應用場景下,只要目標函數的取值足夠小,就可以把這個值當作全局最小值使用,作爲對性能和複雜度的折中。

    根據約束條件的不同,最優化問題可以分爲無約束優化(unconstrained optimization)和約束優化(constrained optimization)兩類。無約束優化對自變量x 的取值沒有限制,約束優化則把x 的取值限制在特定的集合內,也就是滿足一定的約束條件。

    線性規劃(linear programming)就是一類典型的約束優化,其解決的問題通常是在有限的成本約束下取得最大的收益。約束優化問題通常比無約束優化問題更加複雜,但通過拉格朗日乘子(Lagrange multiplier)的引入可以將含有n 個變量和 k 個約束條件的問題轉化爲含有 (n+k) 個變量的無約束優化問題。拉格朗日函數最簡單的形式如下:

L(x,y,λ)=f(x,y)+λϕ(x,y)

    式中f(x,y) 爲目標函數,φ(x,y) 則爲等式約束條件,λ 是拉格朗日乘數。從數學意義上講,由原目標函數和約束條件共同構成的拉格朗日函數與原目標函數具有共同的最優點集和共同的最優目標函數值,從而保證了最優解的不變性。

    求解無約束優化問題最常用的方法是梯度下降法(gradient descent)。直觀地說,梯度下降法就是沿着目標函數值下降最快的方向尋找最小值。在數學上,梯度的方向是目標函數導數(derivative)的反方向

    當函數的輸入爲向量時,目標函數的圖象就變成了高維空間上的曲面,這時的梯度就是垂直於曲面等高線並指向高度增加方向的向量,也就攜帶了高維空間中關於方向的信息。而要讓目標函數以最快的速度下降,就需要讓自變量在負梯度的方向上移動。數學語言就是“多元函數沿其負梯度方向下降最快”,這也是梯度下降法的理論依據。

    在梯度下降算法中,另一個重要的影響因素是步長,也就是每次更新f(x)x 的變化值。較小的步長會導致收斂過程較慢,當f(x) 接近最小值點時,步長太大反而會導致一步邁過最小值點。

    因而在梯度下降法中,步長選擇的整體規律是逐漸變小的。

    上面是針對單個樣本的梯度下降法,當可用的訓練樣本有多個時,樣本的使用模式就分爲兩種。

    一種是批處理模式(batch processing),即計算出在每個樣本上目標函數的梯度,再將不同樣本的梯度進行求和,求和的結果作爲本次更新中目標函數的梯度。在批處理模式中,每次更新都要遍歷訓練集中所有的樣本,因而運算量較大。

    另一種模式叫做隨機梯度下降法(stochastic gradient descent),它在每次更新中只使用一個樣本,下一次更新再使用另外一個樣本,在不斷迭代的更新過程中實現對所有樣本的遍歷。事實表明當訓練集的規模較大時,隨機梯度下降法的性能更佳。

    梯度下降法只用到了目標函數的一階導數(first-order derivative),並沒有使用二階導數(second-order derivative)。一階導數描述的是目標函數如何隨輸入的變化而變化,二階導數描述的則是一階導數如何隨輸入的變化而變化,提供了關於目標函數曲率(curvature)的信息。曲率影響的是目標函數的下降速度。當曲率爲正時,目標函數會比梯度下降法的預期下降得更慢;反之,當曲率爲負時,目標函數則會比梯度下降法的預期下降得更快。

    梯度下降法不能利用二階導數包含的曲率信息,只能利用目標函數的局部性質,因而難免盲目的搜索中。已知目標函數可能在多個方向上都具有增加的導數,意味着下降的梯度具有多種選擇。但不同選擇的效果顯然有好有壞。

    梯度下降法無法獲知關於導數的變化信息,也就不知道應該探索導數長期爲負的方向。由於不具備觀察目標函數的全局視角,在使用中梯度下降法就會走出一些彎路,導致收斂速度變慢。而二階導數所包含的全局信息能夠爲梯度下降的方向提供指導,進而獲得更優的收斂性。

    如果將二階導數引入優化過程,得到的典型方法就是牛頓法(Newton’s method)。在牛頓法中,目標函數首先被泰勒展開,寫成二階近似的形式(相比之下,梯度下降法只保留了目標函數的一階近似)。此時再對二階近似後的目標函數求導,並令其導數等於 0,得到的向量表示的就是下降最快的方向。相比於梯度下降法,牛頓法的收斂速度更快。

    不管是利用一階導數的梯度下降法,還是利用二階導數的牛頓法,其尋找最小值點的基本思想都是先確定方向,再確定步長,因而統稱爲“線性搜索方法”(line search)

    還有一類算法,其尋找最小值點的基本思路是先確定步長,以步長爲參數劃定一個區域,再在這個區域內尋找最快下降的方向。這類算法被稱爲“置信域方法”(trust region)

    具體來說,置信域算法的運行過程如下:設定一個置信域半徑s ,並在以當前點爲中心、以 s 爲半徑的封閉球形區域作爲置信域,在置信域內尋找目標函數的二次近似模型的最優點,最優點和當前點之間的距離就是計算出來的備選位移。

    在備選位移上,如果目標函數的二次近似產生了充分的下降,就將當前點移動到計算出的最優點,則繼續按此規則迭代計算下去,並可以適當增加 s;如果目標函數的近似下降不夠理想,則說明步子跨得太大,需要縮小 s 並計算出新的備選位移,直到滿足終止條件。

    還有一類被稱爲“啓發式算法”(heuristics)的最優化方法。

    相對於傳統的基於數學理論的最優化方法,啓發式算法的核心思想就是大自然中 ” 優勝劣汰 ” 的生存法則,並在算法的實現中添加了選擇和突變等經驗因素。

    事實上,搜索越多並不意味着智能越高,智能高的表現恰恰是能夠善用啓發式策略,不用經過大量搜索也能解決問題。啓發式算法的實例包括模擬生物進化規律的遺傳算法(genetic algorithm)模擬統計物理中固體結晶過程的模擬退火算法(simulated annealing)模擬低等動物產生集羣智能的蟻羣算法(ant colony optimization)等等。

    神經網絡實際上也是一類啓發式算法,它模擬的則是大腦中神經元競爭和協作的機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章