Transfer Learning遷移學習

如果你想實現一個計算機視覺應用,而不想從零開始訓練權重,比方從隨機初始化開始訓練,實現更快的方式通常是下載別人已經訓練好權重的網絡結構,把這個作爲預訓練遷移到你感興趣的新任務上。計算機視覺的研究社區已經很擅長把很多數據庫發佈在網絡上(如ImageNet、MSCOCO、PASCAL等數據庫,這些是已經公開在線的不同數據庫的名字),許多計算機視覺的研究者已經在上面訓練了自己的算法。有時候算法訓練要耗費好幾周時間,佔據很多GPU,事實上有人已經做過這種訓練以及痛苦的高性能調試過程。這意味着我們可以下載這些開源的權重(有人曾花費數週或數月來訓練和調試這些權重)可以用來爲我們自己的神經網絡做好的初始化開端,且可以用遷移學習來遷移知識,從這些大型公共數據庫遷移知識到自己的問題上。

如上,這裏假設有一個三分類的問題,貓的名字分別爲Tigger、Misty或者其他名字。對於一幅圖,就會存在以下四種情況,分別爲圖裏包含Tigger還是Misty或者兩者都不是、兩者都包含在一副圖裏的四種情況。現在你可能沒有足夠多的Tigger、Misty的照片,這樣就導致了我們訓練集很小。

這個時候我們可以上網下載一些開源的神經網絡應用,不但下載源碼,還要下載相應權重,你可以下載許多已經訓練好的網絡(例如在有1000類物體的ImageNet數據庫上訓練,因此該了網絡有一個可以輸出千分之一類別概率的softmax神經元,你能做的是去掉其softmax層,然後創造自己的softmax層來輸出 Tigger/Misty/其他。從網絡方面來看,建議考慮凍結前面這些層,即凍結該網絡前面所有層的參數,因此可以只訓練與自己softmax層有關的參數,即與三個類別輸出有關的softmax層( Tigger/Misty/其他 )。通過用別人訓練好的權重,即使在很小的數據庫上也可以得到很好的性能。

幸運的是 許多深度學習框架 也支持這樣的用法。事實上,根據框架結構,它有點像所包含的trainableParameter可訓練參數爲0,你可以把前面某些層設置 trainableParameter=0;另一種說法是不要訓練這些權重,或有時你就可以用一個參數 freeze=1 來設置網絡。這些不同的方法和不同的深度學習框架可以讓你來確定是否訓練與某些具體層相關的權重。所以在現在的例子中,你可以只訓練softmax層的權重,同時凍結前面所有層。

另一種應用中比較巧妙的方法是由於前面所有層被凍結了,之前有些固定函數不會變,因爲你現在也不改動它,也不用訓練它,因此網絡接受輸入圖像X,並把X映射到該層的激活函數上,因此這個方法可以加速訓練,因爲我們剛預計算過該層,而該層重激活產生的特徵就直接保存在硬盤上,你所做的就是用這個固定函數(指的是前面整個凍結的層)在該神經網絡的前半部分接受任意輸入圖像X,然後計算其特徵向量,再依據這個特徵向量訓練一個淺層softmax模型去預測。因此預計算之前層的激活結果是有利於你計算的操作,預計算訓練集所有樣本(激活結果)並存到硬盤上,然後訓練右邊的softmax類別。這樣預計算的好處是你不需要在訓練集上每次迭代都重新計算這些激活結果,所以如果你的訓練集比較小,以上就是你可以做的工作。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如果你有更大的帶標籤的數據集,比如許多Tigger、Misty或者其他貓的圖片,你可以凍結更少的層數,然後訓練後面所有層,束層通過softmax輸出 Tigger、Misty或其他。有幾種可以這樣做的方法,你可以用最後幾層的權重作爲初始化開始做梯度下降訓練,或者你也可以去掉最後幾層,然後用自己的新神經元和最終softmax輸出訓練。但有個模式,即你數據越多,所需要凍結的層數可以越少,自己訓練的層數可以越多。其中的想法就是如果你選了個數據集,有足夠的數據,不僅可以訓練單層softmax還可以訓練由所採用網絡的最後幾層組成的中型網絡。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最後如果你有許多數據,你可以使用該開源網絡和權重,用它們初始化整個網絡然後訓練,儘管這是個1000類的softmax,而你只需要3類,你需要自己的softmax輸出自己想要的標籤。但是你有越多的帶標籤的數據,你可以訓練的層數就越多,極端的例子就是你可以用下載的權重作爲初始化,因此這些權重可以代替隨機初始化,然後做梯度下降訓練來更新所有權重和網絡層,如上就是卷積神經網絡訓練中的遷移學習。

實際中因爲網上公開數據庫非常大,你下載的權重也是別人從大量數據上花費數週訓練而來的,你會發現對許多計算機視覺應用來說如果你下載別人開源的權重來初始化自己的問題,你可以取得更好的訓練結果。因此在所有不同領域中,在所有深度學習應用的領域中,計算機視覺是其中一個遷移學習可以一直應用的領域,除非你有海量的數據集資源和計算資源支持你從零訓練自己的網絡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章