目錄
一、概述
二、什麼是遷移學習?
2.1 模型的訓練與預測:
2.2 為什麼要遷移學習?
2.3 遷移學習有幾種方式
2.4 三種遷移學習方式的對比
三、實驗:嘗試對模型進行微調,以進一步提升模型效能
3.1 Fine-tune所扮演的角色
3.2 Fine-tune 也可以有三種操作方式
3.3 不同資料集下使用微調
3.4 微調的注意事項
四、多重預訓練視覺模型的遷移學習
一、概述
在傳統的機器學習的框架下,學習的任務就是在給定充分訓練資料的基礎上來學習一個分類模型;然後利用這個學習到的模型來對測試文件進行分類與預測。然而,我們看到機器學習演算法在當前的Web挖掘研究中存在著一個關鍵的問題:一些新出現的領域中的大量訓練資料非常難得到。我們看到Web應用領域的發展非常快速。大量新的領域不斷湧現,從傳統的新聞,到網頁,到圖片,再到部落格、播客等等。傳統的機器學習需要對每個領域都標定大量訓練資料,這將會耗費大量的人力與物力。而沒有大量的標註資料,會使得很多與學習相關研究與應用無法開展。其次,傳統的機器學習假設訓練資料與測試資料服從相同的資料分佈。然而,在許多情況下,這種同分布假設並不滿足。通常可能發生的情況如訓練資料過期。這往往需要我們去重新標註大量的訓練資料以滿足我們訓練的需要,但標註新資料是非常昂貴的,需要大量的人力與物力。從另外一個角度上看,如果我們有了大量的、在不同分佈下的訓練資料,完全丟棄這些資料也是非常浪費的。如何合理的利用這些資料就是遷移學習主要解決的問題。遷移學習可以從現有的資料中遷移知識,用來幫助將來的學習。遷移學習(Transfer Learning)的目標是將從一個環境中學到的知識用來幫助新環境中的學習任務。因此,遷移學習不會像傳統機器學習那樣作同分布假設。
二、什麼是遷移學習?
遷移學習(Transfer learning) 顧名思義就是把已訓練好的模型引數遷移到新的模型來幫助新模型訓練。考慮到大部分資料或任務都是存在相關性的,所以通過遷移學習我們可以將已經學到的模型引數(也可理解為模型學到的知識)通過某種方式來分享給新模型從而加快並優化模型的學習效率不用像大多數網路那樣從零學習。
2.1 模型的訓練與預測:
深度學習的模型可以劃分為 訓練 和 預測 兩個階段。
訓練 分為兩種策略:一種是白手起家從頭搭建模型進行訓練,一種是通過預訓練模型進行訓練。
預測 相對簡單,直接用已經訓練好的模型對資料集進行預測即可。
2.2 為什麼要遷移學習?
(1)站在巨人的肩膀上 :前人花很大精力訓練出來的模型在大概率上會比你自己從零開始搭的模型要強悍,沒有必要重複造輪子。
(2)訓練成本可以很低 :如果採用匯出特徵向量的方法進行遷移學習,後期的訓練成本非常低,用CPU都完全無壓力,沒有深度學習機器也可以做。
(3)適用於小資料集 :對於資料集本身很小(幾千張圖片)的情況,從頭開始訓練具有幾千萬引數的大型神經網路是不現實的,因為越大的模型對資料量的要求越大,過擬合無法避免。這時候如果還想用上大型神經網路的超強特徵提取能力,只能靠遷移學習。
2.3 遷移學習有幾種方式
(1)Transfer Learning :凍結預訓練模型的全部卷積層,只訓練自己定製的全連線層。
(2)Extract Feature Vector :先計算出預訓練模型的卷積層對所有訓練和測試資料的特徵向量,然後拋開預訓練模型,只訓練自己定製的簡配版全連線網路。
(3)Fine-tune :凍結預訓練模型的部分卷積層(通常是靠近輸入的多數卷積層),訓練剩下的卷積層(通常是靠近輸出的部分卷積層)和全連線層。
* 注:Transfer Learning關心的問題是:什麼是“知識”以及如何更好地運用之前得到的“知識”,這可以有很多方法和手段,eg:SVM,貝葉斯,CNN等。而fine-tune只是其中的一種手段,更常用於形容遷移學習的後期 微調 中。
2.4 三種遷移學習方式的對比
(1)第一種和第二種訓練得到的模型本質上並沒有什麼區別,但是第二種的計算複雜度要遠遠優於第一種。
(2)第三種是對前兩種方法的補充,以進一步提升模型效能。要注意的是,這種方法並不一定能真的對模型有所提升。
本質上來講: 這三種遷移學習的方式都是為了讓預訓練模型能夠勝任新資料集的識別工作,能夠讓預訓練模型原本的特徵提取能力得到充分的釋放和利用。但是,在此基礎上如果想讓模型能夠達到更低的Loss,那麼光靠遷移學習是不夠的, 靠的更多的還是模型的結構以及新資料集的豐富程度。
三、實驗:嘗試對模型進行微調,以進一步提升模型效能
3.1 Fine-tune所扮演的角色
拿到新資料集,想要用預訓練模型處理的時候,通常都會先用上面方法一或者方法二來看看預訓練模型在新資料上的表現怎麼樣,摸個底。如果表現不錯,還想看看能不能進一步提升,就可以試試Fine-tune,進一步解鎖卷積層以繼續訓練模型。
但是不要期待會有什麼質的飛躍。
另外,如果由於新資料集與原資料集(例如ImageNet資料集)的差別太大導致表現很糟,那麼一方面可以考慮自己從頭訓練模型,另一方面也可以考慮解鎖比較多層的訓練,亦或乾脆只用預訓練模型的引數作為初始值,對模型進行完整訓練。
3.2 Fine-tune 也可以有三種操作方式
注:其實基本思路都是一樣的,就是解鎖少數卷積層繼續對模型進行訓練。
場景1 :已經採用方法一的方式,帶著凍僵的卷積層訓練好分類器了。
如何做:接著用方法一里的模型,再解鎖一小部分卷積層接著訓練就好了。
場景2 :已經採用方法二里的方式,把分類器訓練好了,現在想要進一步提升模型。
如何做:重新搭一個預訓練模型接新分類器,然後把方法二里訓練好的分類器引數載入到新分類器裡,解鎖一小部分卷積層接著訓練。
場景3 :剛上手,想要 Transfer Learning + Fine-tune一氣呵成。
如何做:和方法一里的操作一樣,唯一不同的就是隻凍僵一部分卷積層訓練。需要注意的是,這麼做需要搭配很低的學習率,因此收斂可能會很慢。
3.3 不同資料集下使用微調
資料集1
資料量少,但資料相似度非常高
- 在這種情況下,我們所做的只是修改最後幾層或最終的softmax圖層的輸出類別。
資料集2
資料量少,資料相似度低
- 在這種情況下,我們可以凍結預訓練模型的初始層(比如k層),並再次訓練剩餘的(n-k)層。由於新資料集的相似度較低,因此根據新資料集對較高層進行重新訓練具有重要意義。
資料集3
資料量大,資料相似度低
- 在這種情況下,由於我們有一個大的資料集,我們的神經網路訓練將會很有效。但是,由於我們的資料與用於訓練我們的預訓練模型的資料相比有很大不同。使用預訓練模型進行的預測不會有效。因此,最好根據你的資料從頭開始訓練神經網路(Training from scatch)。
資料集4
資料量大,資料相似度高
這是理想情況。在這種情況下,預訓練模型應該是最有效的。使用模型的最好方法是保留模型的體系結構和模型的初始權重。然後,我們可以使用在預先訓練的模型中的權重來重新訓練該模型。
3.4 微調的注意事項
(1)通常的做法是截斷預先訓練好的網路的最後一層(softmax層),並用與我們自己的問題相關的新的softmax層替換它。
(2)使用 較小的學習率 來訓練網路。
(3)如果資料集數量過少,我們進來只訓練最後一層,如果資料集數量中等,凍結預訓練網路的前幾層的權重也是一種常見做法。
注:卷積神經網路的核心是:
(1)淺層卷積層提取基礎特徵,比如邊緣,輪廓等基礎特徵。
(2)深層卷積層提取抽象特徵,比如整個臉型。
(3)全連線層根據特徵組合進行評分分類。
四、多重預訓練視覺模型的遷移學習
和上面的方法二類似,只是我們現在擁有多個預訓練模型,採用特徵提取方法,使用堆疊技術將不同的預訓練模型的特徵組合在一起去訓練。使用多個預訓練模型後,與使用一個特徵集的情況相同:它們希望提供一些不重疊的資訊,從而使組合時效能更優越。