遷移學習和fine tuning 的關係

2021-09-30 01:56:40 字數 2862 閱讀 3147

一、什麼是遷移學習?

遷移學習(transfer learning) 顧名思義就是把已訓練好的模型引數遷移到新的模型來幫助新模型訓練。考慮到大部分資料或任務都是存在相關性的,所以通過遷移學習我們可以將已經學到的模型引數(也可理解為模型學到的知識)通過某種方式來分享給新模型從而加快並優化模型的學習效率不用像大多數網路那樣從零學習。

模型的訓練與**:

深度學習的模型可以劃分為 訓練 和 ** 兩個階段。

訓練 分為兩種策略:一種是白手起家從頭搭建模型進行訓練,一種是通過預訓練模型進行訓練。

** 相對簡單,直接用已經訓練好的模型對資料集進行**即可。

1.為什麼要遷移學習?

1)站在巨人的肩膀上:前人花很大精力訓練出來的模型在大概率上會比你自己從零開始搭的模型要強悍,沒有必要重複造輪子。

2)訓練成本可以很低:如果採用匯出特徵向量的方法進行遷移學習,後期的訓練成本非常低,用cpu都完全無壓力,沒有深度學習機器也可以做。

3)適用於小資料集:對於資料集本身很小(幾千張)的情況,從頭開始訓練具有幾千萬引數的大型神經網路是不現實的,因為越大的模型對資料量的要求越大,過擬合無法避免。這時候如果還想用上大型神經網路的超強特徵提取能力,只能靠遷移學習。

二、遷移學習的幾種方式

1)transfer learning:凍結預訓練模型的全部卷積層,只訓練自己定製的全連線層。

2)extract feature vector:先計算出預訓練模型的卷積層對所有訓練和測試資料的特徵向量,然後拋開預訓練模型,只訓練自己定製的簡配版全連線網路。

3)fine-tune:凍結預訓練模型的部分卷積層(通常是靠近輸入的多數卷積層),訓練剩下的卷積層(通常是靠近輸出的部分卷積層)和全連線層。

1)第一種和第二種訓練得到的模型本質上並沒有什麼區別,但是第二種的計算複雜度要遠遠優於第一種。

2)第三種是對前兩種方法的補充,以進一步提公升模型效能。要注意的是,這種方法並不一定能真的對模型有所提公升。

本質上來講:這三種遷移學習的方式都是為了讓預訓練模型能夠勝任新資料集的識別工作,能夠讓預訓練模型原本的特徵提取能力得到充分的釋放和利用。但是,在此基礎上如果想讓模型能夠達到更低的loss,那麼光靠遷移學習是不夠的,靠的更多的還是模型的結構以及新資料集的豐富程度。

實驗:嘗試對模型進行微調,以進一步提公升模型效能

1.fine-tune所扮演的角色

拿到新資料集,想要用預訓練模型處理的時候,通常都會先用上面方法一或者方法二來看看預訓練模型在新資料上的表現怎麼樣,摸個底。如果表現不錯,還想看看能不能進一步提公升,就可以試試fine-tune,進一步解鎖卷積層以繼續訓練模型。

但是不要期待會有什麼質的飛躍。

另外,如果由於新資料集與原資料集(例如imagenet資料集)的差別太大導致表現很糟,那麼一方面可以考慮自己從頭訓練模型,另一方面也可以考慮解鎖比較多層的訓練,亦或乾脆只用預訓練模型的引數作為初始值,對模型進行完整訓練。

2.fine-tune 也可以有三種操作方式

注:其實基本思路都是一樣的,就是解鎖少數卷積層繼續對模型進行訓練。

場景1:已經採用方法一的方式,帶著凍僵的卷積層訓練好分類器了。

如何做:接著用方法一里的模型,再解鎖一小部分卷積層接著訓練就好了。

場景2:已經採用方法二里的方式,把分類器訓練好了,現在想要進一步提公升模型。

如何做:重新搭乙個預訓練模型接新分類器,然後把方法二里訓練好的分類器引數載入到新分類器裡,解鎖一小部分卷積層接著訓練。

場景3:剛上手,想要 transfer learning + fine-tune一氣呵成。

如何做:和方法一里的操作一樣,唯一不同的就是只凍僵一部分卷積層訓練。需要注意的是,這麼做需要搭配很低的學習率,因此收斂可能會很慢。

摘錄:3.不同資料集下使用微調

資料集1 -

資料量少,但資料相似度非常高

在這種情況下,我們所做的只是修改最後幾層或最終的softmax圖層的輸出類別。

資料集2 -

資料量少,資料相似度低

在這種情況下,我們可以凍結預訓練模型的初始層(比如k層),並再次訓練剩餘的(n-k)層。由於新資料集的相似度較低,因此根據新資料集對較高層進行重新訓練具有重要意義。

資料集3 -

資料量大,資料相似度低

在這種情況下,由於我們有乙個大的資料集,我們的神經網路訓練將會很有效。但是,由於我們的資料與用於訓練我們的預訓練模型的資料相比有很大不同。使用預訓練模型進行的**不會有效。因此,最好根據你的資料從頭開始訓練神經網路(training from scatch)。

資料集4 -

資料量大,資料相似度高

這是理想情況。在這種情況下,預訓練模型應該是最有效的。使用模型的最好方法是保留模型的體系結構和模型的初始權重。然後,我們可以使用在預先訓練的模型中的權重來重新訓練該模型。

四、微調的注意事項

1)通常的做法是截斷預先訓練好的網路的最後一層(softmax層),並用與我們自己的問題相關的新的softmax層替換它。

2)使用較小的學習率來訓練網路。

3)如果資料集數量過少,我們進來只訓練最後一層,如果資料集數量中等,凍結預訓練網路的前幾層的權重也是一種常見做法。

注:卷積神經網路的核心是:

(1)淺層卷積層提取基礎特徵,比如邊緣,輪廓等基礎特徵。

(2)深層卷積層提取抽象特徵,比如整個臉型。

(3)全連線層根據特徵組合進行評分分類。

多重預訓練視覺模型的遷移學習

和上面的方法二類似,只是我們現在擁有多個預訓練模型,採用特徵提取方法,使用堆疊技術將不同的預訓練模型的特徵組合在一起去訓練。使用多個預訓練模型後,與使用乙個特徵集的情況相同:它們希望提供一些不重疊的資訊,從而使組合時效能更優越。

注:不同預訓練模型的預處理方式

摘錄:

遷移學習和fine tuning區別

遷移學習 transfer learning 遷移學習是一種思想,並不是一種特定的演算法或者模型,目的是將已學習到的知識應用到其他領域,提高在目標領域上的效能 fine tuning 在深度學習裡,這僅僅是乙個處理手段,之所以現在大量採用fine tuning,是因為有很多人用實驗證實了 單純從自己...

遷移學習和fine tuning的區別

舉個例子,假設今天老闆給你乙個新的資料集,讓你做一下分類,這個資料集是關於flowers的。問題是,資料集中flower的類別很少,資料集中的資料也不多,你發現從零訓練開始訓練cnn的效果很差,很容易過擬合。怎麼辦呢,於是你想到了使用transfer learning,用別人已經訓練好的imagen...

遷移學習與fine tuning有什麼區別

假設你要處理乙個新資料集,讓你做分類,這個資料集是關於flowers的,問題是,資料集中flower的類別很少,資料集中的資料也不多,你發現從零開始訓練cnn的效果很差,很容易過擬合,怎麼辦呢,於是你想到了使用transfer learning,用別人已經訓練好的imagenet的模型來做。做的方法...