深度學習基礎課:使用Adam算法
大家好~我開設了“深度學習基礎班”的線上課程,帶領同學從0開始學習全連接和卷積神經(jīng)網(wǎng)絡,進行數(shù)學推導,并且實現(xiàn)可以運行的Demo程序
線上課程資料:
加QQ群,獲得ppt等資料,與群主交流討論:106047770
本系列文章為線上課程的復盤,每上完一節(jié)課就會同步發(fā)布對應的文章
本課程系列文章可進入索引查看:
為什么要學習本課
- 為什么要使用Adam算法?
答:是因為要解決上一節(jié)課出現(xiàn)的無法收斂的問題。Adam算法可以自動調(diào)節(jié)每一層的學習率。我們只需要給出一個初始的學習率,在每一輪的中它會自動調(diào)整每一層的學習率,使它更接近最適合的值,從而能加快收斂
代碼實現(xiàn)
- 在入口的Main代碼中,現(xiàn)在使用Adam優(yōu)化算法了,相關代碼如下:
let _createConvNetwork = () => {
let learnRate = 0.001
...
Network.create(
AdamWOptimizerUtils.buildNetworkAdamWOptimizerData(~learnRate, ()),
- Adam算法的核心實現(xiàn)代碼如下:
AdamW.res
let update = (data, (learnRate, t: int, (beta1, beta2, epsion)), vt_1, st_1, gradient) => {
let vt = vt_1 *. beta1 +. (1. -. beta1) *. gradient
let st = st_1 *. beta2 +. (1. -. beta2) *. gradient *. gradient
let vBiasCorrect = vt /. (1. -. Js.Math.pow_float(~base=beta1, ~exp=t->Obj.magic))
let sBiasCorrect = st /. (1. -. Js.Math.pow_float(~base=beta2, ~exp=t->Obj.magic))
(data -. learnRate *. vBiasCorrect /. (Js.Math.sqrt(sBiasCorrect) +. epsion), (vt, st))
}
浙公網(wǎng)安備 33010602011771號