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>

        【Deep Learning】深度學(xué)習(xí)調(diào)參技巧的總結(jié)

        共 10735字,需瀏覽 22分鐘

         ·

        2020-08-04 23:53


        編輯:Amusi ?|? 來(lái)源:知乎
        轉(zhuǎn)自:cver

        https://www.zhihu.com/question/25097993

        本文僅作為學(xué)術(shù)分享,如果侵權(quán),聯(lián)刪。


        深度學(xué)習(xí)調(diào)參有哪些技巧?


        深度學(xué)習(xí)的效果很大程度上取決于參數(shù)調(diào)節(jié)的好壞,那么怎么才能最快最好的調(diào)到合適的參數(shù)呢?求解


        作者:Jarvix
        https://www.zhihu.com/question/25097993/answer/153674495


        瀉藥


        只想說(shuō)一句:初始化


        一次慘痛的教訓(xùn)是用normal初始化cnn的參數(shù),最后acc只能到70%多,僅僅改成xavier,acc可以到98%。


        還有一次給word embedding初始化,最開(kāi)始使用了TensorFlow中默認(rèn)的initializer(即glorot_uniform_initializer,也就是大家經(jīng)常說(shuō)的無(wú)腦使用xavier),訓(xùn)練速度慢不說(shuō),結(jié)果也不好。改為uniform,訓(xùn)練速度飆升,結(jié)果也飆升。


        所以,初始化就跟黑科技一樣,用對(duì)了超參都不用調(diào);沒(méi)用對(duì),跑出來(lái)的結(jié)果就跟模型有bug一樣不忍直視。



        作者:BBuf
        https://www.zhihu.com/question/25097993/answer/934100939


        大概調(diào)了快一年CNN(2019年1月到今天),看到這個(gè)話題挺感興趣的,以下是我的總結(jié)

        做工程


        • 卷積是CNN的主流組件。平時(shí)有設(shè)計(jì)一些解決分類(lèi),回歸任務(wù)的網(wǎng)絡(luò),里面的卷積核基本都設(shè)置為,要說(shuō)原因的話應(yīng)該去問(wèn)問(wèn)VGG16吧。兩個(gè)的卷積核堆疊能獲得卷積核的感受野并且參數(shù)比卷積核少,所以是大量推薦使用的。

        • 可以適當(dāng)使用卷積。為什么要提這一點(diǎn)呢,這是因?yàn)?/span>卷積可以減少計(jì)算量,并且卷積可以在某個(gè)方向強(qiáng)調(diào)感受野,也就是說(shuō)假如如果你要對(duì)一個(gè)長(zhǎng)方形形狀的目標(biāo)進(jìn)行分類(lèi),你可以使用的卷積核搭配的卷積核對(duì)長(zhǎng)邊方向設(shè)定更大的感受野,或許可以獲得泛化性能的提升。

        • ACNet結(jié)構(gòu)。這個(gè)研究來(lái)自于ICCV2019,可以在卷積的基礎(chǔ)上加上的旁路卷積核,最后在推理階段把三個(gè)卷積核都fusion卷積核上,在許多經(jīng)典CV任務(wù)上都可以獲得大概1個(gè)點(diǎn)的提升。大家可以看看這篇文章解讀:3*3卷積+1*3卷積+3*1卷積=白給的精度提升

        • 卷積核權(quán)重初始化方式。對(duì)于weight的初始化我一般都是使用xavier初始化。當(dāng)然也可以可以嘗試何凱明大神的He初始化。對(duì)于bias的初始化全置于0。

        • Batch Normalization。這是我一直在使用的技巧,可以很大程度的加快收斂速度。建議搭建自己網(wǎng)絡(luò)的時(shí)候盡量加上BN,如果有BN了全連接層就沒(méi)必要加Dropout了。

        • 目標(biāo)檢測(cè)不能盲目去掉fpn結(jié)構(gòu)。在針對(duì)自己的數(shù)據(jù)調(diào)檢測(cè)任務(wù)如yolov3的時(shí)候不能盲目砍掉fpn結(jié)構(gòu),盡管你分析出某個(gè)分支的Anchor基本不可能會(huì)對(duì)你預(yù)測(cè)的目標(biāo)起作用,但如果你直接去掉分支很可能會(huì)帶來(lái)漏檢。

        • 優(yōu)化器的選擇。我基本都是帶動(dòng)量的SGD。如果優(yōu)化不動(dòng)可以試試Adam。

        • 激活函數(shù)??梢韵扔?/span>ReLU做一版,如果想再提升精度可以將ReLU改成PReLU試試。我更傾向于直接使用ReLU。

        • batch_size:在不同類(lèi)型的任務(wù)中,batch_size的影響也不同,大家可以看看這篇batch_size對(duì)模型性能影響的文章,來(lái)自公眾號(hào)AI開(kāi)發(fā)者。Batch_size是怎么影響模型性能的

        • 初始學(xué)習(xí)率。一般我是從0.01開(kāi)始設(shè)置,我個(gè)人認(rèn)為這個(gè)學(xué)習(xí)率和學(xué)習(xí)率衰減策略是相關(guān)的,但不宜設(shè)置的過(guò)大過(guò)小,0.010.1應(yīng)該是比較常用的。學(xué)習(xí)率衰減策略我一般使用multistep方式,step_size的設(shè)置要看視你的的max_iter而定。

        • 數(shù)據(jù)與處理之zero-center。第一次見(jiàn)到這個(gè)詞是在看cs231n的視頻上。主要有2個(gè)步驟,第一個(gè)是減均值,第二個(gè)是除以方差。這樣做下來(lái)最后的輸入是滿(mǎn)足均值為0方差為1的概率分布的,一般減均值是最常用的,后面的除以方差用不用可能需要自己動(dòng)手試驗(yàn)一下看看效果。

        • 殘差結(jié)構(gòu)和密集連接。resnet的殘差結(jié)構(gòu)和dense net密集連接結(jié)構(gòu),做工程的時(shí)候考慮到速度近乎不可能說(shuō)完全使用完整版本的resnetdensenet的完整結(jié)構(gòu),但我們可以自己動(dòng)手將我們網(wǎng)絡(luò)的某些模塊替換為殘差結(jié)構(gòu)和密集連接,替換的時(shí)候可以適當(dāng)降低這倆結(jié)構(gòu)的復(fù)雜度,類(lèi)似于通道數(shù)減半,密集連接中只保留一半連接等等。這里需要做一些消融實(shí)驗(yàn)來(lái)驗(yàn)證改進(jìn)后的精度。

        • 關(guān)于loss。優(yōu)秀的loss一般是對(duì)模型的泛化性能有所改善的,但在用loss的時(shí)候往往并不是直接替換loss那么簡(jiǎn)單,需要仔細(xì)思考loss背后的數(shù)學(xué)原理,要用對(duì)地方才可有提升。例如,如何將Focal Loss用到Y(jié)OLOv3中提升map,大家可以看看這個(gè)帖子。https://www.zhihu.com/question/293369755。

        • 找到模型調(diào)參時(shí)的可靠評(píng)價(jià)指標(biāo)。在調(diào)整參數(shù)訓(xùn)練模型時(shí)一定要找到正確的評(píng)價(jià)指標(biāo),沒(méi)調(diào)整一個(gè)參數(shù)就要記錄一下模型的評(píng)價(jià)指標(biāo)如準(zhǔn)確率,map值,miou值等。并且在調(diào)參時(shí)建議將調(diào)整的參數(shù)和在測(cè)試集上的精度組合成一個(gè)字符串給模型重命令,方便之后快速review。

        • 使用了帶backbone的網(wǎng)絡(luò),如訓(xùn)練VGG16-SSD建議選擇finetune的方式,從頭訓(xùn)練不僅費(fèi)時(shí)費(fèi)力,甚至難以收斂。

        • 在做分割實(shí)驗(yàn)的時(shí)候我發(fā)現(xiàn)用upsamling 加1*1卷積代替反卷積做上采樣得到的結(jié)果更平滑,并且miou差距不大,所以我認(rèn)為這兩者都是都可以使用的。

        • 一些Anchor-based目標(biāo)檢測(cè)算法為了提高精度,都是瘋狂給框,ap值確實(shí)上去了,但也導(dǎo)致了fp會(huì)很多,并且這部分fp沒(méi)有回歸,在nms階段也濾不掉。相比于ap提升而言,工程上減少fp更加重要。Gaussian yolov3的fp相比于yolov3會(huì)減少40%,Anchor-free算法暫時(shí)接觸得不多,就不太了解了。


        做比賽


        • 特征提取。VGG16,VGG19,ResNet50,Xception是非常好用的幾個(gè)特征提取模型。建議使用訓(xùn)練好的經(jīng)典模型對(duì)數(shù)據(jù)集提取特征向量存儲(chǔ)到本地,更方便使用,同時(shí)可以大幅度降低顯存消耗。

        • ensemble:

          • 將不同的經(jīng)典網(wǎng)絡(luò)提取出的特征向量,假設(shè)VGG16提取出的特征向量維度是[N,c1],ResNet50提取的特征向量維度是[N,c2],Xception提取的特征向量維度是[N, c3],那么我們可以使用三個(gè)系數(shù)a、b、c將其組合為形狀為[N, a*c1+b*c2+c*c3],其中a、b、c三個(gè)參數(shù)的取值代表我們使用哪個(gè)模型的特征多一些,如果是分類(lèi)回歸比賽,我們?cè)诤竺娼犹卣魈幚砭W(wǎng)絡(luò)就可以了。可以取不同的a、b、c得到不同的特征,然后對(duì)結(jié)果做voting,soft-voting等多種處理,一般結(jié)果不會(huì)太差啦。

          • 可以使用不同的初始化方式訓(xùn)練出模型,然后做ensemble。

          • 可以使用用不同超參數(shù)(如學(xué)習(xí)率,batch_size,優(yōu)化器)訓(xùn)練出不同模型,然后做ensemble。

        因?yàn)槲揖妥隽艘稽c(diǎn)點(diǎn)入門(mén)級(jí)比賽,上面介紹的方法取得了還不錯(cuò)的結(jié)果,所以我就在這里獻(xiàn)丑啦,方法確實(shí)挺無(wú)腦的,大家笑一笑就好啦。繼續(xù)想了下,我好像除了這些有接觸或者使用到,暫時(shí)沒(méi)有什么其它的了,如果想起其他的了,之后補(bǔ)充下。



        作者:Captain Jack
        https://www.zhihu.com/question/25097993/answer/127472322


        我和@楊軍類(lèi)似, 也是半路出家. 現(xiàn)在的工作內(nèi)容主要就是使用CNN做CV任務(wù). 干調(diào)參這種活也有兩年時(shí)間了. 我的回答可能更多的還是側(cè)重工業(yè)應(yīng)用, 技術(shù)上只限制在CNN這塊.


        先說(shuō)下我的觀點(diǎn), 調(diào)參就是trial-and-error. 沒(méi)有其他捷徑可以走. 唯一的區(qū)別是有些人盲目的嘗試, 有些人思考后再?lài)L試. 快速?lài)L試, 快速糾錯(cuò)這是調(diào)參的關(guān)鍵.


        看了楊軍的回答. 對(duì)于這個(gè)回答, 下面的評(píng)論里面@紀(jì)秋佳說(shuō)的很對(duì). 這個(gè)回答主要內(nèi)容更多的是側(cè)重理解網(wǎng)絡(luò). 而非訓(xùn)練網(wǎng)絡(luò).


        我要再?gòu)?qiáng)調(diào)下, 楊軍的回答更多的涉及是理解網(wǎng)絡(luò)而非訓(xùn)練網(wǎng)絡(luò). 是的, 沒(méi)錯(cuò). 你看完回答中的所有內(nèi)容, 對(duì)不起, 你還是不知道怎么實(shí)際訓(xùn)練一個(gè)網(wǎng)絡(luò), 尤其是復(fù)雜任務(wù)下的網(wǎng)絡(luò)(因?yàn)楹?jiǎn)單任務(wù)根本不需要, 直接上來(lái)效果就會(huì)很好, 除非你要刷簡(jiǎn)單任務(wù)的排行榜).


        • 首先說(shuō)下可視化:

        我個(gè)人的理解, 對(duì)于可視化, 更多的還是幫助人類(lèi)以自己熟悉的方式來(lái)觀察網(wǎng)絡(luò). 因?yàn)? 你是不可能邊觀察網(wǎng)絡(luò), 還邊調(diào)參的. 你只是訓(xùn)練完成后(或者準(zhǔn)確率到達(dá)一個(gè)階段后), 才能可視化. 在這之前, 網(wǎng)絡(luò)沒(méi)有學(xué)習(xí)到良好的參數(shù), 你可視化了也沒(méi)意義, 網(wǎng)絡(luò)達(dá)到不錯(cuò)的準(zhǔn)確率了, 你看看其實(shí)也就聽(tīng)個(gè)響. 同樣, 你的網(wǎng)絡(luò)訓(xùn)練的一塌糊涂, 你可視化也沒(méi)什么意義, 唯一能夠看到的就是中間結(jié)果亂七八糟, 或者全黑全白, 這時(shí)候你直接看最后準(zhǔn)確率就可以知道這網(wǎng)絡(luò)沒(méi)救了.


        • 關(guān)于權(quán)重的可視化[Visualize Layer Weights](現(xiàn)在是否強(qiáng)求smooth其實(shí)意義不大, 這個(gè)后面說(shuō).):

        同樣, 你看到一個(gè)不滿(mǎn)足平滑結(jié)果的圖像, 你知道, 這網(wǎng)絡(luò)訓(xùn)練的不好, 但是為什么呢? 是數(shù)據(jù)不好? 沒(méi)有預(yù)處理? 網(wǎng)絡(luò)結(jié)構(gòu)問(wèn)題? Learning Rate太大或者太小? 或者就是差了一個(gè)LRN層(之前我就遇到, 加個(gè)LRN就能出smooth的weights, 當(dāng)然這其實(shí)和預(yù)處理有關(guān))?

        Smooth是需要看一下的, 心里有個(gè)數(shù). 但是具體調(diào)參怎么調(diào)是沒(méi)轍的. 第一, 你不可能告訴網(wǎng)絡(luò), 這層你得學(xué)個(gè)邊界檢測(cè)的功能出來(lái). 第二, 不同任務(wù)下會(huì)有不同的weights(雖然底層的特征有很大的通用性), 你覺(jué)得你憑什么來(lái)指導(dǎo)一個(gè)看圖片比你快得多的機(jī)器?

        再說(shuō)現(xiàn)在是否需要強(qiáng)求smooth. 現(xiàn)在的趨勢(shì)是鼓勵(lì)使用小filter, 3x3大小, 多加層次(這樣, 非線性更好點(diǎn)). 換句話說(shuō), 3x3的圖片, 總共才9個(gè)像素, 你怎么判斷smooth與否呢? 當(dāng)然如果你使用大的filter, 一般5x5往上, 運(yùn)氣不差的話, 你是可以看到smooth的結(jié)果的.

        咱們?cè)僬f(shuō)另外一個(gè)極端, 一個(gè)網(wǎng)絡(luò),運(yùn)行的完美(滿(mǎn)足應(yīng)用要求就算完美), 打開(kāi)一看, 這weights不smooth啊. 你告訴我, 你打算怎么辦? 沒(méi)錯(cuò), 具有不平滑的權(quán)重的網(wǎng)絡(luò)同樣可以獲得很好的結(jié)果(這種情況我都習(xí)以為常了).


        • 那么可視化網(wǎng)絡(luò)就不重要了?

        非常重要, 但是不在訓(xùn)練這塊, 而是幫助理解網(wǎng)絡(luò)的原理這塊. 理解網(wǎng)絡(luò)原理后, 你才能在設(shè)計(jì)結(jié)構(gòu)的時(shí)候心里有感覺(jué)(只是有感覺(jué)而已), 網(wǎng)絡(luò)出了問(wèn)題, 或者在某些情況下不滿(mǎn)意, 有更好的直覺(jué)去調(diào)整.(沒(méi)錯(cuò), 只是直覺(jué), 雖然有些情況下的調(diào)整從網(wǎng)絡(luò)原理來(lái)看邏輯上應(yīng)該可以工作, 但是人家就是不工作, 你能咬機(jī)器去么?)


        • 那么怎樣訓(xùn)練一個(gè)不錯(cuò)的網(wǎng)絡(luò)呢?

        這是一個(gè)很好的鏈接, 說(shuō)明了如何從零開(kāi)始不斷的trial-and-error(其實(shí)這里面沒(méi)遇到什么error):
        Using convolutional neural nets to detect facial keypoints tutorial


        ========================================================
        我自己的經(jīng)驗(yàn), 有下面這些:

        基本原則:
        快速試錯(cuò)


        一些大的注意事項(xiàng):

        1. 剛開(kāi)始, 先上小規(guī)模數(shù)據(jù), 模型往大了放, 只要不爆顯存, 能用256個(gè)filter你就別用128個(gè). 直接奔著過(guò)擬合去. 沒(méi)錯(cuò), 就是訓(xùn)練過(guò)擬合網(wǎng)絡(luò), 連測(cè)試集驗(yàn)證集這些都可以不用.

        為什么?
        + 你要驗(yàn)證自己的訓(xùn)練腳本的流程對(duì)不對(duì). 這一步小數(shù)據(jù)量, 生成速度快, 但是所有的腳本都是和未來(lái)大規(guī)模訓(xùn)練一致的(除了少跑點(diǎn)循環(huán))
        + 如果小數(shù)據(jù)量下, 你這么粗暴的大網(wǎng)絡(luò)奔著過(guò)擬合去都沒(méi)效果. 那么, 你要開(kāi)始反思自己了, 模型的輸入輸出是不是有問(wèn)題? 要不要檢查自己的代碼(永遠(yuǎn)不要懷疑工具庫(kù), 除非你動(dòng)過(guò)代碼)? 模型解決的問(wèn)題定義是不是有問(wèn)題? 你對(duì)應(yīng)用場(chǎng)景的理解是不是有錯(cuò)? 不要懷疑NN的能力, 不要懷疑NN的能力, 不要懷疑NN的能力. 就我們調(diào)參狗能遇到的問(wèn)題, NN沒(méi)法擬合的, 這概率是有多小?
        + 你可以不這么做, 但是等你數(shù)據(jù)準(zhǔn)備了兩天, 結(jié)果發(fā)現(xiàn)有問(wèn)題要重新生成的時(shí)候, 你這周時(shí)間就醬油了.


        2. Loss設(shè)計(jì)要合理.

        + 一般來(lái)說(shuō)分類(lèi)就是Softmax, 回歸就是L2的loss. 但是要注意loss的錯(cuò)誤范圍(主要是回歸), 你預(yù)測(cè)一個(gè)label是10000的值, 模型輸出0, 你算算這loss多大, 這還是單變量的情況下. 一般結(jié)果都是nan. 所以不僅僅輸入要做normalization, 輸出也要這么弄.
        + 多任務(wù)情況下, 各loss想法限制在一個(gè)量級(jí)上, 或者最終限制在一個(gè)量級(jí)上, 初期可以著重一個(gè)任務(wù)的loss


        3. 觀察loss勝于觀察準(zhǔn)確率

        準(zhǔn)確率雖然是評(píng)測(cè)指標(biāo), 但是訓(xùn)練過(guò)程中還是要注意loss的. 你會(huì)發(fā)現(xiàn)有些情況下, 準(zhǔn)確率是突變的, 原來(lái)一直是0, 可能保持上千迭代, 然后突然變1. 要是因?yàn)檫@個(gè)你提前中斷訓(xùn)練了, 只有老天替你惋惜了. 而loss是不會(huì)有這么詭異的情況發(fā)生的, 畢竟優(yōu)化目標(biāo)是loss.
        ? ?給NN一點(diǎn)時(shí)間, 要根據(jù)任務(wù)留給NN的學(xué)習(xí)一定空間. 不能說(shuō)前面一段時(shí)間沒(méi)起色就不管了. 有些情況下就是前面一段時(shí)間看不出起色, 然后開(kāi)始穩(wěn)定學(xué)習(xí).


        4. 確認(rèn)分類(lèi)網(wǎng)絡(luò)學(xué)習(xí)充分

        分類(lèi)網(wǎng)絡(luò)就是學(xué)習(xí)類(lèi)別之間的界限. 你會(huì)發(fā)現(xiàn), 網(wǎng)絡(luò)就是慢慢的從類(lèi)別模糊到類(lèi)別清晰的. 怎么發(fā)現(xiàn)? 看Softmax輸出的概率的分布. 如果是二分類(lèi), 你會(huì)發(fā)現(xiàn), 剛開(kāi)始的網(wǎng)絡(luò)預(yù)測(cè)都是在0.5上下, 很模糊. 隨著學(xué)習(xí)過(guò)程, 網(wǎng)絡(luò)預(yù)測(cè)會(huì)慢慢的移動(dòng)到0,1這種極值附近. 所以, 如果你的網(wǎng)絡(luò)預(yù)測(cè)分布靠中間, 再學(xué)習(xí)學(xué)習(xí).


        5. Learning Rate設(shè)置合理
        ? + 太大: loss爆炸, 或者nan
        ? + 太小: 半天loss沒(méi)反映(但是, LR需要降低的情況也是這樣, 這里可視化網(wǎng)絡(luò)中間結(jié)果, 不是weights, 有效果, 倆者可視化結(jié)果是不一樣的, 太小的話中間結(jié)果有點(diǎn)水波紋或者噪點(diǎn)的樣子, 因?yàn)閒ilter學(xué)習(xí)太慢的原因, 試過(guò)就會(huì)知道很明顯)
        ? + 需要進(jìn)一步降低了: loss在當(dāng)前LR下一路降了下來(lái), 但是半天不再降了.
        ? + 如果有個(gè)復(fù)雜點(diǎn)的任務(wù), 剛開(kāi)始, 是需要人肉盯著調(diào)LR的. 后面熟悉這個(gè)任務(wù)網(wǎng)絡(luò)學(xué)習(xí)的特性后, 可以扔一邊跑去了.
        ? + 如果上面的Loss設(shè)計(jì)那塊你沒(méi)法合理, 初始情況下容易爆, 先上一個(gè)小LR保證不爆, 等loss降下來(lái)了, 再慢慢升LR, 之后當(dāng)然還會(huì)慢慢再降LR, 雖然這很蛋疼.
        ? + LR在可以工作的最大值下往小收一收, 免得ReLU把神經(jīng)元弄死了. 當(dāng)然, 我是個(gè)心急的人, 總愛(ài)設(shè)個(gè)大點(diǎn)的.


        6 對(duì)比訓(xùn)練集和驗(yàn)證集的loss
        ? ?判斷過(guò)擬合, 訓(xùn)練是否足夠, 是否需要early stop的依據(jù), 這都是中規(guī)中矩的原則, 不多說(shuō)了.


        7 清楚receptive field的大小
        ? ?CV的任務(wù), context window是很重要的. 所以你對(duì)自己模型的receptive field的大小要心中有數(shù). 這個(gè)對(duì)效果的影響還是很顯著的. 特別是用FCN, 大目標(biāo)需要很大的receptive field. 不像有fully connection的網(wǎng)絡(luò), 好歹有個(gè)fc兜底, 全局信息都有.


        簡(jiǎn)短的注意事項(xiàng):


        1. 預(yù)處理: -mean/std zero-center就夠了, PCA, 白化什么的都用不上. 我個(gè)人觀點(diǎn), 反正CNN能學(xué)習(xí)encoder, PCA用不用其實(shí)關(guān)系不大, 大不了網(wǎng)絡(luò)里面自己學(xué)習(xí)出來(lái)一個(gè).

        2. shuffle, shuffle, shuffle.

        3. 網(wǎng)絡(luò)原理的理解最重要, CNN的conv這塊, 你得明白sobel算子的邊界檢測(cè).

        4. Dropout, Dropout, Dropout(不僅僅可以防止過(guò)擬合, 其實(shí)這相當(dāng)于做人力成本最低的Ensemble, 當(dāng)然, 訓(xùn)練起來(lái)會(huì)比沒(méi)有Dropout的要慢一點(diǎn), 同時(shí)網(wǎng)絡(luò)參數(shù)你最好相應(yīng)加一點(diǎn), 對(duì), 這會(huì)再慢一點(diǎn)).

        5. CNN更加適合訓(xùn)練回答是否的問(wèn)題, 如果任務(wù)比較復(fù)雜, 考慮先用分類(lèi)任務(wù)訓(xùn)練一個(gè)模型再finetune.

        6. 無(wú)腦用ReLU(CV領(lǐng)域).

        7. 無(wú)腦用3x3.

        8. 無(wú)腦用xavier.

        9. LRN一類(lèi)的, 其實(shí)可以不用. 不行可以再拿來(lái)試試看.

        10. filter數(shù)量2^n.

        11. 多尺度的圖片輸入(或者網(wǎng)絡(luò)內(nèi)部利用多尺度下的結(jié)果)有很好的提升效果.

        12. 第一層的filter, 數(shù)量不要太少. 否則根本學(xué)不出來(lái)(底層特征很重要).

        13. sgd adam 這些選擇上, 看你個(gè)人選擇. 一般對(duì)網(wǎng)絡(luò)不是決定性的. 反正我無(wú)腦用sgd + momentum.

        14. batch normalization我一直沒(méi)用, 雖然我知道這個(gè)很好, 我不用僅僅是因?yàn)槲覒? 所以要鼓勵(lì)使用batch normalization.

        15. 不要完全相信論文里面的東西. 結(jié)構(gòu)什么的覺(jué)得可能有效果, 可以拿去試試.

        16. 你有95%概率不會(huì)使用超過(guò)40層的模型.

        17. shortcut的聯(lián)接是有作用的.

        18. 暴力調(diào)參最可取, 畢竟, 自己的生命最重要. 你調(diào)完這個(gè)模型說(shuō)不定過(guò)兩天這模型就扔掉了.

        19. 機(jī)器, 機(jī)器, 機(jī)器.

        20. Google的inception論文, 結(jié)構(gòu)要好好看看.

        21. 一些傳統(tǒng)的方法, 要稍微了解了解. 我自己的程序就用過(guò)1x14的手寫(xiě)filter, 寫(xiě)過(guò)之后你看看inception里面的1x7, 7x1 就會(huì)會(huì)心一笑..



        作者:隨機(jī)漫步的傻瓜
        https://www.zhihu.com/question/25097993/answer/951804080


        1、首先,調(diào)參的時(shí)候你要整理好自己的心情。別誤會(huì),我的意思是讓你狂躁一點(diǎn)。因?yàn)檫@玩意有時(shí)候的確是個(gè)玄學(xué),經(jīng)常調(diào)半天毛用都沒(méi)有,然后只是換一個(gè)初始值,分分鐘給你干到95%以上。是的,你其實(shí)啥也沒(méi)做,但大部分時(shí)候這玩意兒跟人很像,“出身”很重要。


        2、如上所述,好的初始點(diǎn) + 合適的LR + 好的優(yōu)化方法基本可以解決大部分問(wèn)題。如果還不行可以考慮換個(gè)loss。其它的花樣太多往往很虛。


        3、一定要注意實(shí)時(shí)保存自己的結(jié)果,熟悉使用各種seed,養(yǎng)成好的習(xí)慣。有時(shí)候你覺(jué)得一個(gè)不太好的結(jié)果其實(shí)可能是你能調(diào)到的最好的結(jié)果了,你也不想因?yàn)闆](méi)保存的緣故然后回頭發(fā)現(xiàn)再也找不著了的對(duì)吧?所謂今天你看我不起,明天我讓你高攀不起。別問(wèn)我怎么知道的。


        4、新手剛上來(lái)調(diào)參的時(shí)候沒(méi)什么經(jīng)驗(yàn),所以一定要低調(diào)!啥叫低調(diào)?低調(diào)就是一開(kāi)始調(diào)的時(shí)候千萬(wàn)別考慮太遠(yuǎn),在能承受的范圍內(nèi),盡可能先把濾波器搞得多多的,把數(shù)據(jù)搞得少少的,直奔過(guò)擬合去!所謂小步試錯(cuò),快速迭代,互聯(lián)網(wǎng)公司都是這么干的。雖然過(guò)擬合也不好搞,但總歸是有不少套路的,比起過(guò)擬合,欠擬合的問(wèn)題遠(yuǎn)遠(yuǎn)可怕的多。畢竟結(jié)果都訓(xùn)練不出來(lái)還扯什么遠(yuǎn)方?


        5、有很多無(wú)腦的配置確實(shí)可以嘗試,比如3x3的卷積核,relu激活函數(shù),加shuffle,加數(shù)據(jù)增強(qiáng),加BN,加Dropout等。dropout可以從0. 5往上加,optimizer可以用Adam或者SGD+0.8/0.9的Momentum。大部分時(shí)候這些經(jīng)驗(yàn)比你自己辛苦挑出來(lái)的奇技淫巧要有價(jià)值的多,但不是絕對(duì)的。


        6、一定要記得實(shí)時(shí)打印一些結(jié)果,比如訓(xùn)練loss、訓(xùn)練accuracy、驗(yàn)證accuracy,能畫(huà)出圖的就畫(huà)個(gè)圖。一邊看圖一邊可以發(fā)現(xiàn)不少問(wèn)題,尤其是關(guān)于學(xué)習(xí)率和過(guò)擬合的。另外,前面某位大神說(shuō)的很對(duì),看圖的時(shí)候loss要比accuracy有用的多,因?yàn)閍ccuracy就像女人一樣經(jīng)常善變,可能下一個(gè)step就差很多,而loss畢竟有個(gè)相對(duì)穩(wěn)定下降的大趨勢(shì)。


        7、在你夜深人靜的時(shí)候,或者不忙的時(shí)候,別忘了多想想原理。多研究研究別人的優(yōu)秀結(jié)果,尤其是那些成熟的架構(gòu)、和一些state-of-the-art的結(jié)果,自己的數(shù)據(jù)集也可以多翻翻,閑來(lái)無(wú)事搞點(diǎn)可視化什么的,既鍛煉了技術(shù)又能幫助發(fā)現(xiàn)。除了調(diào)參,應(yīng)用的時(shí)候不妨直接把別人的某些層拿過(guò)來(lái)自己用,能節(jié)省不少時(shí)間。


        8、最后,什么都不是絕對(duì)的。很多原理性的文章,你看看就好。什么東西都是有條件的,離開(kāi)了這個(gè)條件就啥也不是,而恰巧有時(shí)候這個(gè)條件可能僅僅就是運(yùn)氣而已。所以萬(wàn)一復(fù)現(xiàn)不出來(lái),別較真,該丟則丟。調(diào)參雖苦,也一定不要忘了同時(shí)調(diào)整自己的心態(tài):多行善事、及時(shí)記錄、少吹牛逼、多逛知乎。



        作者:京東白條
        https://www.zhihu.com/question/25097993/answer/651617880


        相信很多剛開(kāi)始接觸深度學(xué)習(xí)朋友,會(huì)感覺(jué)深度學(xué)習(xí)調(diào)參就像玄學(xué)一般,有時(shí)候參數(shù)調(diào)的好,模型會(huì)快速收斂,參數(shù)沒(méi)調(diào)好,可能迭代幾次loss值就直接變成Nan了。


        記得剛開(kāi)始研究深度學(xué)習(xí)時(shí),做過(guò)兩個(gè)小例子。一個(gè)是用tensorflow構(gòu)建了一個(gè)十分簡(jiǎn)單的只有一個(gè)輸入層和一個(gè)softmax輸出層的Mnist手寫(xiě)識(shí)別網(wǎng)絡(luò),第一次我對(duì)權(quán)重矩陣W和偏置b采用的是正態(tài)分布初始化,一共迭代了20個(gè)epoch,當(dāng)?shù)甑谝粋€(gè)epoch時(shí),預(yù)測(cè)的準(zhǔn)確度只有10%左右(和隨機(jī)猜一樣,Mnist是一個(gè)十分類(lèi)問(wèn)題),當(dāng)?shù)甓畟€(gè)epoch,精度也僅僅達(dá)到了60%的樣子。


        然后我僅僅是將權(quán)重矩陣W初始化方法改成了全為0的初始化,其他的參數(shù)均保持不變,結(jié)果在訓(xùn)練完第一個(gè)epoch后預(yù)測(cè)精度就達(dá)到了85%以上,最終20個(gè)epoch后精度達(dá)到92%。另一個(gè)例子是回歸問(wèn)題的預(yù)測(cè),當(dāng)時(shí)采用的SGD優(yōu)化器,一開(kāi)始學(xué)習(xí)率設(shè)定的0.1,模型可以正常訓(xùn)練,只是訓(xùn)練速度有些慢,我試著將學(xué)習(xí)率調(diào)整到0.3,希望可以加速訓(xùn)練速度,結(jié)果沒(méi)迭代幾輪loss就變成Nan了。于是從那時(shí)起我就深刻的感受到參數(shù)調(diào)節(jié)在深度學(xué)習(xí)模型訓(xùn)練中的重要意義。


        其實(shí)上述問(wèn)題產(chǎn)生的原因也很好理解,對(duì)于參數(shù)初始化,因?yàn)槲覀儗W(xué)習(xí)的本來(lái)就是權(quán)重W與偏置b,如果初始化足夠好,直接就初始化到最優(yōu)解,那都不用進(jìn)行訓(xùn)練了。良好的初始化,可以讓參數(shù)更接近最優(yōu)解,這可以大大提高收斂速度,也可以防止落入局部極小。對(duì)于學(xué)習(xí)率,學(xué)習(xí)率如果取太大,會(huì)使模型訓(xùn)練非常震蕩,可以想象我們最小化一個(gè)二次拋物線,選取一個(gè)很大的學(xué)習(xí)率,那么迭代點(diǎn)會(huì)一直在拋物線的兩邊震蕩,收斂不到最小值,甚至還有螺旋上升迭代點(diǎn)的可能。


        下面對(duì)深度學(xué)習(xí)調(diào)參技巧談些心得,雖說(shuō)不能讓你通過(guò)以下閱讀成為一個(gè)調(diào)參高手,但最起碼可以提供一些調(diào)參的思路。


        1. 激活函數(shù)選擇:


        常用的激活函數(shù)有relu、leaky-relu、sigmoid、tanh等。對(duì)于輸出層,多分類(lèi)任務(wù)選用softmax輸出,二分類(lèi)任務(wù)選用sigmoid輸出,回歸任務(wù)選用線性輸出。而對(duì)于中間隱層,則優(yōu)先選擇relu激活函數(shù)(relu激活函數(shù)可以有效的解決sigmoid和tanh出現(xiàn)的梯度彌散問(wèn)題,多次實(shí)驗(yàn)表明它會(huì)比其他激活函數(shù)以更快的速度收斂)。另外,構(gòu)建序列神經(jīng)網(wǎng)絡(luò)(RNN)時(shí)要優(yōu)先選用tanh激活函數(shù)。


        2、學(xué)習(xí)率設(shè)定:


        一般學(xué)習(xí)率從0.1或0.01開(kāi)始嘗試。學(xué)習(xí)率設(shè)置太大會(huì)導(dǎo)致訓(xùn)練十分不穩(wěn)定,甚至出現(xiàn)Nan,設(shè)置太小會(huì)導(dǎo)致?lián)p失下降太慢。學(xué)習(xí)率一般要隨著訓(xùn)練進(jìn)行衰減。衰減系數(shù)設(shè)0.1,0.3,0.5均可,衰減時(shí)機(jī),可以是驗(yàn)證集準(zhǔn)確率不再上升時(shí),或固定訓(xùn)練多少個(gè)周期以后自動(dòng)進(jìn)行衰減。


        3、防止過(guò)擬合:


        一般常用的防止過(guò)擬合方法有使用L1正則項(xiàng)、L2正則項(xiàng)、dropout、提前終止、數(shù)據(jù)集擴(kuò)充等。如果模型在訓(xùn)練集上表現(xiàn)比較好但在測(cè)試集上表現(xiàn)欠佳可以選擇增大L1或L2正則的懲罰力度(L2正則經(jīng)驗(yàn)上首選1.0,超過(guò)10很少見(jiàn)),或增大dropout的隨機(jī)失活概率(經(jīng)驗(yàn)首選0.5);或者當(dāng)隨著訓(xùn)練的持續(xù)在測(cè)試集上不增反降時(shí),使用提前終止訓(xùn)練的方法。當(dāng)然最有效的還是增大訓(xùn)練集的規(guī)模,實(shí)在難以獲得新數(shù)據(jù)也可以使用數(shù)據(jù)集增強(qiáng)的方法,比如CV任務(wù)可以對(duì)數(shù)據(jù)集進(jìn)行裁剪、翻轉(zhuǎn)、平移等方法進(jìn)行數(shù)據(jù)集增強(qiáng),這種方法往往都會(huì)提高最后模型的測(cè)試精度。


        4、優(yōu)化器選擇:


        如果數(shù)據(jù)是稀疏的,就用自適應(yīng)方法,即 Adagrad, Adadelta, RMSprop, Adam。整體來(lái)講,Adam 是最好的選擇。SGD 雖然能達(dá)到極小值,但是比其它算法用的時(shí)間長(zhǎng),而且可能會(huì)被困在鞍點(diǎn)。如果需要更快的收斂,或者是訓(xùn)練更深更復(fù)雜的神經(jīng)網(wǎng)絡(luò),需要用一種自適應(yīng)的算法。


        5、殘差塊與BN層:


        如果你希望訓(xùn)練一個(gè)更深更復(fù)雜的網(wǎng)絡(luò),那么殘差塊絕對(duì)是一個(gè)重要的組件,它可以讓你的網(wǎng)絡(luò)訓(xùn)練的更深。

        BN層具有加速訓(xùn)練速度,有效防止梯度消失與梯度爆炸,具有防止過(guò)擬合的效果,所以構(gòu)建網(wǎng)絡(luò)時(shí)最好要加上這個(gè)組件。


        6.自動(dòng)調(diào)參方法:


        (1)Grid Search:網(wǎng)格搜索,在所有候選的參數(shù)選擇中,通過(guò)循環(huán)遍歷,嘗試每一種可能性,表現(xiàn)最好的參數(shù)就是最終的結(jié)果。其原理就像是在數(shù)組里找最大值。缺點(diǎn)是太費(fèi)時(shí)間了,特別像神經(jīng)網(wǎng)絡(luò),一般嘗試不了太多的參數(shù)組合。

        (2)Random Search:經(jīng)驗(yàn)上,Random Search比Gird Search更有效。實(shí)際操作的時(shí)候,一般也是先用Gird Search的方法,得到所有候選參數(shù),然后每次從中隨機(jī)選擇進(jìn)行訓(xùn)練。另外Random Search往往會(huì)和由粗到細(xì)的調(diào)參策略結(jié)合使用,即在效果比較好的參數(shù)附近進(jìn)行更加精細(xì)的搜索。

        (3)Bayesian Optimization:貝葉斯優(yōu)化,考慮到了不同參數(shù)對(duì)應(yīng)的 ? ?實(shí)驗(yàn)結(jié)果值,因此更節(jié)省時(shí)間,貝葉斯調(diào)參比Grid Search迭代次數(shù)少, ?速度快;而且其針對(duì)非凸問(wèn)題依然穩(wěn)健。


        7.參數(shù)隨機(jī)初始化與數(shù)據(jù)預(yù)處理:


        參數(shù)初始化很重要,它決定了模型的訓(xùn)練速度與是否可以躲開(kāi)局部極小。relu激活函數(shù)初始化推薦使用He normal,tanh初始化推薦使用Glorot normal,其中Glorot normal也稱(chēng)作Xavier normal初始化;數(shù)據(jù)預(yù)處理方法一般也就采用數(shù)據(jù)歸一化即可。


        瀏覽 54
        點(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>
            大黑鸡吧操逼 | 最近中文字幕免费MV第一季歌词十 | 女闺蜜和我69到高潮了 | 日本级婬片A片AAA毛片炙热 | 你懂得在线观看 | 大奶网站 | 歪歪韩漫画 | 久久久成人片 | 肉大捧一进一出免费观看在线 | 受被很多人c屁股在外面被c |