吳恩達 DeepLearning.ai 課程提煉筆記(2-2)改善深層神經網路 --- 優化演算法
以下為在Coursera上吳恩達老師的DeepLearning.ai課程項目中,第二部分《改善深層神經網路:超參數調試、正則化以及優化》第二周課程「優化演算法」關鍵點的筆記。本次筆記幾乎涵蓋了全部小視頻課程的記錄。同時在閱讀以下筆記的同時,強烈建議學習吳恩達老師的視頻課程,視頻請至 Coursera 或者 網易雲課堂。
1. Mini-batch 梯度下降法
對整個訓練集進行梯度下降法的時候,我們必須處理整個訓練數據集,然後才能進行一步梯度下降,即每一步梯度下降法需要對整個訓練集進行一次處理,如果訓練數據集很大的時候,如有500萬或5000萬的訓練數據,處理速度就會比較慢。
但是如果每次處理訓練數據的一部分,即用其子集進行梯度下降,則我們的演算法速度會執行的更快。而處理的這些一小部分訓練子集即稱為Mini-batch。
演算法核心
對於普通的梯度下降法,一個epoch只能進行一次梯度下降;而對於Mini-batch梯度下降法,一個epoch可以進行Mini-batch的個數次梯度下降。
不同size大小的比較
普通的batch梯度下降法和Mini-batch梯度下降法代價函數的變化趨勢,如下圖所示:
- batch梯度下降:
- 對所有m個訓練樣本執行一次梯度下降,每一次迭代時間較長;
- Cost function 總是向減小的方向下降。
- 隨機梯度下降:
- 對每一個訓練樣本執行一次梯度下降,但是丟失了向量化帶來的計算加速;
- Cost function總體的趨勢向最小值的方向下降,但是無法到達全局最小值點,呈現波動的形式。
- Mini-batch梯度下降:
- 選擇一個 的合適的size進行Mini-batch梯度下降,可以實現快速學習,也應用了向量化帶來的好處;
- Cost function的下降處於前兩者之間。
Mini-batch 大小的選擇
- 如果訓練樣本的大小比較小時,如 時 ------ 選擇batch梯度下降法;
- 如果訓練樣本的大小比較大時,典型的大小為: ;
- Mini-batch的大小要符合CPU/GPU內存。
2. 指數加權平均
指數加權平均的關鍵函數:
下圖是一個關於天數和溫度的散點圖:
- 當 時,指數加權平均最後的結果如圖中紅色線所示;
- 當 時,指數加權平均最後的結果如圖中綠色線所示;
- 當 時,指數加權平均最後的結果如下圖中黃色線所示;
理解指數加權平均
例子,當 時:
展開,有:
上式中所有 前面的係數相加起來為1或者接近於1,稱之為偏差修正。
總體來說存在, ,在我們的例子中, ,即 。相當於大約10天後,係數的峰值(這裡是0.1)下降到原來的 ,只關注了過去10天的天氣。
指數加權平均實現
因為,在計算當前時刻的平均值,只需要前一天的平均值和當前時刻的值,所以在數據量非常大的情況下,指數加權平均在節約計算成本的方面是一種非常有效的方式,可以很大程度上減少計算機資源存儲和內存的佔用。
指數加權平均的偏差修正
在我們執行指數加權平均的公式時,當 時,我們得到的並不是圖中的綠色曲線,而是下圖中的紫色曲線,其起點比較低。
- 原因:
如果第一天的值為如 ,則 ,得到的值要遠小於實際值,後面幾天的情況也會由於初值引起的影響,均低於實際均值。
- 偏差修正:
使用
當 時:
偏差修正得到了綠色的曲線,在開始的時候,能夠得到比紫色曲線更好的計算平均的效果。隨著 逐漸增大, 接近於0,所以後面綠色的曲線和紫色的曲線逐漸重合了。
雖然存在這種問題,但是在實際過程中,一般會忽略前期均值偏差的影響。
3. 動量(Momentum)梯度下降法
動量梯度下降的基本思想就是計算梯度的指數加權平均數,並利用該梯度來更新權重。
在我們優化 Cost function 的時候,以下圖所示的函數圖為例:
在利用梯度下降法來最小化該函數的時候,每一次迭代所更新的代價函數值如圖中藍色線所示在上下波動,而這種幅度比較大波動,減緩了梯度下降的速度,而且我們只能使用一個較小的學習率來進行迭代。
如果用較大的學習率,結果可能會如紫色線一樣偏離函數的範圍,所以為了避免這種情況,只能用較小的學習率。
但是我們又希望在如圖的縱軸方向梯度下降的緩慢一些,不要有如此大的上下波動,在橫軸方向梯度下降的快速一些,使得能夠更快的到達最小值點,而這裡用動量梯度下降法既可以實現,如紅色線所示。
演算法實現
常用的值是0.9。
在我們進行動量梯度下降演算法的時候,由於使用了指數加權平均的方法。原來在縱軸方向上的上下波動,經過平均以後,接近於0,縱軸上的波動變得非常的小;但在橫軸方向上,所有的微分都指向橫軸方向,因此其平均值仍然很大。最終實現紅色線所示的梯度下降曲線。
演算法本質解釋
在對應上面的計算公式中,將Cost function想像為一個碗狀,想像從頂部往下滾球,其中:
- 微分項 想像為球提供的加速度;
- 動量項 相當於速度;
小球在向下滾動的過程中,因為加速度的存在使得速度會變快,但是由於 的存在,其值小於1,可以認為是摩擦力,所以球不會無限加速下去。
4. RMSprop
除了上面所說的Momentum梯度下降法,RMSprop(root mean square prop)也是一種可以加快梯度下降的演算法。
同樣演算法的樣例實現如下圖所示:
這裡假設參數b的梯度處於縱軸方向,參數w的梯度處於橫軸方向(當然實際中是處於高維度的情況),利用RMSprop演算法,可以減小某些維度梯度更新波動較大的情況,如圖中藍色線所示,使其梯度下降的速度變得更快,如圖綠色線所示。
在如圖所示的實現中,RMSprop將微分項進行平方,然後使用平方根進行梯度更新,同時為了確保演算法不會除以0,平方根分母中在實際使用會加入一個很小的值如 。
5. Adam 優化演算法
Adam (Adaptive Moment Estimation)優化演算法的基本思想就是將 Momentum 和 RMSprop 結合起來形成的一種適用於不同深度學習結構的優化演算法。
演算法實現
- 初始化:
- 第 次迭代:
- Compute on the current mini-batch
- ----- 「Momentum」
- ----- 「RMSprop」
- ----- 偏差修正
- ----- 偏差修正
超參數的選擇
- :需要進行調試;
- :常用預設值為0.9, 的加權平均;
- :推薦使用0.999, 的加權平均值;
- :推薦使用 。
6. 學習率衰減
在我們利用 mini-batch 梯度下降法來尋找Cost function的最小值的時候,如果我們設置一個固定的學習速率 ,則演算法在到達最小值點附近後,由於不同batch中存在一定的雜訊,使得不會精確收斂,而一直會在一個最小值點較大的範圍內波動,如下圖中藍色線所示。
但是如果我們使用學習率衰減,逐漸減小學習速率 ,在演算法開始的時候,學習速率還是相對較快,能夠相對快速的向最小值點的方向下降。但隨著 的減小,下降的步伐也會逐漸變小,最終會在最小值附近的一塊更小的區域里波動,如圖中綠色線所示。
學習率衰減的實現
- 常用:
- 指數衰減:
- 其他:
- 離散下降(不同階段使用不同的學習速率)
7. 局部最優問題
在低維度的情形下,我們可能會想像到一個Cost function 如左圖所示,存在一些局部最小值點,在初始化參數的時候,如果初始值選取的不得當,會存在陷入局部最優點的可能性。
但是,如果我們建立一個高維度的神經網路。通常梯度為零的點,並不是如左圖中的局部最優點,而是右圖中的鞍點(叫鞍點是因為其形狀像馬鞍的形狀)。
在一個具有高維度空間的函數中,如果梯度為0,那麼在每個方向,Cost function可能是凸函數,也有可能是凹函數。但如果參數維度為2萬維,想要得到局部最優解,那麼所有維度均需要是凹函數,其概率為 ,可能性非常的小。也就是說,在低維度中的局部最優點的情況,並不適用於高維度,在梯度為0的點更有可能是鞍點,而不是局部最小值點。
在高緯度的情況下:
- 幾乎不可能陷入局部最小值點;
- 處於鞍點的停滯區會減緩學習過程,利用如Adam等演算法進行改善。
本文將同時更新在我的CSDN博客:
吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(2-2)-- 優化演算法
歡迎關注,一起學習一起進步喲。^_^
推薦閱讀:
※[CV] 通俗理解『卷積』——從傅里葉變換到濾波器
※?直播預告丨今日頭條李磊:談機器人創作的技術實現與行業未來
※【相剋相生】國美公司名稱變更, 淺談新零售前景
※Alpha Zero 碎碎念
※要做的事情太多,蘋果在AI領域已落於下風
TAG:深度学习DeepLearning | 机器学习 | 人工智能 |