Adam優(yōu)化器及代碼實現(xiàn)

(1) 基礎(chǔ)介紹1

Adam就像蒙著眼睛走唬复,你需要方向矗积,也需要對環(huán)境的感知。
一階距就是慣性的保持敞咧,代表方向棘捣。
二階距就是環(huán)境的感知,代表坡度的大小休建。

(1) 基礎(chǔ)介紹2

先理解隨機變量的一階矩和二階矩乍恐。模型的梯度是一個隨機變量,一階矩表示梯度均值测砂,二階矩表示其方差茵烈,一階矩來控制模型更新的方向,二階矩控制步長(學(xué)習(xí)率)砌些。用moveing average來對一階矩和二階矩進行估計呜投。bias correct是為了緩解初始一階矩和二階矩初始為0帶來的moving average的影響。

一、Adam基礎(chǔ)介紹:

  • Adam是一種可以替代傳統(tǒng)隨機梯度下降過程的一階優(yōu)化算法仑荐,它能基于訓(xùn)練數(shù)據(jù)迭代地更新神經(jīng)網(wǎng)絡(luò)權(quán)重雕拼;

  • Adam使用動量自適應(yīng)學(xué)習(xí)率來加快收斂速度;

  • Adam名字來源于適應(yīng)性矩估計(adaptive moment estimation)的縮寫释漆。


二、Adam優(yōu)勢:

  • 直截了當?shù)貙崿F(xiàn)
  • 高效的計算
  • 所需內(nèi)存少
  • 梯度對角縮放的不變性
  • 適合解決含大規(guī)模數(shù)據(jù)和參數(shù)的優(yōu)化問題
  • 適用于非穩(wěn)態(tài)(non-stationary)目標
  • 適用于解決包含很高噪聲或稀疏梯度的問題
  • 超參數(shù)可以很直觀地解釋篮迎,并且基本上只需極少量的調(diào)參


三男图、Adam主要做法:

做法:基于梯度的一階矩估計(First Moment Estimation,即梯度的均值)和二階矩估計(Second Moment Estimation甜橱,即梯度的未中心化的方差)進行綜合考慮岂傲,計算出更新步長乃戈。

與傳統(tǒng)隨機梯度下降保持同一個學(xué)習(xí)率不同症虑,adam方法從梯度的一階矩和二階矩的預(yù)算來計算不同參數(shù)的自適應(yīng)學(xué)習(xí)速率。

什么是一階矩估計:在adam中為即一階梯度的均值习贫。一階矩估計在數(shù)學(xué)上為是期望值苫昌,換句話說就是平均數(shù)(離散隨機變量很好理解,連續(xù)的可以類比一下)月而。舉例:xy坐標系中议纯,x取大于零的整數(shù),y1, y2, ...,yn 對應(yīng)x=1, 2,..., n的值憨攒,現(xiàn)在我要對y求期望肝集,就是所有y累加除以n瞻坝,也就是y的均值捞挥。

什么是二階據(jù)估計:在adam中為梯度中心化的方差。二階中心矩就是對隨機變量與均值(期望)的差的平方求期望斩披。為什么要用平方仍劈,因為如果序列中有負數(shù)就會產(chǎn)生較大波動绑青,而平方運算就好像對序列添加了絕對值邪乍,這樣更能體現(xiàn)偏離均值的范圍。

Adam 算法同時獲得了 AdaGrad 和 RMSProp 算法的優(yōu)點否纬。

適應(yīng)性梯度算法(AdaGrad)為每一個參數(shù)保留一個學(xué)習(xí)率以提升在稀疏梯度(即自然語言和計算機視覺問題)上的性能吕晌。

均方根傳播(RMSProp)基于權(quán)重梯度最近量級的均值為每一個參數(shù)適應(yīng)性地保留學(xué)習(xí)率。這意味著算法在非穩(wěn)態(tài)和在線問題上有很有優(yōu)秀的性能临燃。

具體來說睛驳,算法計算了梯度的指數(shù)移動均值(exponential moving average)烙心,超參數(shù) beta1 和 beta2 控制了這些移動均值的衰減率。

超參數(shù) beta1 :控制一階距估計的衰減乏沸;

超參數(shù) beta2 :控制二階距估計的衰減淫茵;

移動均值的初始值和 beta1、beta2 值接近于 1(推薦值)蹬跃,因此矩估計的偏差接近于 0匙瘪。該偏差通過首先計算帶偏差的估計而后計算偏差修正后的估計而得到提升。

四蝶缀、Adam的參數(shù)配置:

alpha:同樣也稱為學(xué)習(xí)率或步長因子丹喻,它控制了權(quán)重的更新比率(如 0.001)。較大的值(如 0.3)在學(xué)習(xí)率更新前會有更快的初始學(xué)習(xí)扼劈,而較小的值(如 1.0E-5)會令訓(xùn)練收斂到更好的性能驻啤。

beta1:一階矩估計的指數(shù)衰減率(如 0.9)菲驴。

beta2:二階矩估計的指數(shù)衰減率(如 0.999)荐吵。該超參數(shù)在稀疏梯度(如在 NLP 或計算機視覺任務(wù)中)中應(yīng)該設(shè)置為接近 1 的數(shù)。


五赊瞬、Adam算法偽代碼:

adam偽代碼

在上述偽代碼中:

(1)初始化確定參數(shù)a(步長)先煎、\beta1\beta2(矩估計得指數(shù)衰弱速率巧涧,在[0薯蝎,1)之間)和隨機目標函數(shù)f(θ) 。這些都是預(yù)定義好的谤绳;

(2)初始化參數(shù)向量θ_0占锯、一階矩向量m_0、二階矩向量v_0和時間步t缩筛;

(3)循環(huán)消略,當參數(shù)θ沒有收斂時,循環(huán)迭代地更新各個部分瞎抛。即時間步t加1艺演、更新目標函數(shù)在該時間步上對參數(shù)θ所求的梯度g_t、更新偏差的一階矩估計m_t和二階原始矩估計v_t桐臊,再計算偏差修正的一階矩估計和偏差修正的二階矩估計胎撤,然后再用以上計算出來的值更新模型的參數(shù)θt;

(4)當參數(shù)θ收斂時断凶,返回模型參數(shù)伤提。

注意算法的效率可以通過改變計算順序而得到提升,例如將偽代碼最后三行循環(huán)語句替代為以下兩個:
a_t = a * \frac{\sqrt{1-\beta_{2}^t}}{1-\beta_{1}^t}

\theta_t \leftarrow \theta_{t-1} - a_t*\frac{m_t}{\sqrt{v_t}+\epsilon}

其實认烁,就是3個公式收縮成2個公式飘弧;

六识藤、優(yōu)化器實現(xiàn)

1、預(yù)定義優(yōu)化器對象次伶,一般在代碼_main_處:

# 預(yù)定義優(yōu)化器
optimizers = {
        'adam': torch.optim.Adam,  # default lr=0.001
    } 

# 初始化優(yōu)化器
# opt.optimizer=“Adam”
opt.optimizer = optimizers[opt.optimizer]

2痴昧、初始化優(yōu)化器

# 初始化模型參數(shù)
_params = filter(lambda p: p.requires_grad, self.model.parameters())
# 初始化優(yōu)化器對象
# self.opt.learning_rate為學(xué)習(xí)旅
# self.opt.l2reg為二階矩估計衰減率
optimizer = self.opt.optimizer(_params, lr=self.opt.learning_rate, weight_decay=self.opt.l2reg)

3、模型訓(xùn)練處

# 梯度回傳
loss.backward()
# 更新參數(shù)
optimizer.step()

七冠王、Adam的改進和優(yōu)化策略(待更新)

八赶撰、參考文獻:

深度學(xué)習(xí)最常用的學(xué)習(xí)算法:Adam優(yōu)化算法

簡單認識Adam優(yōu)化器

Adam優(yōu)化算法詳細解析

Adam優(yōu)化器
如何理解Adam算法(Adaptive moment estimation)? - 知乎 (zhihu.com)----帶你飛

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柱彻,一起剝皮案震驚了整個濱河市豪娜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哟楷,老刑警劉巖瘤载,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卖擅,居然都是意外死亡鸣奔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門惩阶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挎狸,“玉大人,你說我怎么就攤上這事断楷∠谴遥” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵冬筒,是天一觀的道長恐锣。 經(jīng)常有香客問我,道長舞痰,這世上最難降的妖魔是什么土榴? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮匀奏,結(jié)果婚禮上鞭衩,老公的妹妹穿的比我還像新娘。我一直安慰自己娃善,他們只是感情好论衍,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聚磺,像睡著了一般坯台。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘫寝,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天蜒蕾,我揣著相機與錄音稠炬,去河邊找鬼。 笑死咪啡,一個胖子當著我的面吹牛首启,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撤摸,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毅桃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了准夷?” 一聲冷哼從身側(cè)響起钥飞,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衫嵌,沒想到半個月后读宙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡楔绞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年结闸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墓律。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡膀估,死狀恐怖幔亥,靈堂內(nèi)的尸體忽然破棺而出耻讽,到底是詐尸還是另有隱情,我是刑警寧澤帕棉,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布针肥,位于F島的核電站,受9級特大地震影響香伴,放射性物質(zhì)發(fā)生泄漏慰枕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一即纲、第九天 我趴在偏房一處隱蔽的房頂上張望具帮。 院中可真熱鬧,春花似錦低斋、人聲如沸蜂厅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掘猿。三九已至,卻和暖如春唇跨,著一層夾襖步出監(jiān)牢的瞬間稠通,已是汗流浹背衬衬。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留改橘,地道東北人滋尉。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像飞主,于是被迫代替她去往敵國和親兼砖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容