無約束極小值的最優化條件:
關於多元函數極小值點的必要條件:
滿足的點稱之為f(x)的駐點或穩定點,但是反過來,滿足梯度條件的點不一定是f(x)的局部極小值。因此,定理轉化為求解下面的方程組問題:
對於上面的線性方程組,利用解析法(如高斯消元法、矩陣三角分解法等)可以較方便求解,但是遺憾的是,f(x)一般是很復雜的非線性函數,求解非線性方程組並不比求解最優化問題簡單,甚至比求解最優化問題更困難、更復雜。因此,在機器學習領域,求解最優化問題,一般不會通過解析法來求解上式,而是通過數值計算方法來直接求取函數極值。
迭代法是數值計算最常用的最優化方法,它的基本思想是:首先給定f(x)的一個極小值點得到初始估計x0,然后通過迭代的方式得到點序列{xt},如果這個點序列的極限x*逼近極小值點,那么成這個序列為極小化序列。這個極小化序列通過迭代公式可以寫成:
其中d是一個方向向量,λ稱為步長(或學習率),當λ和d都被確定后,也就可以唯一確定點下一個點xk+1,並以此迭代,最后求得極小值點。
注意:各種迭代算法的區別就在於得到步長λ和方向d的方式不同。一個好的迭代算法應滿足的兩個條件:遞減性和收斂性。
梯度下降:
梯度下降是神經網絡最常用的優化方法之一。它的方向就是f在該點x0處函數值增長最快的方向。基於梯度的這個性質,如果把迭代的每一步沿着當前點的梯度方向的反方向進行迭代,那么就能得到一個逐步遞減的極小化序列。
根據每一次迭代所使用的訓練數據集范圍不同,可以把梯度下降算法區分為:
- 批量梯度下降:也稱之為最速下降法,誤差損失函數有全量訓練數據我的誤差構成,因此,當數據量很大的時候,速度會非常慢,同時,它不能以在線的方式更新模型,也就是,當訓練數據有新元素加入時,需要對全量的數據進行更新,效率很低。因此當前的梯度下降法一般都不會采用這個策略。
- 隨機梯度下降:隨機梯度下降是對批量梯度下降的改進,該算法每一次更新,只考慮一個樣本數據的誤差損失,因此,它的速度要遠遠優於批量梯度下降。更主要的是,它能進行在線的參數更新。但是缺點是:由於單個樣本會出現相似或重復的情況,數據的更新會出現冗余,此外,單個數據之間的差異會比較大,造成每一次迭代的損失函數會出現比較大的波動。
- 小批量梯度下降:該算法結合了前兩者的優點,克服了它們的缺點。其策略是指每次的參數更新,優化的目標函數是由n個樣本數據構成,n的值一般較小,一般取到10到500之間,這種做法有3個優點:
1. 每一批的數據量較小,特別適合高效的矩陣運算,尤其是GPU的並行加速,因此雖然小批量梯度算法的訓練數據要比隨機梯度下降算法多,但效率上與隨機梯度算法差別不大。
2. 與隨機梯度下降算法相比,小批量梯度算法每一批考慮了更多的樣本數據,每一批數據之間的整體差異更小、更平均,結果也更穩定。
3. 由於效率與隨機梯度下降算法相當,因此小批量梯度策略同樣適用於在線的模型更新。
一般來說,當前的梯度下降算法普遍采用第三個---小批量梯度算法策略。
梯度下降中用於確定步長和方向向量的幾個不同算法的策略:
1. 傳統更新策略:vanilla策略,最簡單的參數更新策略,參數沿着其梯度反方向變化。lr是學習率,預先設置的固定值超參數。
2. 動量更新策略:
3. 改進的動量更新策略:
4. 自適應梯度策略:以上方法都是對迭代方法的優化,而步長是固定的,該策略考慮學習率對着迭代次數變化而變化的自適應梯度策略。