本文總結自如下兩個鏈接的內容,建議讀者直接閱讀鏈接中的文章
1. https://www.jianshu.com/p/58b3fe300ecb
2. https://www.jianshu.com/p/d8222a84613c
學習率
學習率 lr(learning rate), 梯度下降算法中迭代步長。假設待優化函數爲func(x), dx爲函數對變量x的導數,即下降方向。每次x的迭代公式爲:
x = x + -lr*dx
lr一般不宜過大, lr過大時,迭代過程會出現震盪現象(圖1右)
圖1. (圖片來源於https://www.jianshu.com/p/d8222a84613c)
衰減(decay)
從圖1還可得知,隨着迭代過程的繼續,學習率應當適當減小,這樣才能更穩妥地到達極值點。這種想法就是通過權重衰減因子實現的。
lr_i = lr_start * 1.0 / (1.0 + decay * i)
x = x - lr_i*dx
上式中 i 爲迭代週期,如epoch; lr_start是lr的初始值; decay爲衰減因子, 取值範圍[0,1]. 隨着 i 的增加,學習率逐漸減小.
圖2. (圖片來源於https://www.jianshu.com/p/d8222a84613c)
圖2 是lr=0.9, decay分別爲0, 0.01, 0.5, 0.9時優化迭代示意圖。從圖中可以看出,decay=0時,震盪很厲害,而decay的引入會減緩震盪。
衝量(momentum)
從上面的分析以及圖示還可知,隨着迭代的進行,學習率lr慢慢減小,後期的迭代過程會非常緩慢。而衝量可以較好地解決這一問題。衝量的理念來源於物理過程。例如,快速行駛的汽車即使踩死剎車,車也不會立刻停下,仍然會向前行駛一段距離,這是因爲前一時刻車速依然不爲0導致的。換言之,前一刻車的運行狀態對此刻是有影響的。
衝量也可以這樣理解。在迭代過程中,考慮前一次迭代對本次迭代的影響
x = x - lr*dx + v * momentum
其中,v = - lr*dx, 但dx是上一次迭代對x的導數。momentum取值範圍[0, 1].
圖3 (圖片來源於https://www.jianshu.com/p/58b3fe300ecb)
圖3 是lr=0.1, momentum分別爲0, 0.1, 0.5, 0.9時的優化示意圖。從圖中可以看出衝量的增加能加速迭代過程,但若momentum過大,則可能使迭代出現增長的現象(圖3右)。
上述圖片內容若侵犯作者權益,請留言通知我。我會盡快刪除。