機器不學習:淺談深度遷移學習

文章:How transferable are features in deep neural networks

代碼部分:http://yosinski.com/transfer

這篇文章裡的遷移我認為是transductive TL層面上的遷移(transductive TL具體可以看我這篇文章:遷移學習--綜述)也就是domain不同,但是task相同。但是transductive TL裡面還提到source和target的labeled data可不可得的問題,我感覺在這裡都可得,又不那麼嚴格滿足transductive TL介紹裡提到的情況,anyway分類可能也沒有那麼死板吧。

1. 背景與簡介

這篇文章挺有意思的,我們知道在做深度網絡的時候,一開始網絡學的是general的特徵,之後才越來越細化,越來越specific。那麼到底怎麼衡量一層是general和specific的呢?這種轉變到底是突然在某一層發生的,還是慢慢漸變式地發生的呢?這種轉變是在哪個部分發生的,開始、中間、還是最後一層?研究這些問題,是因為這些問題對研究遷移效果很有幫助,因為我們進行遷移,本質就是要找出source和domain裡的共同點,所以要在general層面上進行遷移。因此,找出哪一層是general的,哪一層是specific的,也就顯得至關重要了。

一般的遷移學習是這樣的:訓練好一個網絡(我們稱它為base network)→把它的前n層複製到target network的前n層→target network剩下的其他層隨機初始化→開始訓練target task。其中,在做backpropogate(反向傳播)的時候,有兩種方法可以選擇:(1)把遷移過來的這前n層

frozen(凍結)起來,即在訓練target task的時候,不改變這n層的值;(2)不凍結這前n層,而是會不斷調整它們的值,稱為fine-tune(微調)。這個主要取決於target數據集的大小和前n層的參數個數,如果target數據集很小,而參數個數很多,為了防止overfitting(過擬合),通常採用frozen方法;反之,採用fine-tune。

而這篇文章通過實驗設計,分析了深度網絡裡不同層在不同設置下的遷移效果,比較了在相似的數據集之間和不同的數據集之間遷移的效果,另外發現了用遷移特徵初始化比隨機初始化更好。

2. 主要貢獻

2.1. 定義了深度網絡裡面的層到底什麼時候是general的,什麼時候是specific的。

A和B:兩個task,可以分割為兩個相似的數據集(random A/B splits)和不相似的數據集(man-made and natural)

設定:ImageNet分類類別為1000個,可以分割為兩個分別有500個類別的數據集,也可以分割為分別有645000個樣本的數據集。

層數總共為8層,為了更好地舉例子,我們對上面所說的“前n層”裡面的n取n=3,把這個第n層稱為example layer。但是n=3只是這裡為了更直觀地舉例子,之後實驗中我們仍然用未知數n來標記,即BnB、AnB等。

base A:A上訓練的神經網絡

base B:B上訓練的神經網絡

selffer B3B:前3層從base B裡面的前3層得到,且前3層是frozen的;後5層隨機初始化,並在B上進行訓練。這個網絡有啥用呢?它可以作為之後要提到的遷移網絡的對照組;

transfer A3B:前3層從base A裡面的前3層得到,且前3層是frozen的;後5層隨機初始化,且在B上進行訓練。重點來了,如果A3B和baseB的效果差不多,說明第3層對B來說仍然是general的;如果差多了,那第3層就是specific to A的,不適合遷移到B;

selffer B3B+:和B3B一樣,只不過它不用frozen前3層,而是會學習所有層數,即它是fine tune的;

transfer A3B+:和A3B一樣,只不過它不用frozen前3層,而是會學習所有層數,即它是fine tune的。

用一張圖來展示:

機器不學習:淺談深度遷移學習

2.2. 比較了深度網絡裡不同層次遷移效果,展示了不使用fine-tune時,遷移效果下降的原因可能有兩個:

一是特徵本身specificity的問題,就比如現在已經到了網絡稍深一點的層次了,網絡學的已經是specific的特徵,這時候去遷移效果會不好。解決方法就是選出general的層,進行遷移;

二是把一個特徵之間是co-adapted(耦合)的網絡分割了的問題。這一個我的理解可能是和frozen相關,就是本來網絡裡的特徵是耦合的、緊密聯繫的,但是因為我們把前n層frozen了,相當於把網絡割成了兩部分,這樣可能會導致效果不好。解決方法就是fine tune。

2.3. 展示了相似數據集之間的遷移效果優於不同數據集之間的遷移效果。

2.4. 展示了訓練網絡時,使用遷移的weights(權重)去初始化的效果會比隨機初始化的效果要好,無論是在相似的數據集上遷移還是在不相似的數據集上遷移。

作者之所以想到這個的初衷是因為曾經有文章提出隨機的convolutional filters(卷積過濾器)、rectification(修正)、pooling(池化)、local normalization(局部正則化)訓練的效果和學習後的這些參數訓練的效果差不多,但是它是在很小的數據集上進行的,在很大的數據集上會怎樣呢?

2.5. 無論使用多少層的遷移特徵對網絡進行初始化,在fine tune之後效果都會變得很好。

3. 實驗

3.1. 展示貢獻2.1、2.2、2.5的實驗:這個實驗是用兩個相似的數據集(random A/B splits)訓練的。實驗分別在baseB、BnB、BnB+、AnB、AnB+上進行。(同理也可以換成baseA、AnA、AnA+、BnA、BnA+)

直接上圖可以看結論:

機器不學習:淺談深度遷移學習

可以看到這麼幾個結論:

(1)baseB(白色)完全沒有copy任何網絡的前n層,所以n=0。訓練結果大概為0.625,這個作為一個基準。

(2)BnB(深藍色)在前兩層還好好的,也就是當frozen第一層然後訓練剩下層數時,以及frozen前兩層然後訓練剩下層數時,都表現不錯;但是n取3,4,5,6的時候就不同了,效果下降,尤其是4和5層下降尤為厲害;然後第6層已經接近回到baseB的水平了,最後慢慢迴歸到正常水平。

文章推測,這是因為在連續layer之間,feature是co-adapted的(即緊密聯繫的),而frozen使得這種co-adaptation沒辦法被學習。一開始,梯度下降還是可以找到比較好的解的,但是後來越來越多層無法被一起訓練的時候,就沒辦法找到很好的解了;而後來為啥又好了呢?可能是因為對於梯度下降來說,relearn一兩層很容易就能找到一個好的解,也就是說,6、7層的特徵之間和7、8層的特徵之間的co-adaptation比較低,因此效果又提升了。

(3)BnB+(淺藍色)一直都和base case的效果差不多,說明fine-tuning可以改善BnB中效果下降的情況;

(4)AnB(深紅色)在前兩層效果都很不錯,說明前兩層特徵都是general的;但是在第三層的時候效果開始變差,4-7層的時候變得尤其差。正如在2.1中提到的,這時候BnB就起到對照作用了。回顧一下,2.2提到效果下降有兩個原因,一個是feature的specific問題,一個是co-adpated丟失的問題。可以看到在第3、4、5層時,BnB的效果也是下降的,所以這裡主要是co-adaptation的問題;而在第6和7層時,BnB的效果已經恢復了,所以已經沒有co-adapted丟失的問題,因此這時候主要就是feature的specific導致的了。

【此處展示了2.1和2.2】

此外,這裡也展示了在某一個層上遷移比在所有層(n=8時)上直接訓練的效果要好,所以這裡的貢獻有:一是從每一層的層面上量化了什麼時候遷移效果會最好;二是展示了遷移效果變差的兩個原因(即feature的specific問題和co-adapted問題)輪流主導了遷移效果的變差。

(5)AnB+(淺紅色)展示了fine tune的驚人效果,fine tune之後的遷移效果甚至比直接在target數據集上訓練的效果要好,哪怕是在大的數據集上。而且同樣的訓練時間下BnB+無法呈現這麼好的效果。此外,可以看到無論n取值多少,AnB+的效果都是差不多的,所以遷移多少層似乎對效果也沒什麼影響,下表也展示了這一點。【此處展示了2.5】

機器不學習:淺談深度遷移學習

3.2. 展示貢獻2.3的實驗:其實就是在不相似的數據集(man-made and natural)上做實驗,然後把它和前一個實驗的效果對比。

由於數據集A和B發生了改變,首先要先看看baseA和baseB的效果,它的效果和前一個實驗中的baseA和baseB的效果是差不多的,這樣在後續展示遷移效果下降的時候才有說服力(不然別人會challenge說有可能是數據集本身就導致了效果變差,而不是遷移效果變差)。

下圖中上面那條是baseB(白色點)和AnB(橙色點)的效果,下面是baseA(白色點)和BnA(橙色點)的效果,可以看到隨著n變大,它們效果的下滑都要比上述實驗中的要厲害,展示了在不相似的數據集之間遷移效果會比相似數據集之間遷移效果要差。

至於這兩條線的差別,文章指出可能只是因為A和B數據集包含類別個數不同的原因,不是關注重點。

機器不學習:淺談深度遷移學習

3.3. 展示貢獻2.4的實驗:通過對比隨機初始化weight的實驗結果和用遷移過來的weight初始化的實驗結果得出結論。

作者分別在相似數據集(random A/B splits)和不相似數據集(man-made and natural)上進行AnB的實驗,並在相似數據集(random A/B splits)上實驗,並且都減掉了base level performance,這樣它們在n=0的時候都是0,方便比較。

可以看到:(1)不相似數據集之間遷移的效果確實比相似數據集之間遷移效果下降得快,再次佐證了2.3;(2)即使是用不相似數據集上遷移的參數進行訓練,也比隨機初始化參數訓練的效果要好。

前面提到,作者想到這個是因為曾經有文章提出隨機的參數訓練的效果和學習後的這些參數訓練的效果差不多,為什麼這裡展示的卻是遷移參數訓練效果會更好呢?作者分析說,可能就是因為那篇文章裡用的數據太少,導致學習後的參數訓練時過擬合了,作者在附錄中有對這一點進行了實驗,不過不是重點,所以就不贅述了。

機器不學習:淺談深度遷移學習


分享到:


相關文章: