www涩-www黄网站-www黄色-www黄色com-国产免费拍拍视频在线观看网站-国产免费怕怕免费视频观看

了解學(xué)習(xí)率及其如何提高深度學(xué)習(xí)的性能

2018-03-20 17:10:55 InfoQ  點(diǎn)擊量: 評(píng)論 (0)
首先,什么是學(xué)習(xí)率?學(xué)習(xí)率(Learning Rate,LR。常用η表示。)是一個(gè)超參數(shù),考慮到損失梯度,它控制著我們?cè)诙啻蟪潭壬险{(diào)整網(wǎng)絡(luò)的

首先,什么是學(xué)習(xí)率?

學(xué)習(xí)率(Learning Rate,LR。常用η表示。)是一個(gè)超參數(shù),考慮到損失梯度,它控制著我們?cè)诙啻蟪潭壬险{(diào)整網(wǎng)絡(luò)的權(quán)重。值越低,沿著向下的斜率就越慢。雖然這可能是一個(gè)好主意(使用低學(xué)習(xí)率),以確保我們不會(huì)錯(cuò)過任何局部最小值;但也有可能意味著我們將耗費(fèi)很久的時(shí)間來收斂——特別是當(dāng)我們陷入平坦區(qū)(plateau region)的時(shí)候。

AI前線:如果使用很高的學(xué)習(xí)率,訓(xùn)練可能根本不會(huì)收斂,甚至?xí)l(fā)散。權(quán)重的該變量可能會(huì)非常大,使得優(yōu)化越過最小值,導(dǎo)致?lián)p失函數(shù)變得更糟。

下面的公式顯示了這種關(guān)系:

new_weight = existing_weight — learning_rate * gradient

學(xué)習(xí)率很小(上圖)與學(xué)習(xí)率很大(下圖)的梯度下降。(來源:Coursera機(jī)器學(xué)習(xí)課程,Andrew Ng)

通常,學(xué)習(xí)率是由用戶隨機(jī)配置的。在最好的情況下,用戶可以利用過去的經(jīng)驗(yàn)(或者其他類型的學(xué)習(xí)材料)來獲得關(guān)于設(shè)置學(xué)習(xí)率最佳值的直覺。

因此,很難做到這一點(diǎn)。下圖演示了配置學(xué)習(xí)率時(shí)可能會(huì)遇到的不同場(chǎng)景。

不同學(xué)習(xí)率對(duì)收斂的影響:(圖片來源:csn231n)

此外,學(xué)習(xí)率會(huì)影響模型收斂到局部最小值的速度(也就是達(dá)到最佳的精度)。因此,在正確的方向做出正確的選擇,意味著我們只需更少的時(shí)間來訓(xùn)練模型。

訓(xùn)練時(shí)間越少,則花在GPU云計(jì)算上的錢就越少。:)

AI前線:目前深度學(xué)習(xí)使用的都是一階收斂算法:梯度下降法。不管有多少自適應(yīng)的優(yōu)化算法,本質(zhì)上都是對(duì)梯度下降法的各種變形。故初始學(xué)習(xí)率對(duì)深層網(wǎng)絡(luò)的收斂起著決定性的作用。

有沒有更好的方法來確定學(xué)習(xí)率?

在“訓(xùn)練神經(jīng)網(wǎng)絡(luò)的循環(huán)學(xué)習(xí)率(Cyclical Learning Rates (CLR)for Training Neural Networks)”[4]的第3.3節(jié)中。Leslie N. Smith認(rèn)為,通過在每次迭代中以非常低的學(xué)習(xí)率來增加(線性或指數(shù))的方式訓(xùn)練模型,可以估計(jì)好的學(xué)習(xí)率。

AI前線:周期性學(xué)習(xí)率(Cyclical Learning Rates,CLR),即學(xué)習(xí)率退火與熱重啟,最初由Smith于2015年首次提出。這是一種新的學(xué)習(xí)率方法,和以前的不同,或者固定(fixed)或者單調(diào)遞減。要使用CLR,需指定這三個(gè)參數(shù):max_lr、base_lr、stepsize。

學(xué)習(xí)率在每個(gè)小批量之后增加

如果我們?cè)诿看蔚杏涗泴W(xué)習(xí)率和訓(xùn)練損失,然后據(jù)此繪出曲線圖;我們將會(huì)看到,隨著學(xué)習(xí)率的提高,將會(huì)有一個(gè)損失停止下降并開始增加的點(diǎn)。在實(shí)踐中,理想情況下,學(xué)習(xí)率應(yīng)該是在左圖的最低點(diǎn)(如下圖所示)。在該例中為0.001到0.01之間。

以上看起來很有用。我該如何開始使用它?

目前,它被作為fast.ai深度學(xué)習(xí)庫(kù)的一個(gè)函數(shù)來支持。由Jeremy Howard開發(fā),是用來抽象PyTorch深度學(xué)習(xí)框架的一種方式,就像Keras是對(duì)TensorFlow框架的抽象。

AI前線: fast.ai深度學(xué)習(xí)庫(kù)是fast.ai基于PyTorch的基礎(chǔ)上創(chuàng)建的自有軟件庫(kù),并且他們認(rèn)為,這將有助于更加清晰地展示深度學(xué)習(xí)的概念,同時(shí)有助于實(shí)現(xiàn)最佳編碼。采用Apache 2.0許可證,可免費(fèi)使用。

只需輸入以下命令,就可以在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前找到最佳學(xué)習(xí)率。

# learn is an instance of Learner class or one of derived classes like ConvLearner
learn.lr_find()
learn.sched.plot_lr()

精益求精

在這個(gè)關(guān)鍵時(shí)刻,我們已經(jīng)討論了學(xué)習(xí)率的全部?jī)?nèi)容和它的重要性,以及我們?nèi)绾卧陂_始訓(xùn)練模型時(shí)系統(tǒng)地達(dá)到最佳的使用價(jià)值。

接下來,我們將討論如何使用學(xué)習(xí)率來提高模型的性能。

一般看法

通常情況下,當(dāng)一個(gè)人設(shè)定學(xué)習(xí)率并訓(xùn)練模型時(shí),只有等待學(xué)習(xí)率隨著時(shí)間的推移而降低,并且模型最終會(huì)收斂。

然而,隨著梯度逐漸趨于穩(wěn)定時(shí),訓(xùn)練損失也變得難以改善。在[3]中,Dauphin等人認(rèn)為,最大限度地減少損失的難度來自于鞍點(diǎn),而非局部極小值。

AI前線:鞍點(diǎn)是梯度接近于0的點(diǎn),在誤差曲面中既不是最大值也不是最小值的平滑曲面,則一般結(jié)果表現(xiàn)為性能比較差;如果該駐點(diǎn)是局部極小值,那么表現(xiàn)為性能較好,但不是全局最優(yōu)值。

誤差曲面中的鞍點(diǎn)。鞍點(diǎn)是函數(shù)的導(dǎo)數(shù)變?yōu)榱愕c(diǎn)不是所有軸上的局部極值的點(diǎn)。(圖片來源:safaribooksonline) 

那么我們?cè)撊绾螖[脫呢?

有幾個(gè)選項(xiàng)我們可以考慮。一般來說,從[1]引用一句:

……而不是使用一個(gè)固定值的學(xué)習(xí)率,并隨著時(shí)間的推移而降低,如果訓(xùn)練不會(huì)改善我們的損失,我們將根據(jù)一些循環(huán)函數(shù)f來改變每次迭代的學(xué)習(xí)率。每個(gè)周期的迭代次數(shù)都是固定的。這種方法讓學(xué)習(xí)率在合理的邊界值之間循環(huán)變化。這有助于解決問題,因?yàn)槿绻覀儽焕г诎包c(diǎn)上,提高學(xué)習(xí)率可以更快速地穿越鞍點(diǎn)。

在[2]中,Leslie提出了一種“Triangular”的方法,在每次迭代之后,學(xué)習(xí)率都會(huì)重新開始。

Leslie N. Smith提出的“Triangular”和“Triangular2”循環(huán)學(xué)習(xí)率的方法。在左邊的圖上,min和max lr保持不變。在右邊,每個(gè)周期之后的差異減半。

另一種同樣受歡迎的方法是由Loshchilov和Hutter提出的熱重啟的隨機(jī)梯度下降法(Stochastic Gradient Descent with Warm Restarts,SGDR)[6]。這種方法主要利用余弦函數(shù)作為循環(huán)函數(shù),并在每個(gè)周期的最大值重新開始學(xué)習(xí)率。“熱重啟”一詞源于這樣的一個(gè)事實(shí):當(dāng)學(xué)習(xí)率重新開始的時(shí)候,并不是從頭開始,而是來自模型在上一步收斂的參數(shù)開始[7]。

AI前線:熱重啟后的初始高學(xué)習(xí)率用于基本上將參數(shù)從它們先前收斂的最小值彈射到不同的損失表面。根據(jù)經(jīng)驗(yàn),熱重啟的隨機(jī)梯度下降法需要的時(shí)間比學(xué)習(xí)率退火要少2~4倍,且能達(dá)到相當(dāng)或更好的性能。

雖然有這種變化,下面的圖表展示了它的一個(gè)實(shí)現(xiàn),其中每個(gè)周期都被設(shè)置為同一時(shí)間周期。

SGDR圖,學(xué)習(xí)率與迭代。

因此,我們現(xiàn)在有一種減少訓(xùn)練時(shí)間的方法,基本上就是周期性地在“山脈”周圍跳躍(下圖)。

比較固定學(xué)習(xí)率和循環(huán)學(xué)習(xí)率(圖片來源:ruder.io)

除了節(jié)省時(shí)間外,研究還表明,使用這些方法往往可以提高分類準(zhǔn)確性,而無需進(jìn)行調(diào)優(yōu),而且可以在更少的迭代次數(shù)內(nèi)完成。


遷移學(xué)習(xí)(Transfer Learning)中的學(xué)習(xí)率

在fast.ai課程中,在解決AI問題時(shí),非常重視利用預(yù)先訓(xùn)練的模型。例如,在解決圖像分類問題時(shí),教授學(xué)生如何使用預(yù)先訓(xùn)練好的模型,如VGG或Resnet50,并將其連接到想要預(yù)測(cè)的任何圖像數(shù)據(jù)集。

總結(jié)如何在fast.ai中完成模型構(gòu)建(注意該程序不要與fast.ai深度學(xué)習(xí)庫(kù)混淆),下面是我們通常采取的幾個(gè)步驟[8]:

1. 啟用數(shù)據(jù)增強(qiáng),precompute=True。
2. 使用 lr_find()查找最高的學(xué)習(xí)率,在此情況下,損失仍在明顯改善。
3. 訓(xùn)練最后一層從預(yù)計(jì)算激活1~2個(gè)輪數(shù)。
4. 在cycle_len=1的情況下訓(xùn)練最后一層數(shù)據(jù)增加(即precompute=False)2~3個(gè)輪數(shù)。
5. 解除所有層的凍結(jié)。
6. 將較早的層設(shè)置為比下一個(gè)較高層低3~10倍的學(xué)習(xí)率。
7. 再次使用lr_find()
8. 使用cycle_mult=2訓(xùn)練完整網(wǎng)絡(luò),直到過度擬合。

從上面的步驟中,我們注意到第2步、第5步和第7步關(guān)注了學(xué)習(xí)率。在這篇文章的前半部分,我們已經(jīng)基本討論了涵蓋了上述步驟中的第2項(xiàng)——我們?cè)谶@里討論了如何在訓(xùn)練模型之前得出最佳學(xué)習(xí)率。

AI前線:輪數(shù),epoch,即對(duì)所有訓(xùn)練數(shù)據(jù)的一輪遍歷。

在接下來的部分中,我們通過使用SGDR來了解如何通過重新開始學(xué)習(xí)速率來減少訓(xùn)練時(shí)間和提高準(zhǔn)確性,以避免梯度接近于0的區(qū)域。

在最后一節(jié)中,我們將重點(diǎn)討論差分學(xué)習(xí),以及它是如何被用來在訓(xùn)練模型與預(yù)先訓(xùn)練的模型相結(jié)合時(shí)確定學(xué)習(xí)率的。

什么是差分學(xué)習(xí)?

這是一種在訓(xùn)練期間為網(wǎng)絡(luò)中的不同層設(shè)置不同的學(xué)習(xí)率的方法。這與人們通常如何配置學(xué)習(xí)率相反,即在訓(xùn)練期間在整個(gè)網(wǎng)絡(luò)中使用相同的速率。

這是我為什么喜歡Twitter的原因之一——可以直接從作者本人得到答案。

在寫這篇文章的時(shí)候,Jeremy和Sebastian Ruder發(fā)表了一篇論文,深入探討了這個(gè)話題。所以我估計(jì)差分學(xué)習(xí)率現(xiàn)在有一個(gè)新的名字:判別式微調(diào)(discriminative fine-tuning)。 :)

AI前線:判別式微調(diào)對(duì)較底層進(jìn)行微調(diào)以調(diào)到一個(gè)相較于較高層較低的程度,從而保留通過語言建模所獲得的的知識(shí)。它可以避免微調(diào)過程中產(chǎn)生嚴(yán)重的遺忘。

為了更清楚地說明這個(gè)概念,我們可以參考下圖,其中一個(gè)預(yù)訓(xùn)練模型被分成3個(gè)組,每個(gè)組都配置了一個(gè)遞增的學(xué)習(xí)率值。

差分學(xué)習(xí)率的CNN樣本。圖片來自[3]

這種配置方法背后的直覺是,最初的幾層通常包含數(shù)據(jù)的非常細(xì)粒度的細(xì)節(jié),如線條和邊緣——我們通常不希望改變太多,并且保留它的信息。因此,沒有太多的需要去大量改變它們的權(quán)重。

相比之下,在后面的層中,比如上面綠色的層——我們可以獲得眼球或嘴巴或鼻子等數(shù)據(jù)的詳細(xì)特征;我們可能不一定要保留它們。

與其他微調(diào)方法相比,它表現(xiàn)如何?

在[9]中,有

大云網(wǎng)官方微信售電那點(diǎn)事兒

責(zé)任編輯:售電衡衡

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
我要收藏
個(gè)贊
?
主站蜘蛛池模板: 日韩欧美亚州 | 欧美一级毛片免费看高清 | 亚洲欧美另类日本久久影院 | a毛片全部播放免费视频完整18 | 亚洲精品国产综合久久一线 | 高颜值美女啪啪 | 亚洲一区二区三区国产精品 | 精品国产免费观看 | 久久是精品 | 播放一级毛片 | 国产精品揄拍一区二区久久 | 日本三级香港三级三级人 | 毛片免费观看久久欧美 | 国产在线精品一区二区 | 日本久久99 | 久热香蕉精品视频在线播放 | 国产va精品网站精品网站精品 | 欧美一级www毛片 | 国产成人十八黄网片 | 国产亚洲精品久久精品6 | 日本aaa视频| 成人牲交一极毛片 | 免费久草| 72种姿势欧美久久久久大黄蕉 | 大片刺激免费播放视频 | 干欧美女人 | 久久福利青草精品资源 | 国产美女高清一级a毛片 | 亚洲国产天堂久久综合网站 | 99看视频| 久久亚洲国产的中文 | 美国一级片在线 | 国产一线视频在线观看高清 | 国产免费久久精品99re丫y | 久久在线免费观看 | 成人自拍网站 | 很黄很暴力深夜爽爽无遮挡 | 7777在线视频 | 性感一级毛片 | 亚欧国产 | 欧美精品国产制服第一页 |