簡述遷移學習在深度學習中的應用

 2018-01-05 13:02:00.0

原標題:入門 | 簡述遷移學習在深度學習中的應用

選自MachineLearningMastery

作者:Jason Brownlee

本文介紹了遷移學習的基本概念,以及該方法在深度學習中的應用,引導構建預測模型的時候使用遷移學習的基本策略。

遷移學習是一種機器學習方法,就是把爲任務 A 開發的模型作爲初始點,重新使用在爲任務 B 開發模型的過程中。

深度學習中在計算機視覺任務和自然語言處理任務中將預訓練的模型作爲新模型的起點是一種常用的方法,通常這些預訓練的模型在開發神經網絡的時候已經消耗了巨大的時間資源和計算資源,遷移學習可以將已習得的強大技能遷移到相關的的問題上。

讀完本文,你將學會如何使用遷移學習來加速訓練過程,提升深度模型的性能。

讀完本文之後,你會了解以下內容:

  • 什麼是遷移學習?如何使用它?

  • 遷移學習在深度學習中的簡單例子。

  • 什麼時候可以在你自己的預測模型問題中使用遷移學習。

什麼是遷移學習?

遷移學習是一種機器學習的方法,指的是一個預訓練的模型被重新用在另一個任務中。

遷移學習和域適應指的是在一種環境中學到的知識被用在另一個領域中來提高它的泛化性能。

——《深度學習》,第 526 頁

遷移學習與多任務學習以及概念飄移這些問題相關,它不是一個專門的機器學習領域。

然而,遷移學習在某些深度學習問題中是非常受歡迎的,例如在具有大量訓練深度模型所需的資源或者具有大量的用來預訓練模型的數據集的情況。僅在第一個任務中的深度模型特徵是泛化特徵的時候,遷移學習纔會起作用。

在遷移學習中,我們首先在一個基礎數據集和基礎任務上訓練一個基礎網絡,然後我們再微調一下學到的特徵,或者說將它們遷移到第二個目標網絡中,用目標數據集和目標任務訓練網絡。如果特徵是泛化的,那麼這個過程會奏效,也就是說,這些特徵對基礎任務和目標任務都是適用的,而不是特定的適用於某個基礎任務。

——論文《How transferable are features in deep neural networks?》(https://arxiv.org/abs/1411.1792)

深度學習中的這種遷移被稱作歸納遷移。就是通過使用一個適用於不同但是相關的任務的模型,以一種有利的方式縮小可能模型的搜索範圍。

歸納學習的解釋

如何使用遷移學習

你可以在自己的預測模型問題上使用遷移學習。

以下是兩個常用的方法:

  1. 開發模型的方法

  2. 預訓練模型的方法

開發模型的方法

  1. 選擇源任務。你必須選擇一個具有豐富數據的相關的預測建模問題,原任務和目標任務的輸入數據、輸出數據以及從輸入數據和輸出數據之間的映射中學到的概念之間有某種關係,

  2. 開發源模型。然後,你必須爲第一個任務開發一個精巧的模型。這個模型一定要比普通的模型更好,以保證一些特徵學習可以被執行。

  3. 重用模型。然後,適用於源任務的模型可以被作爲目標任務的學習起點。這可能將會涉及到全部或者部分使用第一個模型,這依賴於所用的建模技術。

  4. 調整模型。模型可以在目標數據集中的輸入-輸出對上選擇性地進行微調,以讓它適應目標任務。

預訓練模型方法

  1. 選擇源模型。一個預訓練的源模型是從可用模型中挑選出來的。很多研究機構都發布了基於超大數據集的模型,這些都可以作爲源模型的備選者。

  2. 重用模型。選擇的預訓練模型可以作爲用於第二個任務的模型的學習起點。這可能涉及到全部或者部分使用與訓練模型,取決於所用的模型訓練技術。

  3. 調整模型。模型可以在目標數據集中的輸入-輸出對上選擇性地進行微調,以讓它適應目標任務。

第二種類型的遷移學習在深度學習領域比較常用。

深度學習中使用遷移學習的例子

下面用兩個常見的例子具體介紹一下深度學習模型中的遷移學習。

使用圖像數據進行遷移學習

在使用圖像作爲輸入的預測建模問題中應用遷移學習是很常見的,其中使用圖像或視頻作爲輸入。

對於這種類型的問題而言,使用爲大規模的挑戰性圖像數據集預訓練的模型是很常見的做法,例如 ImageNet(1000 類圖像分類挑戰賽的數據集)。

爲這個競賽開發模型的研究組織通常會將最終模型發佈出來,並且具備重新使用的許可。這些模型的訓練一般會耗費幾天到幾星期不等的時間,這取決於所用的硬件環境。

這些模型可以直接下載到,它們將圖像作爲輸入。

以下是這種類型的模型的三個例子:

  • 牛津 VGG 模型(http://www.robots.ox.ac.uk/~vgg/research/very_deep/)

  • 谷歌 Inception 模型(https://github.com/tensorflow/models/tree/master/inception)

  • 微軟 ResNet 模型(https://github.com/KaimingHe/deep-residual-networks)

可以在 Caffe Model Zoo(https://github.com/BVLC/caffe/wiki/Model-Zoo)中找到更多的例子,那裏分享了很多預訓練的模型。

這個方法是有效的,因爲大量的圖片在這個模型上進行訓練,需要模型能夠預測出相對比較多的圖片類型,反過來,這需要模型能夠有效地學習從圖片中提取特徵,以較好地解決這個問題。

在斯坦福大學的課程《Convolutional Neural Networks for Visual Recognition》(視覺識別中的卷積神經網絡)中,作者特別提醒,要仔細選擇將預訓練模型在多大程度上利用到新模型中。

卷積神經網絡的前面幾層提取到的特徵更泛化,後面層提取到的特徵與原始數據集更相關。

——遷移學習,CS231 卷積神經網絡視覺識別課程 (http://cs231n.github.io/transfer-learning/)

語言數據中的遷移學習

在以文本作爲輸入-輸出的自然語言處理任務中,使用遷移學習是很常見的。

對於這類問題,首先會使用詞向量(Word embedding)將單詞映射到連續的高維空間,在這個高維空間中,意思相近的不同單詞具有相似的向量表徵。

目前已經有學習這些分散詞表徵的高效算法,並且研究組織經常在大規模文本語料庫上基於許可 license 發佈預訓練模型。

這類例子包括:

  • 谷歌的 word2vec 模型(https://code.google.com/archive/p/word2vec/)

  • 斯坦福的 GloVe 模型(https://nlp.stanford.edu/projects/glove/)

這些分立詞表徵的模型可以在上述地址下載,並且結合使用在將單詞表徵作爲輸入或者生成單詞作爲輸出的深度語言學習模型中。

Yoav Goldberg 在他的書中提醒道:

..... 你可以下載到這些基於特大數量的文本訓練得到的預訓練詞向量...... 但是,訓練方法和本質語料庫的不同對結果表徵有着嚴重的影響,並且可以獲取的預訓練表徵可能不是你的實際案例中的最佳選擇。

——《Deep Learning for Natural Language Processing》(自然語言處理的深度學習方法),2017,第 135 頁

什麼時候使用遷移學習?

遷移學習是一種優化,是一種節省時間或者得到更好性能的捷徑。

通常而言,在模型經過開發和測試之前,並不能明顯地發現使用遷移學習帶來的性能提升。

Lisa Torrey 和 Jude Shavlik 在他們關於遷移學習的章節中描述了使用遷移學習的時候可能帶來的三種益處:

  1. 更高的起點。在微調之前,源模型的初始性能要比不使用遷移學習來的高。

  2. 更高的斜率。在訓練的過程中源模型提升的速率要比不使用遷移學習來得快。

  3. 更高的漸進。訓練得到的模型的收斂性能要比不使用遷移學習更好。

遷移學習能夠改善學習的三種方式

理想情況下,在一個成功的遷移學習應用中,你會得到上述這三種益處。

如果你能夠發現一個與你的任務有相關性的任務,它具備豐富的數據,並且你也有資源來爲它開發模型,那麼,在你的任務中重用這個模型確實是一個好方法,或者(更好的情況),有一個可用的預訓練模型,你可以將它作爲你自己模型的訓練初始點。

在一些問題上,你或許沒有那麼多的數據,這時候遷移學習可以讓你開發出相對不使用遷移學習而言具有更高性能的模型。

對源數據和源模型的選擇是一個開放問題,可能需要領域專家或者實際開發經驗。

延伸閱讀

如果你想進一步瞭解相關內容,這一部分給出了更多關於這個主題的學習資源。

書籍

  • 深度學習,2016(http://amzn.to/2fwdoKR)

  • 自然語言處理的神經網絡方法,2017(http://amzn.to/2fwTPCn)

論文

  • 遷移學習綜述,2010(https://pdfs.semanticscholar.org/a25f/bcbbae1e8f79c4360d26aa11a3abf1a11972.pdf)

  • 機器學習應用研究手冊,第 11 章:遷移學習(http://amzn.to/2fgeVro)

  • 深度神經網絡中的特徵具有怎麼樣的可遷移性?(https://arxiv.org/abs/1411.1792)

預訓練模型

  • 牛津 VGG 模型(http://www.robots.ox.ac.uk/~vgg/research/very_deep/)

  • 谷歌 inception 模型(https://github.com/tensorflow/models/tree/master/inception)

  • 微軟 ResNet 模型(https://github.com/KaimingHe/deep-residual-networks)

  • 谷歌 Word2vec 模型(https://code.google.com/archive/p/word2vec/)

  • 斯坦福 GloVe 模型(https://nlp.stanford.edu/projects/glove/)

  • Caffe 模型庫 Model Zoo(https://github.com/BVLC/caffe/wiki/Model-Zoo)

文章

  • 遷移學習維基百科(https://en.wikipedia.org/wiki/Transfer_learning)

  • 遷移學習——機器學習的下一個前沿,2017(http://ruder.io/transfer-learning/)

  • 遷移學習(CS231,卷積神經網絡視覺識別)(http://cs231n.github.io/transfer-learning/)

  • Quora 話題:遷移學習是如何起作用的?(https://www.quora.com/How-does-transfer-learning-work)


文章來源:機器之心