首先,為什么要調(diào)整模型?
像卷積神經(jīng)網(wǎng)絡(luò)( CNN )這樣的深度學(xué)習(xí)模型具有大量的參數(shù);一般稱之為超參數(shù),因?yàn)樗鼈儾皇枪潭ㄖ担枰鷥?yōu)化。通常可以通過網(wǎng)格搜索的方法來查找這些超參數(shù)的最佳值,但需要大量硬件和時(shí)間開銷。那么,一個(gè)真正的數(shù)據(jù)科學(xué)家是否滿足于只是猜測(cè)這些超參數(shù)呢?答案當(dāng)然是否定的。
改進(jìn)模型的最佳方法之一是,基于專業(yè)團(tuán)隊(duì)的設(shè)計(jì)和體系結(jié)構(gòu)上來進(jìn)行改進(jìn),但這些專業(yè)的知識(shí)往往需要對(duì)某一領(lǐng)域具有深入的了解,且通常需要有強(qiáng)大的硬件支持。一般這些專業(yè)的團(tuán)隊(duì)都喜歡把他們的訓(xùn)練好的模型(pre-trained model)開源出來,無償提供給別人使用。基于這些pre-trained model來做研究和應(yīng)用,可以省去大量的時(shí)間和資源。
深度學(xué)習(xí)技巧
這里分享幾種方法,如何基于預(yù)訓(xùn)練好的模型來降低深度學(xué)習(xí)模型訓(xùn)練時(shí)間,提升模型的準(zhǔn)確性:
1、選擇最適用于做pre-trained模型的網(wǎng)絡(luò)結(jié)構(gòu):了解遷移學(xué)習(xí)(transfer learning)的優(yōu)點(diǎn),或者一些強(qiáng)大的CNN網(wǎng)絡(luò)結(jié)構(gòu)。主要考慮,有些領(lǐng)域之間看起來不明顯,但領(lǐng)域之間卻共享一些具有潛在特性(share potential latent features)。
2、使用較小的學(xué)習(xí)率:由于預(yù)先訓(xùn)練的權(quán)重(weights)通常比隨機(jī)初始化的權(quán)重更好,因此調(diào)整需要更精細(xì)!如何選擇主要取決于training landscape和學(xué)習(xí)的進(jìn)展情況,但需要仔細(xì)檢查每個(gè)epoch的training errors,分析如何能讓模型達(dá)到收斂。
3、使用Dropout:就像Ridge和LASSO正則化技術(shù)對(duì)于回歸模型一樣,對(duì)于所有模型都存在需要優(yōu)化的參數(shù)alpha或Dropout。這是一個(gè)超參數(shù),取決于需要解決的具體問題,只能通過不停實(shí)驗(yàn)的方法得到。先對(duì)超參數(shù)做比較大的調(diào)整(gridsearch時(shí)選擇一個(gè)比較大的變化范圍),比如NP. logspace(),然后像上面的一樣減小學(xué)習(xí)速率。循環(huán)上述過程直到找到最優(yōu)值。
4、限制權(quán)重大小:可以限制某些層的權(quán)重的最大范數(shù)(絕對(duì)值),可以提升模型泛化的能力。
5、不要改變第一層網(wǎng)絡(luò)的權(quán)值:神經(jīng)網(wǎng)絡(luò)的第一個(gè)隱含層傾向于捕捉通用和可解釋(universal and interpretable)的特征,如形狀、曲線或交叉(shapes、curves and interactions),這些特征通常與跨域(domains)相關(guān)。應(yīng)該經(jīng)常把這些特征放到一邊,把重點(diǎn)放在進(jìn)一步優(yōu)化meta latent level在水平上。這可能意味需要添加隱藏層!
6、修改輸出層:把模型參數(shù)替換成適用于要解決新領(lǐng)域的新的激活函數(shù)和輸出大小。但是,不要把自己局限于最明顯的解決方案中。比如,盡管MNIST只需要10個(gè)輸出類,但這些數(shù)字有共同的變化,允許有12 - 16個(gè)類可能會(huì)更好地解決這些問題,并提高模型性能!
Keras中的技巧
如何在Keras MNIST中修改Dropout和限制權(quán)重的大小:
Dropout最佳實(shí)踐
1、使用20–50 %的,比較小的Dropout,建議20 %的輸入(Inputs)。值取得太小,不起作用;值取得太大,不好收斂。
2、在輸入層和隱藏層上使用Dropout。這一方法已被證明可以提高深入學(xué)習(xí)的效果。
3、使用較大的(帶衰減率)學(xué)習(xí)速率(learning rate with decay),以及較大的動(dòng)量(momentum)。
4、限制模型的權(quán)重!大的學(xué)習(xí)速率容易導(dǎo)致梯度爆炸。通過對(duì)網(wǎng)絡(luò)權(quán)值施加約束(如最大范數(shù)正則化(max-norm regularization),其大小為5 )可以改善結(jié)果。
5、使用更大的網(wǎng)絡(luò)。在較大的網(wǎng)絡(luò)上使用Dropout,可能會(huì)獲得更好的性能,從而使模型有更多的機(jī)會(huì)學(xué)習(xí)獨(dú)立表示(Independent representations)。
給一個(gè)例子,如何在Keras中修改MNIST模型最后一層,輸出14個(gè)類別:
如何在網(wǎng)絡(luò)的最初五層中固定網(wǎng)絡(luò)的權(quán)值(Freeze weights):
此外,可以將該層的學(xué)習(xí)速率設(shè)置為零,或者使用參數(shù)的自適應(yīng)學(xué)習(xí)算法,如Adadelta或Adam。這有點(diǎn)復(fù)雜,在Caffe等其他平臺(tái)上可以更好地實(shí)現(xiàn)。
預(yù)訓(xùn)練模型庫
Keras
Kaggle List https://www.kaggle.com/gaborfodor/keras-pretrained-models
Keras Application:https://keras.io/applications/
OpenCV Example:https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/
TensorFlow
VGG16:https://github.com/ry/tensorflow-vgg16
Inception V3:https://github.com/tensorflow/models/blob/master/inception
ResNet:https://github.com/ry/tensorflow-resnet
Torch
LoadCaie:https://github.com/szagoruyko/loadcaffe
Caffe
Model Zoo:https://github.com/BVLC/caffe/wiki/Model-Zoo
TensorBoard的Graph的可視化
了解模型的整體結(jié)構(gòu)通常很重要。下面給出一個(gè)例子,如何直接使用Python可視化訓(xùn)練的模型:
http://nbviewer.jupyter.org/github/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb
責(zé)任編輯:xj
原文標(biāo)題:基于Pre-trained模型加速模型學(xué)習(xí)的6點(diǎn)建議
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
模型
+關(guān)注
關(guān)注
1文章
3254瀏覽量
48894 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5504瀏覽量
121246 -
cnn
+關(guān)注
關(guān)注
3文章
352瀏覽量
22238
原文標(biāo)題:基于Pre-trained模型加速模型學(xué)習(xí)的6點(diǎn)建議
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論