深度學(xué)習(xí)調(diào)參及訓(xùn)練技巧

1. 調(diào)參

訓(xùn)練技巧對(duì)深度學(xué)習(xí)來(lái)說(shuō)是非常重要的恋日,作為一門實(shí)驗(yàn)性質(zhì)很強(qiáng)的科學(xué)寿羞,同樣的網(wǎng)絡(luò)結(jié)構(gòu)使用不同的訓(xùn)練方法訓(xùn)練济似,結(jié)果可能會(huì)有很大的差異矫废。這里我總結(jié)了近一年來(lái)的煉丹心得,分享給大家砰蠢,也歡迎大家補(bǔ)充指正蓖扑。

參數(shù)初始化

下面幾種方式,隨便選一個(gè),結(jié)果基本都差不多。但是一定要做台舱。否則可能會(huì)減慢收斂速度律杠,影響收斂結(jié)果,甚至造成Nan等一系列問(wèn)題竞惋。

下面的n_in為網(wǎng)絡(luò)的輸入大小柜去,n_out為網(wǎng)絡(luò)的輸出大小,n為n_in或(n_in+n_out)*0.5

Xavier初始法論文:[http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf](http://link.zhihu.com/?target=http%3A//jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf)

He初始化論文:[https://arxiv.org/abs/1502.01852](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1502.01852)

*   uniform均勻分布初始化: w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])

*   Xavier初始法拆宛,適用于普通激活函數(shù)(tanh,sigmoid):scale = np.sqrt(3/n)
*   He初始化嗓奢,適用于ReLU:scale = np.sqrt(6/n)

*   normal高斯分布初始化: w = np.random.randn(n_in,n_out) * stdev # stdev為高斯分布的標(biāo)準(zhǔn)差,均值設(shè)為0

*   Xavier初始法浑厚,適用于普通激活函數(shù) (tanh,sigmoid):stdev = np.sqrt(n)
*   He初始化蔓罚,適用于ReLU:stdev = np.sqrt(2/n)

*   svd初始化:對(duì)RNN有比較好的效果椿肩。參考論文:[https://arxiv.org/abs/1312.6120](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1312.6120)

一次慘痛的教訓(xùn)是用normal初始化cnn的參數(shù),最后acc只能到70%多豺谈,僅僅改成xavier郑象,acc可以到98%。
還有一次給word embedding初始化茬末,最開始使用了TensorFlow中默認(rèn)的initializer(即glorot_uniform_initializer厂榛,
也就是大家經(jīng)常說(shuō)的無(wú)腦使用xavier),訓(xùn)練速度慢不說(shuō)丽惭,結(jié)果也不好击奶。
改為uniform,訓(xùn)練速度飆升责掏,結(jié)果也飆升柜砾。
所以,初始化就跟黑科技一樣换衬,用對(duì)了超參都不用調(diào)痰驱;沒用對(duì),跑出來(lái)的結(jié)果就跟模型有bug一樣不忍直視瞳浦。

數(shù)據(jù)預(yù)處理方式

  • zero-center ,這個(gè)挺常用的. X -= np.mean(X, axis = 0) # zero-center X /= np.std(X, axis = 0) # normalize
  • PCA whitening,這個(gè)用的比較少.

訓(xùn)練技巧

  • 要做梯度歸一化,即算出來(lái)的梯度除以minibatch size
  • clip c(梯度裁剪): 限制最大梯度,其實(shí)是value = sqrt(w12+w22….),如果value超過(guò)了閾值,就算一個(gè)衰減系系數(shù),讓value的值等于閾值: 5,10,15
  • dropout對(duì)小數(shù)據(jù)防止過(guò)擬合有很好的效果,值一般設(shè)為0.5,小數(shù)據(jù)上dropout+sgd在我的大部分實(shí)驗(yàn)中担映,效果提升都非常明顯.因此可能的話,建議一定要嘗試一下叫潦。 dropout的位置比較有講究, 對(duì)于RNN,建議放到輸入->RNN與RNN->輸出的位置.關(guān)于RNN如何用dropout,可以參考這篇論文:http://arxiv.org/abs/1409.2329
  • adam,adadelta等,在小數(shù)據(jù)上,我這里實(shí)驗(yàn)的效果不如sgd, sgd收斂速度會(huì)慢一些蝇完,但是最終收斂后的結(jié)果,一般都比較好矗蕊。如果使用sgd的話,可以選擇從1.0或者0.1的學(xué)習(xí)率開始,隔一段時(shí)間,在驗(yàn)證集上檢查一下,如果cost沒有下降,就對(duì)學(xué)習(xí)率減半. 我看過(guò)很多論文都這么搞,我自己實(shí)驗(yàn)的結(jié)果也很好. 當(dāng)然,也可以先用ada系列先跑,最后快收斂的時(shí)候,更換成sgd繼續(xù)訓(xùn)練.同樣也會(huì)有提升.據(jù)說(shuō)adadelta一般在分類問(wèn)題上效果比較好短蜕,adam在生成問(wèn)題上效果比較好。
  • 除了gate之類的地方,需要把輸出限制成0-1之外,盡量不要用sigmoid,可以用tanh或者relu之類的激活函數(shù).1. sigmoid函數(shù)在-4到4的區(qū)間里傻咖,才有較大的梯度朋魔。之外的區(qū)間,梯度接近0没龙,很容易造成梯度消失問(wèn)題铺厨。2. 輸入0均值,sigmoid函數(shù)的輸出不是0均值的硬纤。
  • rnn的dim和embdding size,一般從128上下開始調(diào)整. batch size,一般從128左右開始調(diào)整.batch size合適最重要,并不是越大越好.
  • word2vec初始化,在小數(shù)據(jù)上,不僅可以有效提高收斂速度,也可以可以提高結(jié)果.
  • 盡量對(duì)數(shù)據(jù)做shuffle
  • LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的結(jié)果,來(lái)自這篇論文:http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf, 我這里實(shí)驗(yàn)設(shè)成1.0,可以提高收斂速度.實(shí)際使用中,不同的任務(wù),可能需要嘗試不同的值.
  • Batch Normalization據(jù)說(shuō)可以提升效果解滓,不過(guò)我沒有嘗試過(guò),建議作為最后提升模型的手段筝家,參考論文:Accelerating Deep Network Training by Reducing Internal Covariate Shift
  • 如果你的模型包含全連接層(MLP)洼裤,并且輸入和輸出大小一樣,可以考慮將MLP替換成Highway Network,我嘗試對(duì)結(jié)果有一點(diǎn)提升溪王,建議作為最后提升模型的手段腮鞍,原理很簡(jiǎn)單值骇,就是給輸出加了一個(gè)gate來(lái)控制信息的流動(dòng),詳細(xì)介紹請(qǐng)參考論文: http://arxiv.org/abs/1505.00387
  • 來(lái)自@張馨宇的技巧:一輪加正則移国,一輪不加正則吱瘩,反復(fù)進(jìn)行。

Ensemble

Ensemble是論文刷結(jié)果的終極核武器,深度學(xué)習(xí)中一般有以下幾種方式

  • 同樣的參數(shù),不同的初始化方式
  • 不同的參數(shù),通過(guò)cross-validation,選取最好的幾組
  • 同樣的參數(shù),模型訓(xùn)練的不同階段迹缀,即不同迭代次數(shù)的模型使碾。
  • 不同的模型,進(jìn)行線性融合. 例如RNN和傳統(tǒng)模型.

2. 訓(xùn)練

神經(jīng)網(wǎng)絡(luò)的代碼,比一般的代碼要難調(diào)試不少祝懂,和編譯錯(cuò)誤以及運(yùn)行時(shí)程序崩潰相比票摇,神經(jīng)網(wǎng)絡(luò)比較棘手的地方,往往在于程序運(yùn)行正常砚蓬,但是結(jié)果無(wú)法收斂矢门,這個(gè)檢查起來(lái)可要麻煩多了。下面是根據(jù)我平時(shí)調(diào)試神經(jīng)網(wǎng)絡(luò)的經(jīng)驗(yàn)灰蛙,總結(jié)的一些比較通用的調(diào)試技巧祟剔,后續(xù)會(huì)再寫一篇文章,專門介紹一下theano如何進(jìn)行調(diào)試缕允,希望能對(duì)大家調(diào)試神經(jīng)網(wǎng)絡(luò)有所幫助峡扩。

遇到Nan怎么辦蹭越?

Nan問(wèn)題障本,我相信大部分人都遇到過(guò),一般可能是下面幾個(gè)原因造成的:

  1. 除0問(wèn)題响鹃。這里實(shí)際上有兩種可能驾霜,一種是被除數(shù)的值是無(wú)窮大,即Nan买置,另一種就是除數(shù)的值是0粪糙。之前產(chǎn)生的Nan或者0,有可能會(huì)被傳遞下去忿项,造成后面都是Nan蓉冈。請(qǐng)先檢查一下神經(jīng)網(wǎng)絡(luò)中有可能會(huì)有除法的地方,例如softmax層轩触,再認(rèn)真的檢查一下數(shù)據(jù)寞酿。我有一次幫別人調(diào)試代碼,甚至還遇到過(guò)脱柱,訓(xùn)練數(shù)據(jù)文件中伐弹,有些值就是Nan。榨为。惨好。這樣讀進(jìn)來(lái)以后煌茴,開始訓(xùn)練,只要遇到Nan的數(shù)據(jù)日川,后面也就Nan了蔓腐。可以嘗試加一些日志龄句,把神經(jīng)網(wǎng)絡(luò)的中間結(jié)果輸出出來(lái)合住,看看哪一步開始出現(xiàn)Nan。后面會(huì)介紹Theano的處理辦法撒璧。
  2. 梯度過(guò)大透葛,造成更新后的值為Nan。特別是RNN卿樱,在序列比較長(zhǎng)的時(shí)候僚害,很容易出現(xiàn)梯度爆炸的問(wèn)題。一般有以下幾個(gè)解決辦法繁调。
    1. 對(duì)梯度做clip(梯度裁剪)萨蚕,限制最大梯度,其實(shí)是value = sqrt(w12+w22….),如果value超過(guò)了閾值,就算一個(gè)衰減系系數(shù),讓value的值等于閾值: 5,10,15。
    2. 減少學(xué)習(xí)率蹄胰。初始學(xué)習(xí)率過(guò)大岳遥,也有可能造成這個(gè)問(wèn)題。需要注意的是裕寨,即使使用adam之類的自適應(yīng)學(xué)習(xí)率算法進(jìn)行訓(xùn)練浩蓉,也有可能遇到學(xué)習(xí)率過(guò)大問(wèn)題,而這類算法宾袜,一般也有一個(gè)學(xué)習(xí)率的超參捻艳,可以把這個(gè)參數(shù)改的小一些臭增。
  3. 初始參數(shù)值過(guò)大腐晾,也有可能出現(xiàn)Nan問(wèn)題干旧。輸入和輸出的值脱惰,最好也做一下歸一化九默。具體方法可以參考我之前的一篇文章:深度學(xué)習(xí)個(gè)人煉丹心得 - 煉丹實(shí)驗(yàn)室 - 知乎專欄

神經(jīng)網(wǎng)絡(luò)學(xué)不出東西怎么辦董栽?

可能我們并沒有遇到蒿往,或者解決了Nan等問(wèn)題掸掸,網(wǎng)絡(luò)一直在正常的訓(xùn)練杉畜,但是cost降不下來(lái)纪蜒,預(yù)測(cè)的時(shí)候,結(jié)果不正常寻行。

  1. 請(qǐng)打印出訓(xùn)練集的cost值和測(cè)試集上cost值的變化趨勢(shì)霍掺,正常情況應(yīng)該是訓(xùn)練集的cost值不斷下降,最后趨于平緩,或者小范圍震蕩杆烁,測(cè)試集的cost值先下降牙丽,然后開始震蕩或者慢慢上升。如果訓(xùn)練集cost值不下降兔魂,有可能是代碼有bug烤芦,有可能是數(shù)據(jù)有問(wèn)題(本身有問(wèn)題,數(shù)據(jù)處理有問(wèn)題等等)析校,有可能是超參(網(wǎng)絡(luò)大小构罗,層數(shù),學(xué)習(xí)率等)設(shè)置的不合理智玻。
    請(qǐng)人工構(gòu)造10條數(shù)據(jù)遂唧,用神經(jīng)網(wǎng)絡(luò)反復(fù)訓(xùn)練,看看cost是否下降吊奢,如果還不下降盖彭,那么可能網(wǎng)絡(luò)的代碼有bug,需要認(rèn)真檢查了页滚。如果cost值下降召边,在這10條數(shù)據(jù)上做預(yù)測(cè),看看結(jié)果是不是符合預(yù)期裹驰。那么很大可能網(wǎng)絡(luò)本身是正常的隧熙。那么可以試著檢查一下超參和數(shù)據(jù)是不是有問(wèn)題。
  2. 如果神經(jīng)網(wǎng)絡(luò)代碼幻林,全部是自己實(shí)現(xiàn)的贞盯,那么強(qiáng)烈建議做梯度檢查。確保梯度計(jì)算沒有錯(cuò)誤滋将。
  3. 先從最簡(jiǎn)單的網(wǎng)絡(luò)開始實(shí)驗(yàn)邻悬,不要僅僅看cost值症昏,還要看一看神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)輸出是什么樣子随闽,確保能跑出預(yù)期結(jié)果。例如做語(yǔ)言模型實(shí)驗(yàn)的時(shí)候肝谭,先用一層RNN掘宪,如果一層RNN正常,再嘗試LSTM攘烛,再進(jìn)一步嘗試多層LSTM魏滚。
  4. 如果可能的話,可以輸入一條指定數(shù)據(jù)坟漱,然后自己計(jì)算出每一步正確的輸出結(jié)果鼠次,再檢查一下神經(jīng)網(wǎng)絡(luò)每一步的結(jié)果,是不是一樣的。

trial-and-error

先說(shuō)下我的觀點(diǎn), 調(diào)參就是trial-and-error. 沒有其他捷徑可以走. 唯一的區(qū)別是有些人盲目的嘗試, 有些人思考后再嘗試. 快速嘗試, 快速糾錯(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ò). 是的, 沒錯(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)觀察網(wǎng)絡(luò). 因?yàn)? 你是不可能邊觀察網(wǎng)絡(luò), 還邊調(diào)參的. 你只是訓(xùn)練完成后(或者準(zhǔn)確率到達(dá)一個(gè)階段后), 才能可視化. 在這之前, 網(wǎng)絡(luò)沒有學(xué)習(xí)到良好的參數(shù), 你可視化了也沒意義, 網(wǎng)絡(luò)達(dá)到不錯(cuò)的準(zhǔn)確率了, 你看看其實(shí)也就聽個(gè)響. 同樣, 你的網(wǎng)絡(luò)訓(xùn)練的一塌糊涂, 你可視化也沒什么意義, 唯一能夠看到的就是中間結(jié)果亂七八糟, 或者全黑全白, 這時(shí)候你直接看最后準(zhǔn)確率就可以知道這網(wǎng)絡(luò)沒救了.

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

同樣, 你看到一個(gè)不滿足平滑結(jié)果的圖像, 你知道, 這網(wǎng)絡(luò)訓(xùn)練的不好, 但是為什么呢? 是數(shù)據(jù)不好? 沒有預(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)是沒轍的. 第一, 你不可能告訴網(wǎng)絡(luò), 這層你得學(xué)個(gè)邊界檢測(cè)的功能出來(lái). 第二, 不同任務(wù)下會(huì)有不同的weights(雖然底層的特征有很大的通用性), 你覺得你憑什么來(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)行的完美(滿足應(yīng)用要求就算完美), 打開一看, 這weights不smooth啊. 你告訴我, 你打算怎么辦? 沒錯(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í)候心里有感覺(只是有感覺而已), 網(wǎng)絡(luò)出了問(wèn)題, 或者在某些情況下不滿意, 有更好的直覺去調(diào)整.(沒錯(cuò), 只是直覺, 雖然有些情況下的調(diào)整從網(wǎng)絡(luò)原理來(lái)看邏輯上應(yīng)該可以工作, 但是人家就是不工作, 你能咬機(jī)器去么?)

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

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

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

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

一些大的注意事項(xiàng):
1. 剛開始, 先上小規(guī)模數(shù)據(jù), 模型往大了放, 只要不爆顯存, 能用256個(gè)filter你就別用128個(gè). 直接奔著過(guò)擬合去. 沒錯(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ò)擬合去都沒效果. 那么, 你要開始反思自己了, 模型的輸入輸出是不是有問(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沒法擬合的, 這概率是有多小?
  • 你可以不這么做, 但是等你數(shù)據(jù)準(zhǔn)備了兩天, 結(jié)果發(fā)現(xiàn)有問(wèn)題要重新生成的時(shí)候, 你這周時(shí)間就醬油了.

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

  • 一般來(lái)說(shuō)分類就是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í)間沒起色就不管了. 有些情況下就是前面一段時(shí)間看不出起色, 然后開始穩(wěn)定學(xué)習(xí).

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

分類網(wǎng)絡(luò)就是學(xué)習(xí)類別之間的界限. 你會(huì)發(fā)現(xiàn), 網(wǎng)絡(luò)就是慢慢的從類別模糊到類別清晰的. 怎么發(fā)現(xiàn)? 看Softmax輸出的概率的分布. 如果是二分類, 你會(huì)發(fā)現(xiàn), 剛開始的網(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沒反映(但是, 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ù), 剛開始, 是需要人肉盯著調(diào)LR的. 后面熟悉這個(gè)任務(wù)網(wǎng)絡(luò)學(xué)習(xí)的特性后, 可以扔一邊跑去了.
  • 如果上面的Loss設(shè)計(jì)那塊你沒法合理, 初始情況下容易爆, 先上一個(gè)小LR保證不爆, 等loss降下來(lái)了, 再慢慢升LR, 之后當(dāng)然還會(huì)慢慢再降LR, 雖然這很蛋疼.
  • LR在可以工作的最大值下往小收一收, 免得ReLU把神經(jīng)元弄死了. 當(dāng)然, 我是個(gè)心急的人, 總愛設(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ì)比沒有Dropout的要慢一點(diǎn), 同時(shí)網(wǎng)絡(luò)參數(shù)你最好相應(yīng)加一點(diǎn), 對(duì), 這會(huì)再慢一點(diǎn)).
  5. CNN更加適合訓(xùn)練回答是否的問(wèn)題, 如果任務(wù)比較復(fù)雜, 考慮先用分類任務(wù)訓(xùn)練一個(gè)模型再finetune.
  6. 無(wú)腦用ReLU(CV領(lǐng)域).
  7. 無(wú)腦用3x3.
  8. 無(wú)腦用xavier.
  9. LRN一類的, 其實(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我一直沒用, 雖然我知道這個(gè)很好, 我不用僅僅是因?yàn)槲覒? 所以要鼓勵(lì)使用batch normalization.
  15. 不要完全相信論文里面的東西. 結(jié)構(gòu)什么的覺得可能有效果, 可以拿去試試.
  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的手寫filter, 寫過(guò)之后你看看inception里面的1x7, 7x1 就會(huì)會(huì)心一笑...

Relu腥寇,batchnorm成翩,dropout,adam 赦役,微步幅
relu 是一個(gè)很萬(wàn)能的激活函數(shù)麻敌,可以很好的防止梯度彌散問(wèn)題, 當(dāng)然最后一層的激活函數(shù)千萬(wàn)慎用relu,如果是連續(xù)的用identify, 分類的用softmax 掂摔,擬合回歸的話我最后一層也經(jīng)常不用激活函數(shù)术羔,直接wx +b就行,
batchnorm也是大殺器,可以大大加快訓(xùn)練速度和模型性能
Dropout 也是防止過(guò)擬合的大殺器乙漓,如果不知道怎么設(shè)比例的話级历,就直接設(shè)置為0.5, 即一半一半,但是測(cè)試的時(shí)候記得把dropout關(guān)掉.
Adam 優(yōu)化函數(shù)應(yīng)該是收斂非嘲扰快的一個(gè)優(yōu)化函數(shù)鱼喉,不過(guò)有人說(shuō)sgd +momentum 速度慢一點(diǎn)但是性能好,但是我用的沒感覺性能好.
微步幅是只卷積步幅選擇2趋观,然后模板數(shù)量逐層翻倍扛禽,就是越來(lái)越小但越來(lái)越厚,反卷積的話對(duì)稱反過(guò)來(lái)皱坛,這樣每次卷積圖像就縮小了一半编曼,下采樣和池化都可以不加,我一直不加的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剩辟,一起剝皮案震驚了整個(gè)濱河市掐场,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贩猎,老刑警劉巖熊户,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吭服,居然都是意外死亡嚷堡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門艇棕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蝌戒,“玉大人,你說(shuō)我怎么就攤上這事沼琉”惫叮” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵打瘪,是天一觀的道長(zhǎng)友鼻。 經(jīng)常有香客問(wèn)我傻昙,道長(zhǎng),這世上最難降的妖魔是什么彩扔? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任屋匕,我火速辦了婚禮,結(jié)果婚禮上借杰,老公的妹妹穿的比我還像新娘过吻。我一直安慰自己,他們只是感情好蔗衡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布纤虽。 她就那樣靜靜地躺著,像睡著了一般绞惦。 火紅的嫁衣襯著肌膚如雪逼纸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天济蝉,我揣著相機(jī)與錄音杰刽,去河邊找鬼。 笑死王滤,一個(gè)胖子當(dāng)著我的面吹牛贺嫂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雁乡,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼第喳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了踱稍?” 一聲冷哼從身側(cè)響起曲饱,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎珠月,沒想到半個(gè)月后扩淀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啤挎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年驻谆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侵浸。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旺韭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掏觉,到底是詐尸還是另有隱情,我是刑警寧澤值漫,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布澳腹,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏酱塔。R本人自食惡果不足惜沥邻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羊娃。 院中可真熱鬧唐全,春花似錦、人聲如沸蕊玷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垃帅。三九已至延届,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贸诚,已是汗流浹背方庭。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酱固,地道東北人械念。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像运悲,于是被迫代替她去往敵國(guó)和親订讼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容