當前位置:
首頁 > 最新 > Day041 Transfer Learning 遷移學習

Day041 Transfer Learning 遷移學習

Transfer Learning 遷移學習

在實際應用中,很少有人完全從0開始訓練整個CNN,也就是隨機初始化參數,因為很少有數據集擁有足夠的數量大小。常用的方法是講ConvNet在非常大的數據集上進行預訓練(比如ImageNet擁有1.2百萬圖片和1000個分類)。然後使用這個ConvNet進行初始化,或者直接用它作為一個固定的特徵提取器來處理感興趣的問題。 其中有三種情況:

ConvNet as fixed feature extractor

在ImageNet上預訓練ConvNet,然後去除掉最後的全連接層(這一層的輸出是1000中分類的scores),然後將剩餘的部分作為一個固定的特徵提取器,來應用到新的數據集上。在AlexNet中,對於每一張圖都將要計算4096維的向量,包含了在分類器前那一個隱藏層的activations。這些特徵被叫做 。一旦你提取了所有圖像的4086維的codes,就可以基於新的數據集訓練一個線性分類器(Linear SVM或者Softmax classifer)。

Fine-tuing the ConvNet

第二種策略,不僅在最上層的分類器上替代並重新訓練,還要在整個pretrain過後的ConvNet上都進行權重的更新,持續進行反向傳播。可能要fine-tune所有的layers,也有可能保持最早幾層的layers(基於過擬合的考慮)而只fine-tune稍微高層的部分。 這是由於較早的特徵都是比較普遍的特徵(比如edge檢測器,color blob檢測器)。而後面層會變得更加具體,對於原始數據集中包含的分類的細節。

Pretrained models

由於現在的ConvNet在ImageNet上訓練需要花費2-3周,使用多個GPU,非常耗時。所以很常見的現象是,人們開放他們ConvNet最後的checkpoints,這樣他人就可以使用這個預訓練好的網路進行fine-tuning。比如這個Model Zoo,就有很多人分享他們網路的權重。https://github.com/BVLC/caffe/wiki/Model-Zoo

When and how to fine-tune?

應該如何選擇用哪一類的遷移學習呢?最重要的兩點因素是,新數據集的大小,以及它與元數據集的相似度。記住,越早的層越generic,遇到後面的層越original-dataset-specific。

新數據集小,與原數據集相似:

由於數據集很小,fine-tune整個ConvNet不是個好主意,基於過擬合考慮。由於數據和原數據很相似,我們期待更高階的特徵在ConvNet中是和這個數據集也相關的。因此,最好的方案可能是,在CNN codes上訓練一個線性分類器。

新數據集大,與原數據集相似:

因為我們有更多數據,就可以保證試著fine-tune整個網路的時候不會過擬合。

新數據集小,與原數據差距大:

數據集小適合只訓練線性分類器,但由於差距大,不適合只從最頂層練。從網路前面出現某個地方的activations後面,開始訓練SVM 分類器。

新數據集大,與原數據差距大:

由於數據集很大,我們可以考慮從0開始訓練器。然而,實際中使用pretrained model中的weights來進行初始化還是有好處。這個情況下,我們就擁有足夠的數據和信心來fine-tune整個網路了。

Practical advice

一些額外需要注意的事情:

Constrains from pretrained models

如果你想使用一個pretrained的模型,你可能會被原本模型的結構所限制。比如你沒辦法從預訓練好的網路中肆意去除某幾層Conv layers。然而,某些變化是很直接的:由於參數共享,你可以將預訓練的網路用在不同空間大小的圖片上。 在全連接層中,依舊可行,因為全連接層可以被轉換為卷積層。比如在AlexNet中,最後的pooling volume,在第一個全連接層之前,它的大小是[6×6×512]。因此,全連接層要找的volume就等價於一個卷積層,它的接受域是6×6,並使用了padding為0。

Learning rates

對於已經fine-tune好的ConvNet weights,通常使用比較小的Learning rate。因為我們預計ConvNet的weights已經相對很好了,我們不希望太快、太多的擾亂他們。(特別是當在他們上面的新線性分類器是從隨機初始化開始訓練的時候)

Additional References

CNN Features off-the-shelf: an Astounding Baseline for Recognition trains SVMs on features from ImageNet-pretrained ConvNet and reports several state of the art results.https://arxiv.org/abs/1403.6382

DeCAF reported similar findings in 2013. The framework in this paper (DeCAF) was a Python-based precursor to the C++ Caffe library.https://arxiv.org/abs/1310.1531

How transferable are features in deep neural networks? studies the transfer learning performance in detail, including some unintuitive findings about layer co-adaptations.https://arxiv.org/abs/1411.1792

參考鏈接:

http://cs231n.github.io/transfer-learning/


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PhD日記 的精彩文章:

TAG:PhD日記 |