1. 程式人生 > >機器學習:深度學習中的遷移學習

機器學習:深度學習中的遷移學習

遷移學習也是最近機器學習領域很火熱的一個方向,尤其是基於深度學習的遷移學習。遷移學習,顧名思義,就是要遷移,有句成語叫觸類旁通,模型在某個任務上學習到知識,當遇到類似任務的時候,應該可以很快的把以前任務學到知識遷移過來。這是擬人化的描述,按照目前主流的 “資料驅動” 型的學習方式,我們所能遷移的 “知識”,可能也只是模型的架構和引數了,至於規則,符合什麼的,可能沒有辦法遷移。

遷移學習,在深度學習之後,已經越來越普遍了,今天,我們先來介紹兩個比較常見的遷移學習,特徵遷移和域自適應。

特徵遷移

先來說說特徵遷移,我們知道,在 CNN 出現之前,常規的影象識別的流程或者套路,就是特徵提取加分類,我們以前比較常用的特徵有 SIFT, HOG, LBP,Gabor filter 等,然後結合 Bag of Words 等,這些特徵幾乎會用在所有的分類識別問題上,比如人臉識別,人臉表情識別,物體識別,行人識別等等,特徵提取可以有很多作用:比如說降維,一般原始的影象如果拉成一維向量的話,都是幾萬甚至幾十萬的維度,這樣的維度,對於分類器來說,是很重的負擔,而且樣本樣不夠的話,也很容易造成過擬合。特徵提取的另外一個作用,就是尋找類內之間的共有屬性,同一類的物體,總是應該或多或少存在共有的屬性,特徵提取,就是幫我們找到這些共有屬性。

深度學習之前,所有的特徵基本都是人為設計的,不管是 SIFT 還是 HOG,都是我們所說的 hand-designed,這個可以理解成,人類的知識,遷移到了計算機視覺裡,為什麼特徵要這樣設計,肯定是有人類的知識在起作用,這些特徵被用在各種各樣的分類問題上,這也是一種遷移。

進入深度學習時代以後,人為設計的特徵,越來越少用了,改為基於學習的特徵了,我們都已經知道,用大網路,比如 VGG, Google-Net, ResNet 等在 ImageNet 上訓練之後,把最後的 FC 層去掉,就可以看成是一個特徵提取器,越底層的卷積層,可能只是一些 general 的特徵,越上層的特徵,就越抽象,越 specific,越生成的特徵,維度也比較小,相信大家都發現,這種網路特徵提取器提取的特徵,在識別效能上,往往超越了人為設計的特徵。可能是因為人為設計的特徵,很多時候把一張影象的所有區域都按同樣的方式處理,沒有體現區域性的差異,而基於學習的特徵,在做了很多次的訓練,見過了大量的影象之後,具備了一定的對影象差異處理的能力,對於分類來說,一張影象不會是所有的地方都是同等重要的,肯定是有的區域,有些紋理會更有用,而有些區域可能完全沒有用,甚至可能會起到干擾的作用。基於學習的特徵,可能具備了一定的選擇能力,因為在經過層層複雜的卷積運算,各種濾波器的線性組合之後,這就類似一個非常複雜的非線性對映,是從原始的影象空間到特徵空間的一個對映。這個對映,不僅把高維的影象空間,對映到低維度的特徵空間,而且讓這些特徵的類內聚合性更好,類間的分離性更高,網路特徵提取器提取特徵的過程,就類似人為設計的特徵,而且這種特徵,也可以遷移到很多不同的分類問題上。

而且,更方便的是,這種網路特徵的遷移,既可以只遷移 high-level 的特徵,也可以只遷移 low-level 的特徵,也就是我們所說的 fine-tune,當我們把一個訓練好的網路,應用於新的任務時,可能對於網路底層的引數是不會去改變的,而會在底層的基礎上,接上其他的網路結構,或者直接 fine-tune 這些卷積層的引數。

深度學習時代的特徵遷移,可以理解成是網路結構和模型引數的一種遷移。這些卷積核的引數,是在經過大量資料訓練的基礎上得到的。

域自適應

域自適應,可以理解成一種半監督的學習方式,我們可以將影象看成是對現實世界的一個取樣,那麼一個數據集,就可以理解成是某個取樣的集合,比如說 MNIST 資料集,可以看成是對 0-9 的一個取樣,或者說 0-9 這十個數字,在真實世界的一個取樣,因為這些數字肯定是真實的人寫出來的,那麼,這樣一個數據集肯定是有一個分佈了,我們可以設為 P

s P_s 。假設我們還有另外一個數據集,也是 0-9 這些數字的圖片,只是這些圖片的形態和 MNIST 的不一樣,比如說這些圖片不是二值化的黑白影象,可能是彩色影象,或者背景會更復雜,那麼這個新的資料集也存在一個分佈,我們設為 P t P_t

現在,我們假設 MNIST 這個資料集是有標籤的,而另外一個數字資料集是沒有標籤的,如果我們只用 MNIST 資料訓練一個分類模型,雖然這個分類模型也是識別 0-9 這 10 個數字,但是這個模型在新的資料集上能工作嗎? 答案是否,很多實驗證明,神經網路很多時候,很容易被愚弄或者對抗攻擊,在 MNIST 上訓練的分類模型,換一個數據集,效果可能就很糟糕。而這,就是域自適應想要解決的問題。

我們可以把 MNIST 這個資料集稱為源域(source domain),新的資料集稱為目標域(target domain),source domain 的資料分佈為 P s P_s , target domain 的資料分佈為 P t P_t ,雖然他們都是對同樣的真實世界(比如說數字 0-9)的取樣,但是他們的分佈可能差異很大,域自適應,就是希望能在特徵空間把他們的分佈擬合在一起,雖然兩個資料的分佈不一樣,但是既然都是同一類,那麼他們應該存在共同的屬性,這些屬性,可以在特徵空間找到,這就是域自適應想要解決的問題。說簡單一點,就是希望把不同邊緣分佈的資料對映到某個特徵空間,使其在特徵空間的條件概率分佈是比較接近的。

目前,比較主流的域自適應的方法,都是利用對抗訓練的方式,利用一個判別器,當 source domain 和 target domain 的資料在特徵上無法被區分開來,說明他們在特徵空間上已經融為一體了。