<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何快速掌握并能構建最先進的DL算法

新機器視覺 ? 來源:量子位 ? 作者:Samuel Lynn-Evans ? 2022-04-13 08:35 ? 次閱讀

導讀

是什么秘訣讓新手們在短期內快速掌握并能構建最先進的DL算法?一位名叫塞繆爾的法國學員總結了十條經驗。

在各種Kaggle競賽的排行榜上,都有不少剛剛進入深度學習領域的程序員,其中大部分有一個共同點:

都上過Fast.ai的課程。

這些免費、重實戰的課程非常鼓勵學生去參加Kaggle競賽,檢驗自己的能力。當然,也向學生們傳授了不少稱霸Kaggle的深度學習技巧。

是什么秘訣讓新手們在短期內快速掌握并能構建最先進的DL算法?一位名叫塞繆爾(Samuel Lynn-Evans)的法國學員總結了十條經驗。

他這篇文章發表在FloydHub官方博客上,因為除了來自Fast.ai的技巧之外,他還用了FloydHub的免設置深度學習GPU云平臺。

接下來,我們看看他從fast.ai學來的十大技藝:

1. 使用Fast.ai庫

這一條最為簡單直接。

fromfast.aiimport*

Fast.ai庫是一個新手友好型的深度學習工具箱,而且是目前復現最新算法的首要之選。

每當Fast.ai團隊及AI研究者發現一篇有趣論文時,會在各種數據集上進行測試,并確定合適的調優方法。他們會把效果較好的模型實現加入到這個函數庫中,用戶可以快速載入這些模型。

于是,Fast.ai庫成了一個功能強大的工具箱,能夠快速載入一些當前最新的算法實現,如帶重啟的隨機梯度下降算法、差分學習率和測試時增強等等,這里不逐一提及了。

下面會分別介紹這些技術,并展示如何使用Fast.ai庫來快速使用它們。

這個函數庫是基于PyTorch構建,構建模型時可以流暢地使用。

Fast.ai庫地址:
https://github.com/fastai/fastai

2. 使用多個而不是單一學習率

如何快速掌握并能構建最先進的DL算法

差分學習率(Differential Learning rates)意味著在訓練時變換網絡層比提高網絡深度更重要。

基于已有模型來訓練深度學習網絡,這是一種被驗證過很可靠的方法,可以在計算機視覺任務中得到更好的效果。

大部分已有網絡(如Resnet、VGG和Inception等)都是在ImageNet數據集訓練的,因此我們要根據所用數據集與ImageNet圖像的相似性,來適當改變網絡權重。

在修改這些權重時,我們通常要對模型的最后幾層進行修改,因為這些層被用于檢測基本特征(如邊緣和輪廓),不同數據集有著不同基本特征。

首先,要使用Fast.ai庫來獲得預訓練的模型,代碼如下:

fromfastai.conv_learnerimport*

#importlibraryforcreatinglearningobjectforconvolutional#networks
model=VVG16()

#assignmodeltoresnet,vgg,orevenyourowncustommodel
PATH='./folder_containing_images'
data=ImageClassifierData.from_paths(PATH)

#createfastaidataobject,inthismethodweusefrom_pathswhere
#insidePATHeachimageclassisseparatedintodifferentfolders

learn=ConvLearner.pretrained(model,data,precompute=True)

#createalearnobjecttoquicklyutilisestateoftheart
#techniquesfromthefastailibrary

創建學習對象之后(learn object),通過快速凍結前面網絡層并微調后面網絡層來解決問題:

learn.freeze()

#freezelayersuptothelastone,soweightswillnotbeupdated.

learning_rate=0.1
learn.fit(learning_rate,epochs=3)

#trainonlythelastlayerforafewepochs

當后面網絡層產生了良好效果,我們會應用差分學習率來改變前面網絡層。在實際中,一般將學習率的縮小倍數設置為10倍:

learn.unfreeze()

#setrequires_gradstobeTrueforalllayers,sotheycanbeupdated

learning_rate=[0.001,0.01,0.1]
#learningrateissetsothatdeepestthirdoflayershavearateof0.001,#middlelayershavearateof0.01,andfinallayers0.1.

learn.fit(learning_rate,epochs=3)
#trainmodelforthreeepochwithusingdifferentiallearningrates

3. 如何找到合適的學習率

學習率是神經網絡訓練中最重要的超參數,沒有之一,但之前在實際應用中很難為神經網絡選擇最佳的學習率。

Leslie Smith的一篇周期性學習率論文發現了答案,這是一個相對不知名的發現,直到它被Fast.ai課程推廣后才逐漸被廣泛使用。

這篇論文是:Cyclical Learning Rates for Training Neural Networks

https://arxiv.org/abs/1506.01186

在這種方法中,我們嘗試使用較低學習率來訓練神經網絡,但是在每個批次中以指數形式增加,相應代碼如下:

learn.lr_find()
#runonlearnobjectwherelearningrateisincreasedexponentially

learn.sched.plot_lr()
#plotgraphoflearningrateagainstiterations
如何快速掌握并能構建最先進的DL算法△ 每次迭代后學習率以指數形式增長

同時,記錄每個學習率對應的Loss值,然后畫出學習率和Loss值的關系圖:

learn.sched.plot()
#plotsthelossagainstthelearningrate
如何快速掌握并能構建最先進的DL算法△ 找出Loss值在下降但仍未穩定的點

通過找出學習率最高且Loss值仍在下降的值來確定最佳學習率。在上述情況中,該值將為0.01。

4. 余弦退火

在采用批次隨機梯度下降算法時,神經網絡應該越來越接近Loss值的全局最小值。當它逐漸接近這個最小值時,學習率應該變得更小來使得模型不會超調且盡可能接近這一點。

余弦退火(Cosine annealing)利用余弦函數來降低學習率,進而解決這個問題,如下圖所示:

如何快速掌握并能構建最先進的DL算法△ 余弦值隨著x增大而減小

從上圖可以看出,隨著x的增加,余弦值首先緩慢下降,然后加速下降,再次緩慢下降。這種下降模式能和學習率配合,以一種十分有效的計算方式來產生很好的效果。

learn.fit(0.1,1)
#Callinglearnfitautomaticallytakesadvantageofcosineannealing

我們可以用Fast.ai庫中的**learn.fit()**函數,來快速實現這個算法,在整個周期中不斷降低學習率,如下圖所示:

如何快速掌握并能構建最先進的DL算法△ 在一個需要200次迭代的周期中學習率不斷降低

同時,在這種方法基礎上,我們可以進一步引入重啟機制。

5. 帶重啟的SGD算法

在訓練時,梯度下降算法可能陷入局部最小值,而不是全局最小值。

如何快速掌握并能構建最先進的DL算法△ 陷入局部最小值的梯度下降算法

梯度下降算法可以通過突然提高學習率,來“跳出”局部最小值并找到通向全局最小值的路徑。這種方式稱為帶重啟的隨機梯度下降方法(stochastic gradient descent with restarts,SGDR),這個方法在Loshchilov和Hutter的ICLR論文中展示出了很好的效果。

這篇論文是:SGDR: Stochastic Gradient Descent with Warm Restarts
https://arxiv.org/abs/1608.03983

用Fast.ai庫可以快速導入SGDR算法。當調用learn.fit(learning_rate, epochs)函數時,學習率在每個周期開始時重置為參數輸入時的初始值,然后像上面余弦退火部分描述的那樣,逐漸減小。

如何快速掌握并能構建最先進的DL算法

每當學習率下降到最小點,在上圖中為每100次迭代,我們稱為一個循環。

cycle_len=1
#decidehowmanyepochsittakesforthelearningratetofallto
#itsminimumpoint.Inthiscase,1epoch

cycle_mult=2
#attheendofeachcycle,multiplythecycle_lenvalueby2

learn.fit(0.1,3,cycle_len=2,cycle_mult=2)
#inthiscasetherewillbethreerestarts.Thefirsttimewith
#cycle_lenof1,soitwilltake1epochtocompletethecycle.
#cycle_mult=2sothenextcyclewithhavealengthoftwoepochs,
#andthenextfour.
如何快速掌握并能構建最先進的DL算法△ 每個循環所包含的周期都是上一個循環的2倍

利用這些參數,和使用差分學習率,這些技巧是Fast.ai用戶在圖像分類問題上取得良好效果的關鍵。

Fast.ai論壇有個帖子專門討論Cycle_mult和cycle_len函數,地址在這里:
http://forums.fast.ai/t/understanding-cycle-len-and-cycle-mult/9413/8

更多關于學習率的詳細內容可參考這個Fast.ai課程:
http://course.fast.ai/lessons/lesson2.html

6. 人格化你的激活函數

Softmax只喜歡選擇一樣東西;

Sigmoid想知道你在[-1, 1]區間上的位置,并不關心你超出這些值后的增加量;

Relu是一名俱樂部保鏢,要將負數拒之門外。

……

以這種思路對待激活函數,看起來很愚蠢,但是安排一個角色后能確保把他們用到正確任務中。

正如fast.ai創始人Jeremy Howard指出,不少學術論文中也把Softmax函數用在多分類問題中。在DL學習過程中,我也看到它在論文和博客中多次使用不當。

7. 遷移學習在NLP問題中非常有效

正如預訓練好的模型在計算機視覺任務中很有效一樣,已有研究表明,自然語言處理(NLP)模型也可以從這種方法中受益。

在Fast.ai第4課中,Jeremy Howard用遷移學習方法建立了一個模型,來判斷IMDB上的電影評論是積極的還是消極的。

這種方法的效果立竿見影,他所達到的準確率超過了Salesforce論文中展示的所有先前模型:
https://einstein.ai/research/learned-in-translation-contextualized-word-vectors。

如何快速掌握并能構建最先進的DL算法△ 預先存在的架構提供了最先進的NLP性能

這個模型的關鍵在于先訓練模型來獲得對語言的一些理解,然后再使用這種預訓練好的模型作為新模型的一部分來分析情緒。

為了創建第一個模型,我們訓練了一個循環神經網絡(RNN)來預測文本序列中的下個單詞,這稱為語言建模。當訓練后網絡的準確率達到一定值,它對每個單詞的編碼模式就會傳遞給用于情感分析的新模型。

在上面的例子中,我們看到這個語言模型與另一個模型集成后用于情感分析,但是這種方法可以應用到其他任何NLP任務中,包括翻譯數據提取。

而且,計算機視覺中的一些技巧,也同樣適用于此,如上面提到的凍結網絡層和使用差分學習率,在這里也能取得更好的效果。

這種方法在NLP任務上的使用涉及很多細節,這里就不貼出代碼了,可訪問相應課程和代碼。

課程:
http://course.fast.ai/lessons/lesson4.html

代碼:https://github.com/fastai/fastai/blob/master/courses/dl1/lesson4-imdb.ipynb

8. 深度學習在處理結構化數據上的優勢

Fast.ai課程中展示了深度學習在處理結構化數據上的突出表現,且無需借助特征工程以及領域內的特定知識。

這個庫充分利用了PyTorch中embedding函數,允許將分類變量快速轉換為嵌入矩陣。

他們展示出的技術比較簡單直接,只需將分類變量轉換為數字,然后為每個值分配嵌入向量:

如何快速掌握并能構建最先進的DL算法△ 一周中的每一天都嵌入了四個值

在這類任務上,傳統做法是創建虛擬變量,即進行一次熱編碼。與之相比,這種方式的優點是用四個數值代替一個數值來描述每一天,因此可獲得更高的數據維度和更豐富的關系。

這種方法在Rossman Kaggle比賽中獲得第三名,惜敗于兩位利用專業知識來創建許多額外特征的領域專家。

相關課程:
http://course.fast.ai/lessons/lesson4.html

代碼:
https://github.com/fastai/fastai/blob/master/courses/dl1/lesson3-rossman.ipynb

這種用深度學習來減少對特征工程依賴的思路,也被Pinterest證實過。他也提到過,他們正努力通過深度學習模型,期望用更少的工作量來獲得更好的效果。

9. 更多內置函數:Dropout層、尺寸設置、TTA

4月30日,Fast.ai團隊在斯坦福大學舉辦的DAWNBench競賽中,贏得了基于Imagenet和CIFAR10的分類任務。在Jeremy的奪冠總結中,他將這次成功歸功于fast.ai庫中的一些額外函數。

其中之一是Dropout層,由Geoffrey Hinton兩年前在一篇開創性的論文中提出。它最初很受歡迎,但在最近的計算機視覺論文中似乎有所忽略。這篇論文是:

Dropout: A Simple Way to Prevent Neural Networks from Overfitting:

https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

然而,PyTorch庫使它的實現變得很簡單,用Fast.ai庫加載它就更容易了。

如何快速掌握并能構建最先進的DL算法△ 空格表示Dropout函數的作用點

Dropout函數能減弱過擬合效應,因此要在CIFAR-10這樣一個相對較小的數據集上取勝,這點很重要。在創建learn對象時,Fast.ai庫會自動加入dropout函數,同時可使用ps變量來修改參數,如下所示:

learn=ConvLearner.pretrained(model,data,ps=0.5,precompute=True)
#createsadropoutof0.5(i.e.halftheactivations)ontestdataset.
#Thisisautomaticallyturnedoffforthevalidationset

有一種很簡單有效的方法,經常用來處理過擬合效應和提高準確性,它就是訓練小尺寸圖像,然后增大尺寸再次訓練相同模型。

#createadataobjectwithimagesofsz*szpixels
defget_data(sz):
tmfs=tfms_from_model(model,sz)
#tellswhatsizeimagesshouldbe,additionaltransformationssuch
#imageflipsandzoomscaneasilybeaddedheretoo

data=ImageClassifierData.from_paths(PATH,tfms=tfms)
#createsfastaidataobjectofcreatesize

returndata

learn.set_data(get_data(299))
#changesthedatainthelearnobjecttobeimagesofsize299
#withoutchangingthemodel.

learn.fit(0.1,3)
#trainforafewepochsonlargerversionsofimages,avoidingoverfitting

還有一種先進技巧,可將準確率提高若干個百分點,它就是測試時增強(test time augmentation,TTA)。這里會為原始圖像造出多個不同版本,包括不同區域裁剪和更改縮放程度等,并將它們輸入到模型中;然后對多個版本進行計算得到平均輸出,作為圖像的最終輸出分數,可調用learn.TTA()來使用該算法。

preds,target=learn.TTA()

這種技術很有效,因為原始圖像顯示的區域可能會缺少一些重要特征,在模型中輸入圖像的多個版本并取平均值,能解決上述問題。

10. 創新力很關鍵

在DAWNBench比賽中,Fast.ai團隊提出的模型不僅速度最快,而且計算成本低。要明白,要構建成功的DL應用,不只是一個利用大量GPU資源的計算任務,而應該是一個需要創造力、直覺和創新力的問題。

本文中討論的一些突破,包括Dropout層、余弦退火和帶重啟的SGD方法等,實際上是研究者針對一些問題想到的不同解決方式。與簡單地增大訓練數據集相比,能更好地提升準確率。

硅谷的很多大公司有大量GPU資源,但是,不要認為他們的先進效果遙不可及,你也能靠創新力提出一些新思路,來挑戰效果排行榜。

事實上,有時計算力的局限也是一種機會,因為需求是創新的動力源泉。

關于作者

Samuel Lynn-Evans過去10年一直在教授生命科學課程,注意到機器學習在科學研究中的巨大潛力后,他開始在巴黎42學校學習人工智能,想將NLP技術應用到生物學和醫學問題中。

原文標題:關于作者

文章出處:【微信公眾號:機器視覺智能檢測】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    27

    文章

    4421

    瀏覽量

    126709
  • 算法
    +關注

    關注

    23

    文章

    4456

    瀏覽量

    90759
  • 深度學習
    +關注

    關注

    73

    文章

    5239

    瀏覽量

    119910

原文標題:關于作者

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    先進算法講義

    先進算法講義在本講義中,我們將著重講述一些數學建模中常用的算法,包括神經網絡算法、遺傳算法、模擬退火算法
    發表于 09-15 12:33

    基于PXI構建先進自動化測試系統

    基于PXI構建先進自動化測試系統
    發表于 10-18 10:30

    λ算法 - 瑞薩先進電機控制解決方案

    變得尤為重要。針對中國市場,瑞薩在積極推廣高性能,低功耗RX單片機的同時,還開發了完全自主知識產權的先進電機控制解決方案 - λ算法,用以構建高性能、高可靠性的永磁同步電動機的驅動解決方案,幫助客戶開發
    發表于 01-22 10:51

    最先進的數字CMOS圖像傳感器MIS1011(兼容AR0130)

    MIS1011 是最先進的130萬像素,數字CMOS圖像傳感器,兼容AR0130,特別在低照時要比APTINA的AR0130還要清晰。
    發表于 08-27 13:09

    TI-RTOS 2.12的最先進電源管理軟件

    今天,我們推出了TI-RTOS 2.12 —— 我們用來加快開發物聯網(IoT)應用的軟件平臺。對許多IoT應用而言,電池壽命均是一個關鍵的優劣區分因素,因此,TI-RTOS的最先進電源管理軟件使
    發表于 09-10 15:16

    安捷倫科技公司推出業界最先進的固定配置邏輯分析儀

    安捷倫科技公司推出業界最先進的固定配置邏輯分析儀
    發表于 09-29 10:20

    如何快速掌握一門技術

    ,以前學過的專業課程:編程類,電路類,傳感器類,嵌入式類,圖像處理類等非常重要。后悔當初沒有用心學了,才開始重視專業知識的學習。然后各種途徑尋找:如何快速掌握一門技術(專業、技能)?一部分自學能力強的人
    發表于 07-18 15:37

    掌握PID算法

    掌握PID算法?要深刻理解反饋機構和執行機構PID算法,不管是原理上,還是代碼上都比較簡單。主要運用在電機控制、開關電源、電源管理芯片等領域。 PID算法,不管是原理上,還是代碼上都比
    發表于 09-13 06:20

    什么是先進后出濾波算法?

    什么是先進后出濾波算法有沒有實例參考一下
    發表于 10-27 07:05

    先進算法講義

    各種算法的,如:神經網絡。蟻群算法,等一些先進算法。
    發表于 05-19 14:31 ?0次下載

    最先進的電池充電器

    voicor batmod最先進的電池充電器
    發表于 06-02 15:41 ?39次下載

    White博士:最先進算法與最專業的人類相結合有可能使社會更公正,更安全

    一項最新研究表明,專業人員在人臉識別上的表現仍優于機器,但將兩者結合起來可以取得近乎完美的結果?!叭四樧R別的準確度在很大程度上決定了我們能否生活在一個安全公正的社會中,” White博士說?!拔艺J為,最先進算法與最專業的人類相結合有可能使社會更公正,更安全?!?/div>
    的頭像 發表于 06-03 10:07 ?3397次閱讀

    高通最先進5G基帶芯片問世 號稱迄今最先進的調制解調器

    高通宣布推出第二代5G調制解調器驍龍X55,采用7納米工藝,號稱迄今最先進的調制解調器,目前已有30多款5G手機在研發,預計今年年底前問世。
    的頭像 發表于 02-21 15:19 ?4518次閱讀

    東芝模擬分叉算法最先進超算還要好

    計算效率是評判算法優劣的一個重要指標,然而日本著名跨國集團東芝近日聲稱,其打造了一套可比當今最先進的超算還要更快地分析市場數據的新算法。
    的頭像 發表于 01-17 15:34 ?2718次閱讀
    東芝模擬分叉<b class='flag-5'>算法</b>比<b class='flag-5'>最先進</b>超算還要好

    中國目前最先進的***是哪個?

    中國目前最先進的國產芯片是哪個呢?
    的頭像 發表于 05-29 09:44 ?1.9w次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>