1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        稱霸Kaggle的十大深度學(xué)習(xí)技巧!

        共 7992字,需瀏覽 16分鐘

         ·

        2022-04-30 11:46

        作者:Samuel Lynn-Evans,來源:量子位
        Datawhale

        是什么秘訣讓新手們?cè)诙唐趦?nèi)快速掌握并能構(gòu)建最先進(jìn)的DL算法?一位名叫塞繆爾(Samuel Lynn-Evans)的法國學(xué)員總結(jié)了十條經(jīng)驗(yàn)。

        他這篇文章發(fā)表在FloydHub官方博客上,因?yàn)槌藖碜訤ast.ai的技巧之外,他還用了FloydHub的免設(shè)置深度學(xué)習(xí)GPU云平臺(tái)。

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

        1. 使用Fast.ai庫

        這一條最為簡(jiǎn)單直接。

        from?fast.ai?import?*??

        Fast.ai庫是一個(gè)新手友好型的深度學(xué)習(xí)工具箱,而且是目前復(fù)現(xiàn)最新算法的首要之選。

        每當(dāng)Fast.ai團(tuán)隊(duì)及AI研究者發(fā)現(xiàn)一篇有趣論文時(shí),會(huì)在各種數(shù)據(jù)集上進(jìn)行測(cè)試,并確定合適的調(diào)優(yōu)方法。他們會(huì)把效果較好的模型實(shí)現(xiàn)加入到這個(gè)函數(shù)庫中,用戶可以快速載入這些模型。

        于是,F(xiàn)ast.ai庫成了一個(gè)功能強(qiáng)大的工具箱,能夠快速載入一些當(dāng)前最新的算法實(shí)現(xiàn),如帶重啟的隨機(jī)梯度下降算法、差分學(xué)習(xí)率和測(cè)試時(shí)增強(qiáng)等等,這里不逐一提及了。

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

        這個(gè)函數(shù)庫是基于PyTorch構(gòu)建,構(gòu)建模型時(shí)可以流暢地使用。

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

        2. 使用多個(gè)而不是單一學(xué)習(xí)率

        差分學(xué)習(xí)率(Differential Learning rates)意味著在訓(xùn)練時(shí)變換網(wǎng)絡(luò)層比提高網(wǎng)絡(luò)深度更重要。

        基于已有模型來訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò),這是一種被驗(yàn)證過很可靠的方法,可以在計(jì)算機(jī)視覺任務(wù)中得到更好的效果。

        大部分已有網(wǎng)絡(luò)(如Resnet、VGG和Inception等)都是在ImageNet數(shù)據(jù)集訓(xùn)練的,因此我們要根據(jù)所用數(shù)據(jù)集與ImageNet圖像的相似性,來適當(dāng)改變網(wǎng)絡(luò)權(quán)重。

        在修改這些權(quán)重時(shí),我們通常要對(duì)模型的最后幾層進(jìn)行修改,因?yàn)檫@些層被用于檢測(cè)基本特征(如邊緣和輪廓),不同數(shù)據(jù)集有著不同基本特征。

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

        from?fastai.conv_learner?import?*

        #?import?library?for?creating?learning?object?for?convolutional?#networks
        model?=?VVG16()

        #?assign?model?to?resnet,?vgg,?or?even?your?own?custom?model
        PATH?=?'./folder_containing_images'?
        data?=?ImageClassifierData.from_paths(PATH)

        #?create?fast?ai?data?object,?in?this?method?we?use?from_paths?where?
        #?inside?PATH?each?image?class?is?separated?into?different?folders

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

        #?create?a?learn?object?to?quickly?utilise?state?of?the?art
        #?techniques?from?the?fast?ai?library

        創(chuàng)建學(xué)習(xí)對(duì)象之后(learn object),通過快速凍結(jié)前面網(wǎng)絡(luò)層并微調(diào)后面網(wǎng)絡(luò)層來解決問題:

        learn.freeze()

        #?freeze?layers?up?to?the?last?one,?so?weights?will?not?be?updated.

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

        #?train?only?the?last?layer?for?a?few?epochs

        當(dāng)后面網(wǎng)絡(luò)層產(chǎn)生了良好效果,我們會(huì)應(yīng)用差分學(xué)習(xí)率來改變前面網(wǎng)絡(luò)層。在實(shí)際中,一般將學(xué)習(xí)率的縮小倍數(shù)設(shè)置為10倍:

        learn.unfreeze()

        #?set?requires_grads?to?be?True?for?all?layers,?so?they?can?be?updated

        learning_rate?=?[0.001,?0.01,?0.1]
        #?learning?rate?is?set?so?that?deepest?third?of?layers?have?a?rate?of?0.001,?#?middle?layers?have?a?rate?of?0.01,?and?final?layers?0.1.

        learn.fit(learning_rate,?epochs=3)
        #?train?model?for?three?epoch?with?using?differential?learning?rates

        3. 如何找到合適的學(xué)習(xí)率

        學(xué)習(xí)率是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中最重要的超參數(shù),沒有之一,但之前在實(shí)際應(yīng)用中很難為神經(jīng)網(wǎng)絡(luò)選擇最佳的學(xué)習(xí)率。

        Leslie Smith的一篇周期性學(xué)習(xí)率論文發(fā)現(xiàn)了答案,這是一個(gè)相對(duì)不知名的發(fā)現(xiàn),直到它被Fast.ai課程推廣后才逐漸被廣泛使用。

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

        https://arxiv.org/abs/1506.01186

        在這種方法中,我們嘗試使用較低學(xué)習(xí)率來訓(xùn)練神經(jīng)網(wǎng)絡(luò),但是在每個(gè)批次中以指數(shù)形式增加,相應(yīng)代碼如下:

        learn.lr_find()
        #?run?on?learn?object?where?learning?rate?is?increased??exponentially

        learn.sched.plot_lr()
        #?plot?graph?of?learning?rate?against?iterations
        △ 每次迭代后學(xué)習(xí)率以指數(shù)形式增長(zhǎng)

        同時(shí),記錄每個(gè)學(xué)習(xí)率對(duì)應(yīng)的Loss值,然后畫出學(xué)習(xí)率和Loss值的關(guān)系圖:

        learn.sched.plot()
        #?plots?the?loss?against?the?learning?rate
        △ 找出Loss值在下降但仍未穩(wěn)定的點(diǎn)

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

        4. 余弦退火

        在采用批次隨機(jī)梯度下降算法時(shí),神經(jīng)網(wǎng)絡(luò)應(yīng)該越來越接近Loss值的全局最小值。當(dāng)它逐漸接近這個(gè)最小值時(shí),學(xué)習(xí)率應(yīng)該變得更小來使得模型不會(huì)超調(diào)且盡可能接近這一點(diǎn)。

        余弦退火(Cosine annealing)利用余弦函數(shù)來降低學(xué)習(xí)率,進(jìn)而解決這個(gè)問題,如下圖所示:

        △ 余弦值隨著x增大而減小

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

        learn.fit(0.1,?1)
        #?Calling?learn?fit?automatically?takes?advantage?of?cosine?annealing

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

        △ 在一個(gè)需要200次迭代的周期中學(xué)習(xí)率不斷降低

        同時(shí),在這種方法基礎(chǔ)上,我們可以進(jìn)一步引入重啟機(jī)制。

        5. 帶重啟的SGD算法

        在訓(xùn)練時(shí),梯度下降算法可能陷入局部最小值,而不是全局最小值。

        △ 陷入局部最小值的梯度下降算法

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

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

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

        每當(dāng)學(xué)習(xí)率下降到最小點(diǎn),在上圖中為每100次迭代,我們稱為一個(gè)循環(huán)。

        cycle_len?=?1
        #?decide?how?many?epochs?it?takes?for?the?learning?rate?to?fall?to
        #?its?minimum?point.?In?this?case,?1?epoch

        cycle_mult=2
        #?at?the?end?of?each?cycle,?multiply?the?cycle_len?value?by?2

        learn.fit(0.1,?3,?cycle_len=2,?cycle_mult=2)
        #?in?this?case?there?will?be?three?restarts.?The?first?time?with
        #?cycle_len?of?1,?so?it?will?take?1?epoch?to?complete?the?cycle.
        #?cycle_mult=2?so?the?next?cycle?with?have?a?length?of?two?epochs,?
        #?and?the?next?four.
        △ 每個(gè)循環(huán)所包含的周期都是上一個(gè)循環(huán)的2倍

        利用這些參數(shù),和使用差分學(xué)習(xí)率,這些技巧是Fast.ai用戶在圖像分類問題上取得良好效果的關(guān)鍵。

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

        更多關(guān)于學(xué)習(xí)率的詳細(xì)內(nèi)容可參考這個(gè)Fast.ai課程:
        http://course.fast.ai/lessons/lesson2.html

        6. 人格化你的激活函數(shù)

        Softmax只喜歡選擇一樣?xùn)|西;

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

        Relu是一名俱樂部保鏢,要將負(fù)數(shù)拒之門外。

        ……

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

        正如fast.ai創(chuàng)始人Jeremy Howard指出,不少學(xué)術(shù)論文中也把Softmax函數(shù)用在多分類問題中。在DL學(xué)習(xí)過程中,我也看到它在論文和博客中多次使用不當(dāng)。

        7. 遷移學(xué)習(xí)在NLP問題中非常有效

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

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

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

        △ 預(yù)先存在的架構(gòu)提供了最先進(jìn)的NLP性能

        這個(gè)模型的關(guān)鍵在于先訓(xùn)練模型來獲得對(duì)語言的一些理解,然后再使用這種預(yù)訓(xùn)練好的模型作為新模型的一部分來分析情緒。

        為了創(chuàng)建第一個(gè)模型,我們訓(xùn)練了一個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)來預(yù)測(cè)文本序列中的下個(gè)單詞,這稱為語言建模。當(dāng)訓(xùn)練后網(wǎng)絡(luò)的準(zhǔn)確率達(dá)到一定值,它對(duì)每個(gè)單詞的編碼模式就會(huì)傳遞給用于情感分析的新模型。

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

        而且,計(jì)算機(jī)視覺中的一些技巧,也同樣適用于此,如上面提到的凍結(jié)網(wǎng)絡(luò)層和使用差分學(xué)習(xí)率,在這里也能取得更好的效果。

        這種方法在NLP任務(wù)上的使用涉及很多細(xì)節(jié),這里就不貼出代碼了,可訪問相應(yīng)課程和代碼。

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

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

        8. 深度學(xué)習(xí)在處理結(jié)構(gòu)化數(shù)據(jù)上的優(yōu)勢(shì)

        Fast.ai課程中展示了深度學(xué)習(xí)在處理結(jié)構(gòu)化數(shù)據(jù)上的突出表現(xiàn),且無需借助特征工程以及領(lǐng)域內(nèi)的特定知識(shí)。

        這個(gè)庫充分利用了PyTorch中embedding函數(shù),允許將分類變量快速轉(zhuǎn)換為嵌入矩陣。

        他們展示出的技術(shù)比較簡(jiǎn)單直接,只需將分類變量轉(zhuǎn)換為數(shù)字,然后為每個(gè)值分配嵌入向量:

        △ 一周中的每一天都嵌入了四個(gè)值

        在這類任務(wù)上,傳統(tǒng)做法是創(chuàng)建虛擬變量,即進(jìn)行一次熱編碼。與之相比,這種方式的優(yōu)點(diǎn)是用四個(gè)數(shù)值代替一個(gè)數(shù)值來描述每一天,因此可獲得更高的數(shù)據(jù)維度和更豐富的關(guān)系。

        這種方法在Rossman Kaggle比賽中獲得第三名,惜敗于兩位利用專業(yè)知識(shí)來創(chuàng)建許多額外特征的領(lǐng)域?qū)<摇?/p>

        相關(guān)課程:
        http://course.fast.ai/lessons/lesson4.html

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

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

        9. 更多內(nèi)置函數(shù):Dropout層、尺寸設(shè)置、TTA

        4月30日,F(xiàn)ast.ai團(tuán)隊(duì)在斯坦福大學(xué)舉辦的DAWNBench競(jìng)賽中,贏得了基于Imagenet和CIFAR10的分類任務(wù)。在Jeremy的奪冠總結(jié)中,他將這次成功歸功于fast.ai庫中的一些額外函數(shù)。

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

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

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

        然而,PyTorch庫使它的實(shí)現(xiàn)變得很簡(jiǎn)單,用Fast.ai庫加載它就更容易了。

        △ 空格表示Dropout函數(shù)的作用點(diǎn)

        Dropout函數(shù)能減弱過擬合效應(yīng),因此要在CIFAR-10這樣一個(gè)相對(duì)較小的數(shù)據(jù)集上取勝,這點(diǎn)很重要。在創(chuàng)建learn對(duì)象時(shí),F(xiàn)ast.ai庫會(huì)自動(dòng)加入dropout函數(shù),同時(shí)可使用ps變量來修改參數(shù),如下所示:

        learn?=?ConvLearner.pretrained(model,?data,?ps=0.5,?precompute=True)
        #?creates?a?dropout?of?0.5?(i.e.?half?the?activations)?on?test?dataset.?
        #?This?is?automatically?turned?off?for?the?validation?set

        有一種很簡(jiǎn)單有效的方法,經(jīng)常用來處理過擬合效應(yīng)和提高準(zhǔn)確性,它就是訓(xùn)練小尺寸圖像,然后增大尺寸再次訓(xùn)練相同模型。

        #?create?a?data?object?with?images?of?sz?*?sz?pixels?
        def?get_data(sz):?
        ????tmfs?=?tfms_from_model(model,?sz)
        ????#?tells?what?size?images?should?be,?additional?transformations?such
        ????#?image?flips?and?zooms?can?easily?be?added?here?too

        ????data?=?ImageClassifierData.from_paths(PATH,?tfms=tfms)
        ????#?creates?fastai?data?object?of?create?size

        ????return?data

        learn.set_data(get_data(299))
        #?changes?the?data?in?the?learn?object?to?be?images?of?size?299
        #?without?changing?the?model.

        learn.fit(0.1,?3)
        #?train?for?a?few?epochs?on?larger?versions?of?images,?avoiding?overfitting

        還有一種先進(jìn)技巧,可將準(zhǔn)確率提高若干個(gè)百分點(diǎn),它就是測(cè)試時(shí)增強(qiáng)(test time augmentation,?TTA)。這里會(huì)為原始圖像造出多個(gè)不同版本,包括不同區(qū)域裁剪和更改縮放程度等,并將它們輸入到模型中;然后對(duì)多個(gè)版本進(jìn)行計(jì)算得到平均輸出,作為圖像的最終輸出分?jǐn)?shù),可調(diào)用learn.TTA()來使用該算法。

        preds,?target?=?learn.TTA()

        這種技術(shù)很有效,因?yàn)樵紙D像顯示的區(qū)域可能會(huì)缺少一些重要特征,在模型中輸入圖像的多個(gè)版本并取平均值,能解決上述問題。

        10. 創(chuàng)新力很關(guān)鍵

        在DAWNBench比賽中,F(xiàn)ast.ai團(tuán)隊(duì)提出的模型不僅速度最快,而且計(jì)算成本低。要明白,要構(gòu)建成功的DL應(yīng)用,不只是一個(gè)利用大量GPU資源的計(jì)算任務(wù),而應(yīng)該是一個(gè)需要?jiǎng)?chuàng)造力、直覺和創(chuàng)新力的問題。

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

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

        事實(shí)上,有時(shí)計(jì)算力的局限也是一種機(jī)會(huì),因?yàn)樾枨笫莿?chuàng)新的動(dòng)力源泉。

        關(guān)于作者

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

        原文:https://blog.floydhub.com/ten-techniques-from-fast-ai/

        老表薦書

        圖書介紹人工智能算法基礎(chǔ)

        (1)零基礎(chǔ)也能快速入門。本書從最基礎(chǔ)的算法基礎(chǔ)講起,由淺入深,層層遞進(jìn),在鞏固固有知識(shí)的同時(shí)深入講解人工智能的算法原理,無論讀者是否從事計(jì)算機(jī)相關(guān)行業(yè),是否接觸過人工智能,都能通過本書實(shí)現(xiàn)快速入門。

        (2)理論和實(shí)踐相結(jié)合。每章最后提供根據(jù)所在章的理論知識(shí)點(diǎn)精心設(shè)計(jì)的“應(yīng)用”,讀者可以通過應(yīng)用實(shí)例進(jìn)行實(shí)踐操作,為以后的算法學(xué)習(xí)奠定基礎(chǔ)。

        (3)大量范例源碼+習(xí)題答案,為學(xué)習(xí)排憂解難。本書所有示例都有清晰完整的源碼,每章之后設(shè)有習(xí)題并配套題目答案,講解清晰,解決讀者在學(xué)習(xí)中的所有困惑。

        點(diǎn)擊下方小程序直接購買學(xué)習(xí)

        我們的文章到此就結(jié)束啦~記得點(diǎn)贊

        如何找到我

        瀏覽 39
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品人妻无码一区二区三区91电影 | 被公牛日到了高潮爽文 | 亚洲激情视频在线观看 | 免费 无码 精品 国产76在线 | 黄色.wwww | 成 人 黄 色 片 在线播放 | 91人妻无码一区二区三区 | 国产不卡一区二区视频 | 天天色天天射天天干 | wwwbaidu |