您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關優化器optimizers怎么用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
一,優化器概述
機器學習界有一群煉丹師,他們每天的日常是:
拿來藥材(數據),架起八卦爐(模型),點著六味真火(優化算法),就搖著蒲扇等著丹藥出爐了。
不過,當過廚子的都知道,同樣的食材,同樣的菜譜,但火候不一樣了,這出來的口味可是千差萬別。火小了夾生,火大了易糊,火不勻則半生半糊。
機器學習也是一樣,模型優化算法的選擇直接關系到最終模型的性能。有時候效果不好,未必是特征的問題或者模型設計的問題,很可能就是優化算法的問題。
深度學習優化算法大概經歷了 SGD -> SGDM -> NAG ->Adagrad -> Adadelta(RMSprop) -> Adam -> Nadam 這樣的發展歷程。
對于一般新手煉丹師,優化器直接使用Adam,并使用其默認參數就OK了。
一些愛寫論文的煉丹師由于追求評估指標效果,可能會偏愛前期使用Adam優化器快速下降,后期使用SGD并精調優化器參數得到更好的結果。
此外目前也有一些前沿的優化算法,據稱效果比Adam更好,例如LazyAdam, Look-ahead, RAdam, Ranger等.
優化器主要使用apply_gradients方法傳入變量和對應梯度從而來對給定變量進行迭代,或者直接使用minimize方法對目標函數進行迭代優化。
當然,更常見的使用是在編譯時將優化器傳入keras的Model,通過調用model.fit實現對Loss的的迭代優化。
初始化優化器時會創建一個變量optimier.iterations用于記錄迭代的次數。因此優化器和tf.Variable一樣,一般需要在@tf.function外創建。
深度學習優化算法大概經歷了SGD->SGDM->NAG->Adagrad->Adadelta(RMSprop)->Adam ->Nadam 這樣的發展歷程。
在keras.optimizers子模塊中,它們基本上都有對應的類的實現。
SGD, 默認參數為純SGD, 設置momentum參數不為0實際上變成SGDM, 考慮了一階動量, 設置 nesterov為True后變成NAG,即 Nesterov Acceleration Gradient,在計算梯度時計算的是向前走一步所在位置的梯度。
Adagrad, 考慮了二階動量,對于不同的參數有不同的學習率,即自適應學習率。缺點是學習率單調下降,可能后期學習速率過慢乃至提前停止學習。
RMSprop, 考慮了二階動量,對于不同的參數有不同的學習率,即自適應學習率,對Adagrad進行了優化,通過指數平滑只考慮一定窗口內的二階動量。
Adadelta, 考慮了二階動量,與RMSprop類似,但是更加復雜一些,自適應性更強。
Adam, 同時考慮了一階動量和二階動量,可以看成RMSprop上進一步考慮了Momentum。
Nadam, 在Adam基礎上進一步考慮了 Nesterov Acceleration。
以上就是優化器optimizers怎么用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。