深度學習相關總結
部落格來源於本人在深度學習中的知識點總結,基於本人學習進度不定期更新。
1、為什麼相比於RNN,LSTM在梯度消失上表現更好?
2、CNN中卷積層的計算細節
Reference:
1. https://zhuanlan.zhihu.com/p/29119239
Feature Map: 卷積層計算之後的值。
圖中通道數為5,通過kernels中計算,得到的Feature Maps(輸出矩陣)數量是通過:
計算得到。
因此8*8的影象中,3*3的kernel則得到的輸出矩陣維度為6*6。同時在同一個kernel中上一層的不同輸入通道的值卷積後相加。即得到的3個6*6,經過完全相加。
最後的Fully-Connected層是完全擴充套件成1維向量,維度為1*(6*6*5)。
1*1卷積核的作用:
增加通道數、降低通道數、增加非線性變換。
3、深度學習中的優化演算法
優化演算法之前討論兩個問題:
1. 區域性最小值問題。在深度學習中,最優化問題其實並不容易困在區域性最小值點。在高維度空間時(如20000維),區域性最小值點需要在所有維度上都取得最小值,概率為,反而更容易困在鞍點處。
同時平穩端(plateaus)也會使得學習變慢,因此可以通過學習率衰減例如Adam或者RMSProp加速學習。
2. 指數加權(移動)平均(Exponentially Weighted (moving) average)
在資料抖動較大的情況下,利用之前的整體變化趨勢預測當前值。例如預測今天的氣溫,可以對之前每天的氣溫進行平滑處理,即指數加權移動平均,一般形式為:
其中資料利用了前天的整體趨勢平均。
為什麼是前時刻的的指數平均可以從上圖看出。當我們迭代帶入數值計算時,一般認為當權重佔比小於t時刻數值的三分之一(,引數變換即)時,就不再認為t時刻前的資料參與平均。那麼可以看到當為0.9的時候,指數係數為10,也即,共10個時刻的資料參與平均,當為0.98時,指數係數為50,也即,認為共50個時刻的資料參與平均。
3.1、隨機梯度下降(SGD)
深度學習中的SGD指mini-batch gradient descent。在訓練過程中,採用固定的學習率。
其中,是學習率,是梯度SGD完全依賴於當前batch的梯度,所以可理解為允許當前batch的梯度多大程度影響引數更新。
通常而言,就總訓練時間和最終代價而言,最優初始學習率的效果會好於大約迭代100次後最佳的效果。
缺點:
(1). 選擇合適的learning rate比較困難,且對所有的引數更新使用同樣的learning rate;
(2). SGD容易收斂到區域性最優,並且在某些情況下可能被困在鞍點(其實在合適的初始化和step size的情況下,鞍點的影響並沒有很大)。
3.2、動量(momentum)
動量方法旨在加速學習,特別是在面對小而連續的梯度但是含有很多噪聲的時候。動量模擬了物體運動時的慣性,即在更新的時候在一定程度上會考慮之前更新的方向,同時利用當前batch的梯度微調最終的結果。這樣則可以在一定程度上增加穩定性,從而更快的學習。
特點:
(1)、下降初期時,使用上一次引數更新,當下降方向一致時能夠加速學習
(2)、下降中後期,在區域性最小值附近來回振盪時,gradient–>0,使得更新幅度增大,跳出陷阱;
(3)、在梯度改變方向時,能減少更新。總體而言,momentum能夠在相關方向上加速學習,抑制振盪,從而加速收斂。
3.3、Nesterov動量
Nesterov項在梯度更新時做出校正,避免前進太快,同時提高靈敏度。在動量中,我們將其展開為:
可以看到,此前積累的動量並沒有直接改變當前梯度,所以Nesterov的改進就是讓之前的動量直接影響當前的動量,即:
所以,加上Nesterov項後,梯度在大的跳躍後,進行計算對當前梯度進行校正。
Nesterov動量和標準動量的區別在於梯度的計算上。Nesterov動量的梯度計算是在施加當前速度之後。因此,Nesterov動量可以解釋為往標準動量方法中添加了一個校正因子。
3.4、自適應學習率演算法
在訓練開始的時候,我們遠離最終的最優值點,需要使用較大的學習率。經過幾輪訓練之後,我們需要減小訓練學習率。
對於採用mini-batch梯度下降時,在迭代的過程中會伴隨有噪音,雖然cost function會持續下降,但是演算法收斂的結果是在最小值附近處擺動,而減小學習率,則會使得最後的值在最小值附近,更加接近收斂點。
3.4.1、AdaGrad
Divide the learning rate of each parameter by the root mean square of its previous derivatives(將每個引數除以之前所有梯度的均方和)。
此處,對從1開始t進行一個遞推形成一個約束項regularizer,保證分母非0。
特點:
1. 前期較小的時候,regularizer較大,能夠放大梯度;
2. 後期較大的時候,regularizer較小,能夠約束梯度;
3. 適合處理稀疏梯度。
缺點:
1. 需要手動設定一個全域性的學習率;
2. 設定過大時,會使regularizer過於敏感,對梯度的調節太大;
3. 中後期,分母上梯度平方的累積將會越來越大,使gradient–>0,使得訓練提前結束。
3.4.2、Adadelta
Adadelta是Adagrad的拓展,最初方案依舊是對學習率進行自適應約束,但是進行了計算上的簡化。Adagrad會累加之前所有的梯度平方,而Adadelta只累加固定大小的項,並且也不直接儲存這些項,僅僅是近似計算對應的平均值。即:
在此時Adadelta還是依賴於全域性學習率,但是作者處理後,
此時Adadelta已經不再依賴於全域性學習率了。
特點:
1. 訓練初中期,加速效果不錯;
2. 訓練後期,反覆在區域性最小值附近抖動。
3.4.3、RMSProp
RMSProp可以看做為Adadalta的一個特例,也即上述式子中,然後再求根的話,就變成RMS(均方根):
隨著在不同範圍內的平均,對於變化較大的值方向能夠抑制變化,較小的值方向加速變化,消除擺動加速收斂。
RMSProp的特點如下,
優點:
1. 由於採用了梯度平方的指數加權平均,改進了AdaGrad在深度學習中過早結束的問題,效果趨於二者之間;
2. 適用於處理非平穩過程(也即過程依賴於時間,採用指數加權平均時對於非平穩過程處理較好)-對於RNN效果較好。
缺點:
1. 仍然依賴於全域性學習率。
3.4.4、Adam
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSProp,它利用了梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。Adam的優點主要在於經過偏置校正(Bias correction,為了修正在訓練初期的誤差,當t變大後,偏置校正效果減弱)後,每一次迭代學習率都有個確定範圍,使得引數比較平穩。
偏置修正(Bias Correction)的效果:
當初始化時,