歡迎光臨
每天分享高質量文章

基於Pre-trained模型加速模型學習的6點建議

    首先,為什麼要調整模型?

    像摺積神經網路( CNN )這樣的深度學習模型具有大量的引數;一般稱之為超引數,因為它們不是固定值,需要迭代最佳化。通常可以透過網格搜尋的方法來查詢這些超引數的最佳值,但需要大量硬體和時間開銷。那麼,一個真正的資料科學家是否滿足於只是猜測這些超引數呢?答案當然是否定的。

    改進模型的最佳方法之一是,基於專業團隊的設計和體系結構上來進行改進,但這些專業的知識往往需要對某一領域具有深入的瞭解,且通常需要有強大的硬體支援。一般這些專業的團隊都喜歡把他們的訓練好的模型(pre-trained model)開源出來,無償提供給別人使用。基於這些pre-trained model來做研究和應用,可以省去大量的時間和資源。


深度學習技巧

    這裡分享幾種方法,如何基於預訓練好的模型來降低深度學習模型訓練時間,提升模型的準確性:

    1、選擇最適用於做pre-trained模型的網路結構:瞭解遷移學習(transfer learning)的優點,或者一些強大的CNN網路結構。主要考慮,有些領域之間看起來不明顯,但領域之間卻共享一些具有潛在特性(share potential latent features)。

    2、使用較小的學習率:由於預先訓練的權重(weights)通常比隨機初始化的權重更好,因此調整需要更精細!如何選擇主要取決於training landscape和學習的進展情況,但需要仔細檢查每個epoch的training errors,分析如何能讓模型達到收斂。

    3、使用Dropout:就像Ridge和LASSO正則化技術對於回歸模型一樣,對於所有模型都存在需要最佳化的引數alpha或Dropout。這是一個超引數,取決於需要解決的具體問題,只能透過不停實驗的方法得到。先對超引數做比較大的調整(gridsearch時選擇一個比較大的變化範圍),比如NP. logspace(),然後像上面的一樣減小學習速率。迴圈上述過程直到找到最優值。

    4、限制權重大小:可以限制某些層的權重的最大範數(絕對值),可以提升模型泛化的能力。

    5、不要改變第一層網路的權值:神經網路的第一個隱含層傾向於捕捉通用和可解釋(universal and interpretable)的特徵,如形狀、曲線或交叉(shapes、curves and interactions),這些特徵通常與跨域(domains)相關。應該經常把這些特徵放到一邊,把重點放在進一步最佳化meta latent level在水平上。這可能意味需要新增隱藏層!

    6、修改輸出層:把模型引數替換成適用於要解決新領域的新的啟用函式和輸出大小。但是,不要把自己侷限於最明顯的解決方案中。比如,儘管MNIST只需要10個輸出類,但這些數字有共同的變化,允許有12 – 16個類可能會更好地解決這些問題,並提高模型效能!


Keras中的技巧

    如何在Keras MNIST中修改Dropout和限制權重的大小:


Dropout最佳實踐

    1、使用20–50 %的,比較小的Dropout,建議20 %的輸入(Inputs)。值取得太小,不起作用;值取得太大,不好收斂。

    2、在輸入層和隱藏層上使用Dropout。這一方法已被證明可以提高深入學習的效果。

    3、使用較大的(帶衰減率)學習速率(learning rate with decay),以及較大的動量(momentum)。

    4、限制模型的權重!大的學習速率容易導致梯度爆炸。透過對網路權值施加約束(如最大範數正則化(max-norm regularization),其大小為5 )可以改善結果。

    5、使用更大的網路。在較大的網路上使用Dropout,可能會獲得更好的效能,從而使模型有更多的機會學習獨立表示(Independent representations)。


    給一個例子,如何在Keras中修改MNIST模型最後一層,輸出14個類別:

    如何在網路的最初五層中固定網路的權值(Freeze weights):

    此外,可以將該層的學習速率設定為零,或者使用引數的自適應學習演演算法,如Adadelta或Adam。這有點複雜,在Caffe等其他平臺上可以更好地實現。


預訓練模型庫

    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的視覺化

    瞭解模型的整體結構通常很重要。下麵給出一個例子,如何直接使用Python視覺化訓練的模型:        

     http://nbviewer.jupyter.org/github/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb

往期精彩內容推薦

(精品乾貨)ACL 2018最新論文歸類(最全最細)分享

谷歌、微軟、Facebook等2018最新面試題分享

千萬不要錯過!ICLR-2018精品論文解析

麻省理工學院-2018年最新深度學習演演算法及其應用入門課程資源分享

最前沿的深度學習論文、架構及資源分享

英特爾免費精品課程推薦-深度學習基礎

深度學習中如何選擇一款合適的GPU卡的一些經驗和建議分享

模型彙總23 – 摺積神經網路中不同型別的摺積方式介紹

神經機器翻譯(NMT)的一些重要資源分享

掃描下方二維碼可以訂閱哦!

DeepLearning_NLP

深度學習與NLP

       商務合作請聯絡微訊號:lqfarmerlq

贊(0)

分享創造快樂