官术网_书友最值得收藏!

3.7 優化函數

模型的優化對于傳統機器學習和深度學習都是很重要的,尤其是深度學習,在訓練過程中很可能需要解決一些更加困難的挑戰。目前來說,流行且使用較廣泛的優化算法有隨機梯度下降優化算法、基于沖量優化算法、Adadelta優化算法和Adam優化算法等,下面對這幾個優化算法進行介紹。

3.7.1 隨機梯度下降優化算法

普通的隨機梯度下降優化算法存在以下不足。

·很難選擇一個適當的學習率。選擇的學習率太小,收斂速度慢;選擇的學習率太大,參數波動太大,無法進入效果相對最優的優化點。

·可以采用滿足某些條件時調整學習率的方法,如迭代n次將學習率減半,或在訓練集準確率到某值時調整學習率。這些人工的調整必須事先定義好,雖然有所改進但是依然無法適應數據集的特征。

·有相同的學習率適用于所有參數更新。如果數據稀疏而且特征又區別很大,可能訓練到某個階段時,部分參數需要采用較小的學習率來調整,另外一部分參數需要較大的學習率來調整。如果都采用相同的學習率,可能最終無法收斂比較好的結果。

·除了局部最小值,普通的隨機梯度下降優化容易陷入“鞍點”,即梯度在所有方向上是零,但是這并不是一個最小點,甚至也不是一個局部最小點。“鞍點”示意圖如圖3-14所示,中間的亮點在兩個方向上的梯度都是零,但卻在一個“高坡”上。

圖3-14 “鞍點”示意圖

那么,怎么避免上述不足呢?可參照各種優化算法。

3.7.2 基于沖量優化算法

基于沖量優化算法(Monentum優化算法),其思想很簡單,相當于在原來更新參數的基礎上增加了“加速度”的概念。用山坡上的球作為例子,小球在往山谷的最低點滾動時,當前時間點的下降距離會積累前面時間點下降的距離,并在路上越來越快。參數的更新亦是如此:沖量在梯度連續指向同一個方向上時會增加,而在梯度方向變化時會減小。這樣,就可以更快收斂,并可以減小震蕩。

用公式表示為(γ為沖量更新值,一般取0.9)

從公式中可以看出,每次參數的更新會累積上一個時間點的沖量,所以在連續同一個方向更新梯度時,會加速收斂。

普通的隨機梯度下降優化算法在最小區域周圍的下降圖如圖3-15所示,基于沖量優化算法在最小區域周圍的下降圖如圖3-16所示。從圖3-15和圖3-16中可以看出,普通的隨機梯度下降優化算法始終是一個速度收斂,而基于沖量優化算法則會更加快速地收斂,并且在遇到一些局部最小點時,基于沖量優化算法會“沖”過這些比較小的“坑”,在某些程度上減少陷入局部最小優化點的概率。

圖3-15 普通的隨機梯度下降優化算法在最小區域周圍的下降圖

圖3-16 基于沖量優化算法在最小區域周圍的下降圖

3.7.3 Adadelta優化算法

Adagrad算法存在三個問題:

·其學習率是單調遞減的,訓練后期學習率非常小;

·其需要手工設置一個全局的初始學習率;

·更新xt時,左右兩邊的單位不同。

Adadelta優化算法針對上述三個問題提出了更優的解決方案。

針對第一個問題,我們可以只使用Adagrad分母中的累計離當前時間點比較近的項,如下式:

式中,ρ為衰減系數,通過這個衰減系數,令每一個時刻的gt隨時間按照ρ指數衰減,這樣就相當于僅使用離當前時刻比較近的gt信息,從而使得還有很長時間時,參數仍然可以得到更新。

針對第三個問題,其實momentum系列的方法也有單位不統一的問題。momentum系列方法中:

類似的,在Adagrad中,用于更新Δx的單位也不是x的單位,而是1。

對于牛頓迭代法:

式中,H為Hessian矩陣,由于其計算量巨大,因而在實際中不常被使用。其單位為

注意,此處f 無單位。因而,牛頓迭代法的單位是正確的。

所以,可以模擬牛頓迭代法來得到正確的單位。注意到:

這里,在解決學習率單調遞減問題的方案中,分母已經是的一個近似了。這里我們可以構造Δx的近似,來模擬得到H-1的近似,從而得到近似的牛頓迭代法。具體做法如下:

可以看到,如此一來Adagrad中分子部分需要人工設置的初始學習率也消失了,從而順帶解決了上述的第二個問題。

3.7.4 Adam優化算法

自適應矩估計(Adaptive Moment Estimation,Adam)是另一個計算各個參數的自適應學習率的方法。除了像 Adadelta 優化算法那樣存儲過去梯度平方vt的指數移動平均值,Adam優化算法還保留了過去梯度mt的指數平均值(這個點類似沖量):

mtvt是對應梯度的一階方矩(平均)和二階力矩(偏方差),它們通過計算偏差來修正一階方矩和二階力矩,并減小這些偏差:

式中,β1的默認值為0.9,β2的默認值為0.999。接著,就像Adadelta優化算法那樣,它們使用這些值來更新參數,由此得到Adam優化算法的更新規則:

式中,ε的默認值為10-8η為自適應學習率。

前面介紹了幾種優化算法,下面直接通過一個例子比較幾種算法的效果。

【例3-14】下面使用TensorFlow來比較一下這些算法的效果。

運行程序,輸出原始帶噪聲散點圖,如圖3-17所示,得到幾種優化算法的比較效果如圖3-18所示。

圖3-17 帶噪聲散點圖

圖3-18 幾種優化算法的比較效果

當設置batch_size=30時,得到如圖3-19所示的效果圖。

圖3-19 batch_size=30時的幾種優化算法比較效果

由圖3-18和圖3-19可以看出,Adam優化算法收斂速度最快,并且波動最小。

主站蜘蛛池模板: 尤溪县| 蓝山县| 关岭| 莲花县| 彭阳县| 宜宾市| 稷山县| 仁化县| 阳曲县| 始兴县| 西乡县| 墨江| 太原市| 浑源县| 保定市| 朝阳市| 襄樊市| 内丘县| 伊宁市| 右玉县| 巴彦淖尔市| 比如县| 秦安县| 丰台区| 黄陵县| 兴安盟| 锡林浩特市| 长兴县| 新干县| 安福县| 房产| 彭阳县| 宜丰县| 汪清县| 嘉峪关市| 信阳市| 肥乡县| 志丹县| 定陶县| 白山市| 永城市|