1. 程式人生 > >改善深層神經網路_優化演算法_mini-batch梯度下降、指數加權平均、動量梯度下降、RMSprop、Adam優化、學習率衰減

改善深層神經網路_優化演算法_mini-batch梯度下降、指數加權平均、動量梯度下降、RMSprop、Adam優化、學習率衰減

1.mini-batch梯度下降

在前面學習向量化時,知道了可以將訓練樣本橫向堆疊,形成一個輸入矩陣和對應的輸出矩陣:

當資料量不是太大時,這樣做當然會充分利用向量化的優點,一次訓練中就可以將所有訓練樣本涵蓋,速度也會較快。但當資料量急劇增大,達到百萬甚至更大的數量級時,組成的矩陣將極其龐大,直接對這麼大的的資料作梯度下降,可想而知速度是快不起來的。故這裡將訓練樣本分割成較小的訓練子集,子集就叫mini-batch。例如:訓練樣本數量m=500萬,設定mini-batch=1000,則可以將訓練樣本劃分為5000個mini-batch,每個mini-batch中含有1000個樣本資料,當然,輸出矩陣也要做同樣的劃分。這張圖可以直觀的理解:


在實際的訓練中,會通過迴圈來遍歷所有的mini-batch,對每一個mini-batch都會做和原來一樣的步驟,即:前向傳播、計算損失函式、反向傳播、更新引數。


這張圖可以大致反應兩種梯度下降方法其損失函式的變化過程:在batch梯度下降中,由於每次訓練迭代都是遍歷的整個訓練集,故損失函式的曲線應是一個較為平滑的下降過程,如出現明顯的抖動,很大程度可能是學習率α過大。
但在mini-batch梯度下降中可以看到,並不是每次迭代其損失函式都是下降的,這是因為訓練集不完整的原因。但總體趨勢還是下降的,抖動程度取決於設定的mini-batch的大小。

綜合來說,如果訓練集較小,那麼直接使用batch梯度下降法,可以快速的處理整個資料集,一般來說是少於2000個樣本。
如果訓練集再大一點,就可以考慮使用mini-batch梯度下降法,一般mini-batch的大小為64 - 512(考慮到電腦記憶體,設定為2的n次方,運算速度會快些)。
另外,當mini-batch設定為1時,又叫做隨機梯度下降法

2.、指數加權平均

舉個例子:下圖是一年內某地氣溫的變化情況:

可以看到資料點比較的雜亂,但是大體趨勢還是存在的。為了更好的表現氣溫變化情況,這裡做一下這樣的處理:

我們看到這個高值的β=0.98得到的曲線要平坦一些,是因為你多平均了幾天的溫度.所以波動更小,更加平坦.缺點是曲線向右移動,這時因為現在平均的溫度值更多,
所以會出現一定的延遲.對於β=0.98這個值的理解在於有0.98的權重給了原先的值,只有0.02的權重給了當日的值.
我們現在將β=0.5作圖執行後得到黃線,由於僅平均了兩天的溫度,平均的資料太少,所以得到的曲線有更多的噪聲,更有可能出現異常值,但是這個曲線能更快的適應溫度變化,
所以指數加權平均數經常被使用. 在統計學中,它常被稱為指數加權移動平均值

3.動量梯度下降

4.RMSprop

5.Adam優化

6.學習率衰減

參考文獻
[1]https://www.cnblogs.com/cloud-ken/p/7723755.html
[2]https://blog.csdn.net/yxnull/article/details/80832604