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