遷移學習大白話講解

注:以下內容均爲轉載用於自學筆記

深度神經網絡,相比於之前的傳統機器學習方法,可以看成是一個全新的物種,這背後的原因,最明顯的還是深度學習對機器算力的巨大需求,在深度學習入門最少需要知道什麼?中介紹了深度學習所需的顯卡資源,而當前大內存的機器不貴,而高性能,大顯存的顯卡就沒那麼便宜了。這使得使用深度學習去處理實際生活中遇到的問題,例如圖像和語音的識別時,需要消耗大量的資源。而遷移可以改變這一切,顯著的降低深度學習所需的硬件資源。


本文會先介紹遷移學習的定義,接着說說預先訓練好的網絡是什麼,爲什麼有用?使用預訓練的網絡又有那兩種方法?之後會通過MINST數字識別的例子,來展示該如何應用遷移學習。


讓我們通過一個直觀的例子來說明什麼是遷移學習。假設你穿越到了古代,成爲了太子,爲了治理好國家,你需要知道的實在太多了。若是從頭學起,肯定是來不及的。你要做的是找你的皇帝老爸,問問他正在做了什麼,而他也希望能將他腦子的知識一股腦的轉移到你腦中。這正是遷移學習。即將一個領域的已經成熟的知識應用到其他的場景中。

                                                 


用神經網絡的詞語來表述,就是一層層網絡中每個節點的權重從一個訓練好的網絡遷移到一個全新的網絡裏,而不是從頭開始,爲每特定的個任務訓練一個神經網絡。這樣做的好處,可以從下面的例子中體現,假設你已經有了一個可以高精確度分辨貓和狗的深度神經網絡,你之後想訓練一個能夠分別不同品種的狗的圖片模型,你需要做的不是從頭訓練那些用來分辨直線,銳角的神經網絡的前幾層,而是利用訓練好的網絡,提取初級特徵,之後只訓練最後幾層神經元,讓其可以分辨狗的品種。


從上述的例子引申出來,遷移學習的理念,其實有廣泛的應用。人類的語言使得代際之間的遷移學習變得可能,在語言出現之前,每一代能夠教給下一代的東西極其有限,而有了語言,人類的知識得以爆炸性的增長。而隨着現代科學的進步,每門學科都產生了很多術語,這些術語相當於抽象層次更高的表述,所需的學習時間也會變長,這使得童年這個文化概念得以產生。遷移學習的道理應用到現實生活中,還意味着教育和娛樂的區別。教育要有闡釋,有背景,有對情境複雜性的分析,追求的是寬度,而當前娛樂式的知識傳授,則只追求深度,從一個有趣的案例,一路衍生出看似深刻的道理,或者停留在事實本身,將知識變成一個個孤島而不是網絡。


回到技術問題。遷移學習相當於讓神經網絡有了語言,新一代的神經網絡可以站在前人的基礎上更進一步,而不必重新發明輪子。使用一個由他人預先訓練好,應用在其他領域的網絡,可以作爲我們訓練模型的起點。不論是有監督學習,無監督學習還是強化學習,遷移學習的概念都有廣泛的應用。


舉圖像識別中最常見的例子,訓練一個神經網絡。來識別不同的品種的貓,你若是從頭開始訓練,你需要百萬級的帶標註數據,海量的顯卡資源。而若是使用遷移學習,你可以使用Google發佈的Inception或VGG16這樣成熟的物品分類的網絡,只訓練最後的softmax層,你只需要幾千張圖片,使用普通的CPU就能完成,而且模型的準確性不差。


使用遷徙學習時要注意,本來預訓練的神經網絡,要和當前的任務差距不大,不然遷徙學習的效果會很差。例如如果你要訓練一個神經網絡來識別肺部X光片中是否包含腫瘤,那麼使用VGG16的網絡就不如使用一個已訓練好的判斷腦部是否包含腫瘤的神經網絡。後者與當前的任務有相似的場景,很多底層的神經員可以做相同的事,而用來識別日常生活中照片的網絡,則難以從X光片中提取有效的特徵。


另一種遷移學習的方法是對整個網絡進行微調,假設你已訓練好了識別貓品種的神經網絡,你的網絡能對50種貓按品種進行分類。接下來你想對網絡進行升級,讓其能夠識別100種貓,這時你不應該只訓練網絡的最後一層,而應該逐層對網絡中每個節點的權重進行微調。顯然,只訓練最後幾層,是遷移學習最簡單的1.0版,而對節點權重進行微調(fine turing),就是更難的2.0版,通過將其他層的權重固定,只訓練一層這樣的逐層訓練,可以更好的完成上述任務。



另一種遷移學習的方式是借用網絡的結構,即不是使用已訓練好的網絡的權重,而是使用相同的網絡結構,例如多少層,每層多少節點這樣的信息,然後使用隨機生成的權重作爲訓練的起點。例如你要訓練世界上第一個識別fMRI圖像的神經網絡,你就可以借鑑識別X光圖片的神經網絡。


和傳統的方法相比,遷移學習的另一個好處其可以做多任務目標的學習,傳統的模型面對不同類型的任務,需要訓練多個不同的模型。而有了遷移學習,可以先去實現簡單的任務,將簡單任務中的得到的知識應用到更難的問題上,從而解決標註數據缺少,標註不準確等問題。

                                                         

這幅圖說明了該用哪種遷移學習,讓我們逐個來看。


1)右下角場景,待訓練的數據集較小,已訓練的模型和當前任務相似。此時可以只是重新訓練已有模型的靠近輸出的幾層,例如將ImageNet中輸出層原來可以判別一萬種輸出的網絡改的只能判別貓的品種,從而利用已有網絡來做低層次的特徵提取。


2)左下角場景,待訓練的數據集較小,已訓練的模型和當前任務場景差距較大。例如你有的已訓練網絡能識別出白天高速路上的違章車輛,你需要訓練一個能識別出夜間違章車輛的模型,由於不管白天夜晚,交通規則是沒有變化的,所以你需要將網絡靠近輸入的那幾層重新訓練,等到新的網絡能夠提取出夜間車輛的基本信息後,就可以借用已有的,在大數據集下訓練好的神經網絡來識別違章車輛,而不用等夜間違章的車輛的照片積累的足夠多之後再重新訓練。


3)左上角場景,待訓練的數據集較大,已有的模型和新模型的數據差異度很高。此時應該做的是從頭開始,重新訓練。


4)右上角場景,待訓練的數據集較大,已有模型的訓練數據和現有的訓練數據類似。此時應該使用原網絡的結構,並保留每一層的節點權重,再逐層微調。


接下來看一個實際的例子,大家都熟悉的MINST手寫數字識別,也可以用遷移學習來做,已有的訓練數據是六萬張圖片,已有的模型是通用的圖像識別模型VGG16,看起來,我們即可以將網絡的最高層重新訓練,也可以訓練網絡的最初幾層,畢竟手寫數字的圖片,和我們日常見到的圖片即相似也有明顯不同。點擊閱讀原文,可以查看具體的python代碼。


總結一下,遷移學習應用廣泛,尤其是在工程界,不管是語音識別中應對不同地區的口音,還是通過電子遊戲的模擬畫面前期訓練自動駕駛汽車,遷移學習已深度學習在工業界之所以成功的最堅實支柱,而學術界對遷移學習的研究則關注以下幾點,一是通過半監督學習減少對標註數據的依賴,應對標註數據的不對稱性,二是用遷移學習來提高模型的穩定性和可泛化性,不至於因爲一個像素的變化而改變分類結果,三是使用遷移學習來做到持續學習,讓神經網絡得以保留在舊任務中所學到的技能。


最後引申來看,集成學習,例如AdaBoost其背後的機制,也可以看成是另一種形式的遷移學習,通過多次使用訓練樣本,並給不同的樣本賦予不同的權重,集成學習也可以做到站在巨人的肩上。而Dropout機制,也是讓網絡訓練中隨機的丟失節點,從而使得網絡不得不依據之前的模型進行遷移學習,從而提高泛化能力。遷移學習本質上利用的是不同任務間的相關性,用冗餘對抗複雜。

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