前言
最優化理論研究的問題是判定給定目標函數的最大值(最小值)是否存在,並找到令目標函數取到最大值(最小值)的數值。
人工智能問題最后都會歸結為一個優化問題的求解:在復雜環境與多體交互中做出最優決策。
最優化算法可能找到全局最小值,也可能找到局部最小值,理想情況下,最優化算法的目標就是找到全局最小值。
當目標函數的輸入參數較多、解空間較大時,絕大多數算法都不能滿足全局搜索,只能求出局部最小值。
人工智能和深度學習的應用,只要目標函數的取值足夠小,就可以把這個值當作最小值使用,作為對性能和復雜度的折中。
常見概念
目標函數(objective function)
目標函數就是實現最小化或最大化的目標函數,也被稱為評價函數。
收斂(convergence)
指經過多步迭代之后得出的數值不應該無限的增大,而是趨於某個數值,
局部最小值(local mininum)
局部最小值只是比所有鄰近點的函數值都小
全局最小值(global mininum)
比定義域內所有其他點的函數值都小,包括了和所有的局部最小值對比
導數(derivative)
微積分中重要基礎概念,是函數的局部性質,又名微商、導函數值。
導數在幾何中可以求切線,在代數中可求瞬時變化率,在物理中可求速度、加速度。
一個函數在某一點的導數描述了這個函數在這一點也附近的變化率。 概念如下
>當函數y=f(x)的自變量x在一點x0上產生一個增量Δx時,函數輸出值的增量Δy與自變量增量Δx的比值在Δx趨於0時的極限a如果存在,a即為在x0處的導數,記作f'(x0)或df(x0)/dx。
一階導數(first-order derivative)
描述的是目標函數隨輸入的變化而變化
二階導數(second-order derivative)
描述的是一階導數隨輸入的變化而變化,提供了關於目標函數曲率(curvature)的信息
梯度(gradient)
梯度的本意是一個矢量,其方向上的方向導數最大,其大小正好是此最大方向導數.
表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。
梯度的方向是方向導數中取到最大值的方向,梯度的值是方向導數的最大值
曲率影響的是目標函數的下降速度。曲率為正,目標函數會比梯度下降法預期下降得更慢,曲率為負反之。
無約束優化(unconstrained optimization)
對自變量的取值沒有限制 。例如:梯度下降法(gradient descent)
約束優化(constrained optimization)
對x變量取值限制在特定的集合內。例如:線性規划(linear programming)
常見算法
梯度下降法(gradient descent)
直觀地說,就是沿着目標函數下降最快的方向尋找最小值,
舉例:爬山時沿着坡度最陡的路徑尋找山頂。
在數學上,梯度的方向是目標函數導數的反方向
當輸入為向量時,目標函數的圖像就變成了高維空間的曲面,這時的梯度就是垂直於曲面等高線並指向高度增加方向的向量,要上目標函數以最快的速度下降,就要讓自變量在負梯度的方向移動
另一個重要的是步長,也就是每次更新f(x)時x的變化值。較小的步長會導致收斂過程較慢,步長過大可能會導致一步邁過了最小值點。
以上是針對單個樣本的梯度下降法,當可用的訓練樣本有多個時,樣本的使用批處理模式和隨機梯度下降法模式。
批處理模式梯度下降法(batch processing)
計算出每個樣本上目標函數的梯度,再將不同樣本的梯度進行求和,求和的結果作為本次更新中目標函數的梯度。
隨機梯度下降法(stochastic gradient descent)
在每次更新中只使用一個樣本,下一次更新中使用另一樣本,在不斷迭代更新過程中實現對所有樣本的遍歷。在訓練集規模較大時,隨機梯度下降法的性能更好。
把求解最優化問題想象成爬山,隨機梯度下降法,就是每走一步換一個方向。
牛頓法(Newton's method)
牛頓法是將二階導數引入優化過程,對二階近似后的目標函數求導,並讓導數為0,得到向量表示的就是下降最快的方向,牛頓法比梯度下降法快收斂速度更快
算法分類
線性搜索法(line search)
尋找最小值是先確定方向,再確定步長,需要使用目標函數的一階導數和二階導數
置信域算法(trust region)
尋找最小值是先確定步長,再確定搜索方向。以步長為參數划定一個區域,再在這個區域內尋找最快下降的方向。
啟發式算法(heuristics)
靈感來源於20世紀50年代誕生的仿生學,將生物進化等自然現象的機理應用於現實世界復雜問題的優化之中,並取得了不俗的效果。核心是大自然中的“優勝劣汰”的生存法則,在算法的實現中添加了選擇和突變等經驗因素。
啟發式算法的實例包括
- 模擬生物進化規律的遺傳算法(genetic algorithm)
- 模擬統計物理中固體結晶過程的模擬退火算法(simulated annealing)
- 模擬低等運動產生集群智能的蟻群算法(ant colony optimization)
啟發式算法其實也是搜索,是依賴經驗的碰運氣式的搜索,相比之下,基於梯度的這些方法更像是地毯式搜索,兩者相結合的話,就是在搜索效率和解的最優性上做些折中。
神經網絡算法就是一類啟發式算法,模擬的是大腦中神經元競爭和協作的機制。
比喻說明
梯度下降:找出最優的路到達山頂
以山峰為例,全局最小值對應着山脈中最高的頂峰。
找到這個頂峰最好的辦法是站在更高的位置上,將所有的山峰盡收眼底,再在其中找到最高的一座。
但是我們沒有這樣的上帝視角,都是在山腳下,一步一步地尋找着附近的高峰,但是受視野的限制,最終找到的可能只是方圓十里之內的頂峰(局部最小值)
收斂:體重稱算法
在體重秤上稱量時,當人站上去時指針就開始抖動,抖動幅度越來越小,最后基本穩定在一個值,讀取這個數字即可。
假設體重秤稱量是有算法控制的,那么這個擺動幾下很快就能穩定在一個值的就是收斂性比較快(比較好)的算法;要擺動很久才能穩定的就是收斂性比較慢(比較差)的算法;
如果擺幅隨着時間的推移反而越來越大,那收斂性就非常不好,通常就沒有解。