【深度学习】一文搞定面试中的优化算法
深度學習各類優化器
借用古代煉丹的一些名詞,我們可以把訓練模型中的數據比做煉丹藥材,模型比做煉丹爐,火候比做優化器。那么我們知道,同樣的藥材同樣的煉丹爐,但是火候不一樣的話,煉出來的丹藥千差萬別,同樣的對于深度學習中訓練模型而言,有時候模型性能不好,也許不是數據或者模型本身的原因,而是優化器的原因。由此可見優化器對于深度學習來說是多么重要了,那么今天小編就帶大家了解一些常見的優化器。
優化算法設計原理
深度學習中的優化算法采用的原理是梯度下降法,即最小化目標函數 ,最優化的求解過程,首先求解目標函數的梯度 ,然后將參數 向負梯度方向更新,, 為學習率,表明梯度更新的步伐的大小,最優化的過程依賴的算法稱為優化器,可以看出深度學習優化器的兩個核心是梯度與學習率,前者決定參數更新的方向,后者決定參數的更新程度。
我們定義 為待優化的參數, 為目標函數,初始學習率為 。再進行一次梯度下降過程中優化算法的執行框架如下:
1、計算目標函數關于當前參數的梯度:
2、根據需要計算歷史梯度的一階和二階動量:
3、計算當前時刻的下降梯度:
自適應優化器
非自適應優化器
4、進行梯度下降更新
對于各種優化器而言,步驟 和步驟 都是一樣的,主要差別是體現在步驟 和步驟 ,下面我們就來具體講解這些優化器的設計思路。
非自適應優化器
在優化過程中,學習率全程不變,或者按照一定的 隨時間變化,稱之為非自適應優化器,這類包括最常見的 (隨機梯度下降法),帶 的 、帶 的 等。
1、( )
其梯度更新公式為:
在每次更新梯度的時候,采用整個訓練集的數據來計算 對參數的梯度,所以計算起來非常慢,遇到很大量的數據集也會非常棘手,而且不能投入新數據實時更新模型。
2、 隨機梯度下降法( )
其梯度更新公式和 類似。
的梯度下降過程,類似于一個小球從山坡上滾下,它的前進方向只于當前山坡的最大傾斜方向一致(最大負梯度方向),每一個時刻的初速度為 0。梯度更新規則為: 每次更新時對一個 內每個樣本進行梯度更新,這樣使得網絡更新參數速度很快。但是其缺點也很明顯,因為 更新梯度非常頻繁,會造成 會有嚴重的震蕩,有可能在全局最小值處來回震蕩跳出全局最優值。
3、( )
其實我們更多時候把 稱之為 ,其梯度更新公式和 類似。梯度更新規則為: 每一次利用一個 樣本,即 個樣本進行計算,這樣它可以降低參數更新時的方差,收斂更穩定,另一方面可以充分地利用深度學習庫中高度優化的矩陣操作來進行更有效的梯度計算。和 中 的區別是每一次循環梯度更新的時候不是使用每個樣本,而是一個 內的 個樣本。在下面文章中提到的 就指代這里的 。
圖 更新時的梯度變化優點:
1、雖然看起來在更新過程中 的 波動非常大,會走很多彎路,但是對梯度的要求很低(計算梯度快),而且對于引入噪聲,大量的理論和實踐工作證明,只要噪聲不是特別大, 都能很好地收斂。
2、應用大型數據集時,訓練速度很快。比如每次從百萬數據樣本中,取幾百個數據點,算一個 梯度,更新一下模型參數。相比于標準梯度下降法的遍歷全部樣本,每輸入一個樣本更新一次參數,要快得多。
缺點:
1、不能保證很好的收斂性;- 每次僅使用數據集中的一部分進行梯度下降,所以每次下降并不是嚴格按照朝最小方向下降,只是總體下降趨勢是朝著最小方向,極度容易陷于局部最小值。
2、 如果太小,收斂速度會很慢,如果太大, 就會在極小值處不停地震蕩甚至偏離。(有一種措施是先設定大一點的學習率,當兩次迭代之間的變化低于某個閾值后,就減小 ,不過這個閾值的設定需要提前寫好,但這樣的話就不能夠適應數據集的特點)。
3、對于非凸函數,還要避免陷于局部極小值處,或者鞍點處,因為鞍點周圍的梯度都接近于 , 很容易被困在這里。在這里解釋一下鞍點就是:一個光滑函數的鞍點鄰域的曲線,曲面,或超曲面,都位于這點的切線的不同邊。如下圖 所示。
圖 鞍點示意圖4、(帶有 動量的 )
為了解決在上面的優化算法中容易出現的問題, 應用而生,在原有的 上加入了一階動量,從直觀理解就是加入了一個慣性,在坡度比較陡的地方,會有較大的慣性,下降的就會比較快;坡度平緩的地方,慣性較小,下降的會比較慢。
其梯度更新公式為:
通過加入 ,將其定義為動量, 常用的值為 。使用動量后在梯度下降過程中可以使得梯度方向不變的方向上下降速度變快,梯度方向有所改變的方向上的下降速度變慢。在這里我們舉一個比較貼近的例子:在原本的梯度下降中一直朝著一個方向去下降,而當遇到山溝的時候(也就是一個拐點),越過山溝此時就在另一邊山坡,這個時候梯度方向是跟之前相反的,此時由于之前梯度大小的累加,在兩個山坡間的變化就會被互相抵消掉,也就不會一直在兩個山坡振蕩,容易朝山溝向下走,也就是會減少震蕩。 的梯度更新時的狀態如下圖 所示,和圖 相比,震蕩明顯減少。
圖 更新時的梯度變化5、( )
上面介紹的 的每下降一步都是由前面下降方向的一個累積和當前點的梯度方向組合而成,但當剛好下降到拐點附近時,如果這個時候繼續以這樣的方式更新參數,我們會有一個較大的幅度越過拐點,即:模型遇到拐點不會自動減弱更新的幅度。NAG 針對上述問題對動量方法進行了改進,其表達式如下:
利用當前位置處先前的梯度值先做一個參數更新,然后在更新后的位置再求梯度,將此部分梯度跟之前累積下來的梯度值矢量相加,簡單的說就是先根據之前累積的梯度方向模擬下一步參數更新后的值,然后將模擬后的位置處梯度替換動量方法中的當前位置梯度。那么這種方式為什么解決了之前說的那個問題呢?因為 有一個預測后一步位置梯度的步驟,所以當下降到拐點附近時, 預測到會跨過拐點,該項梯度就會對之前梯度有個修正,相當于阻止了其跨度太大。
圖如上圖 所示,我們舉個例子來簡單示意一下 的更新原理,其中藍色線表示方法,藍色短線表示當前位置梯度更新,藍色長線表示之前累積的梯度;第一個紅色線表示用 算法預測下一步位置的梯度更新,第一條棕色線表示先前累積的梯度,其矢量相加結果(綠色線)就是參數更新的方向。 在更新梯度時的狀態圖如下圖 所示,從圖中可以看出,相對于 和 , 表現出來的性能更好。
圖 更新時的梯度變化自適應優化器
在優化過程中,學習率隨著梯度自適應的變化,并盡可能去消除給定的全局學習率的影響,叫做自適應優化器,常見的包括 、、、 等。
1、
其實是對學習率進行了一個約束,對于經常更新的參數,我們已經積累了大量關于它的知識,不希望被單個樣本影響太大,希望學習速率慢一些;對于偶爾更新的參數,我們了解的信息太少,希望能從每個偶然出現的樣本身上多學一些,即學習速率大一些。而該方法中開始使用二階動量,意味著“自適應學習率”優化算法時代的到來。
在這里我們說明一下二階動量 的定義:它是用來度量參數歷史更新頻率的,二階動量是迄今為止所有梯度值的平方和。 的表達式為:
其中 為 時刻參數梯度,下面來講解為什么 可以實現不同頻率特征對其參數學習率改變。首先,我們看到二階動量 ,它是梯度平方累加和,對于訓練數據少的特征,自然對應的參數更新就緩慢,也就是說他們的梯度變化平方累加和就會比較小,所以對應于上面參數更新方程中的學習速率就會變大,因而對于某個特征數據集少,相應參數更新速度就快。為了防止上述分母為 ,所以往往添加一個平滑項參數 ,參數更新方程也就變成:
但是 同樣也有問題,就是其分母隨著訓練數增加,也會跟著增加,這樣會導致學習速率越來越小,最終無限接近于 ,從而無法有效更新參數。
2、
針對于 的缺點, 對二階動量 進行了改進,和 相比,就是分母換成了過去的梯度平方的衰減平均值,這個分母相當于梯度的均方根值 ( )。其表達式如下:
其中對梯度的二階動量變化為 ;對變量的變化量的二階動量為 ,并使用其將其替換學習率。通過 優化算法,我們甚至可以不需要設置一個默認的學習率,因為在新的規則中已經移除了這項。
3、
和 都是為了解決 學習率急劇下降問題而被提出來的。 與 的計算公式非常相似,只不過在相同的時間內被獨立的提出,其表達式為:
由此可以看出, 還需要自己手動設置一個初始的學習率 。作者建議將 設置為 0.9,學習率 設置為 0.001。
4、( )
算法是另一種計算每個參數的自適應學習率的方法。它是一種將動量 和 結合起來的辦法方法,同時引入了兩個參數 和 ,其表達式為:
一階動量
二階動量
其中 默認值為 , 默認值為 , 為 , 集合了動量和 兩者的優點,從經驗中表明 在實際中表現很好,同時與其他自適應學習算法相比,更有優勢。
總結
我們來看一下上面幾種優化算法在鞍點和等高線上的表現:
圖 各個優化算法在鞍點處表現圖 各個優化算法在等高線表現從圖 6 和圖 7 都可以看出,、、 幾乎很快就找到了正確的方向并前進,收斂速度也相當快,而其它方法要么很慢,要么走了很多彎路才找到。
關于優化器如何選擇的問題上,小編也綜合網上的辦法給出以下建議:
1、首先,各大算法孰優孰劣并無定論。如果是剛入門,優先考慮 + 或者 。
2、 等自適應學習率算法對于稀疏數據具有優勢,且收斂速度很快;但精調參數的 往往能夠取得更好的最終結果。
3、根據你的需求來選擇——在模型設計實驗過程中,要快速驗證新模型的效果,可以先用 進行快速實驗優化;在模型上線或者結果發布前,可以用精調的 系列優化算法進行模型的極致優化。
4、考慮不同算法的組合。先用 進行快速下降,而后再換到 系列優化算法進行充分的調優。
引用
https://www.jianshu.com/p/a63858bcf455
https://www.cnblogs.com/guoyaohua/p/8542554.html
https://blog.csdn.net/u013385018/article/details/92377371
https://blog.csdn.net/qq_42109740/article/details/105401197
https://blog.csdn.net/tsyccnh/article/details/76673073
總結
以上是生活随笔為你收集整理的【深度学习】一文搞定面试中的优化算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌浏览器怎么打开flash Chrom
- 下一篇: Chrome浏览器插件Tab Group