首先,為什么要調(diào)整模型?
像卷積神經(jīng)網(wǎng)絡(luò)( CNN )這樣的深度學(xué)習(xí)模型具有大量的參數(shù);一般稱之為超參數(shù),因為它們不是固定值,需要迭代優(yōu)化。通??梢酝ㄟ^網(wǎng)格搜索的方法來查找這些超參數(shù)的最佳值,但需要大量硬件和時間開銷。那么,一個真正的數(shù)據(jù)科學(xué)家是否滿足于只是猜測這些超參數(shù)呢?答案當(dāng)然是否定的。
改進(jìn)模型的最佳方法之一是,基于專業(yè)團(tuán)隊的設(shè)計和體系結(jié)構(gòu)上來進(jìn)行改進(jìn),但這些專業(yè)的知識往往需要對某一領(lǐng)域具有深入的了解,且通常需要有強(qiáng)大的硬件支持。一般這些專業(yè)的團(tuán)隊都喜歡把他們的訓(xùn)練好的模型(pre-trained model)開源出來,無償提供給別人使用?;谶@些pre-trained model來做研究和應(yīng)用,可以省去大量的時間和資源。
深度學(xué)習(xí)技巧
這里分享幾種方法,如何基于預(yù)訓(xùn)練好的模型來降低深度學(xué)習(xí)模型訓(xùn)練時間,提升模型的準(zhǔn)確性:
1、選擇最適用于做pre-trained模型的網(wǎng)絡(luò)結(jié)構(gòu):了解遷移學(xué)習(xí)(transfer learning)的優(yōu)點,或者一些強(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ì)檢查每個epoch的training errors,分析如何能讓模型達(dá)到收斂。
3、使用Dropout:就像Ridge和LASSO正則化技術(shù)對于回歸模型一樣,對于所有模型都存在需要優(yōu)化的參數(shù)alpha或Dropout。這是一個超參數(shù),取決于需要解決的具體問題,只能通過不停實驗的方法得到。先對超參數(shù)做比較大的調(diào)整(gridsearch時選擇一個比較大的變化范圍),比如NP. logspace(),然后像上面的一樣減小學(xué)習(xí)速率。循環(huán)上述過程直到找到最優(yōu)值。
4、限制權(quán)重大?。嚎梢韵拗颇承拥臋?quán)重的最大范數(shù)(絕對值),可以提升模型泛化的能力。
5、不要改變第一層網(wǎng)絡(luò)的權(quán)值:神經(jīng)網(wǎng)絡(luò)的第一個隱含層傾向于捕捉通用和可解釋(universal and interpretable)的特征,如形狀、曲線或交叉(shapes、curves and interactions),這些特征通常與跨域(domains)相關(guān)。應(yīng)該經(jīng)常把這些特征放到一邊,把重點放在進(jìn)一步優(yōu)化meta latent level在水平上。這可能意味需要添加隱藏層!
6、修改輸出層:把模型參數(shù)替換成適用于要解決新領(lǐng)域的新的激活函數(shù)和輸出大小。但是,不要把自己局限于最明顯的解決方案中。比如,盡管MNIST只需要10個輸出類,但這些數(shù)字有共同的變化,允許有12 - 16個類可能會更好地解決這些問題,并提高模型性能!
Keras中的技巧
如何在Keras MNIST中修改Dropout和限制權(quán)重的大?。?/p>
Dropout最佳實踐
1、使用20–50 %的,比較小的Dropout,建議20 %的輸入(Inputs)。值取得太小,不起作用;值取得太大,不好收斂。
2、在輸入層和隱藏層上使用Dropout。這一方法已被證明可以提高深入學(xué)習(xí)的效果。
3、使用較大的(帶衰減率)學(xué)習(xí)速率(learning rate with decay),以及較大的動量(momentum)。
4、限制模型的權(quán)重!大的學(xué)習(xí)速率容易導(dǎo)致梯度爆炸。通過對網(wǎng)絡(luò)權(quán)值施加約束(如最大范數(shù)正則化(max-norm regularization),其大小為5 )可以改善結(jié)果。
5、使用更大的網(wǎng)絡(luò)。在較大的網(wǎng)絡(luò)上使用Dropout,可能會獲得更好的性能,從而使模型有更多的機(jī)會學(xué)習(xí)獨立表示(Independent representations)。
給一個例子,如何在Keras中修改MNIST模型最后一層,輸出14個類別:
如何在網(wǎng)絡(luò)的最初五層中固定網(wǎng)絡(luò)的權(quán)值(Freeze weights):
此外,可以將該層的學(xué)習(xí)速率設(shè)置為零,或者使用參數(shù)的自適應(yīng)學(xué)習(xí)算法,如Adadelta或Adam。這有點復(fù)雜,在Caffe等其他平臺上可以更好地實現(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)通常很重要。下面給出一個例子,如何直接使用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點建議
文章出處:【微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
模型
+關(guān)注
關(guān)注
1文章
3519瀏覽量
50414 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122793 -
cnn
+關(guān)注
關(guān)注
3文章
354瀏覽量
22741
原文標(biāo)題:基于Pre-trained模型加速模型學(xué)習(xí)的6點建議
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
大模型推理顯存和計算量估計方法研究
大模型時代的深度學(xué)習(xí)框架

AI眼鏡大模型激戰(zhàn):多大模型協(xié)同、交互時延低至1.3S

機(jī)器學(xué)習(xí)模型市場前景如何
【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗】+大模型微調(diào)技術(shù)解讀
AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測模型
【「大模型啟示錄」閱讀體驗】如何在客服領(lǐng)域應(yīng)用大模型
深度學(xué)習(xí)模型的魯棒性優(yōu)化
PyTorch GPU 加速訓(xùn)練模型方法
擴(kuò)散模型的理論基礎(chǔ)

評論