深度神經網路,相比於之前的傳統機器學習方法,可以看成是乙個全新的物種,這背後的原因,最明顯的還是深度學習對機器算力的巨大需求,在深度學習入門最少需要知道什麼?中介紹了深度學習所需的顯示卡資源,而當前大記憶體的機器不貴,而高效能,大視訊記憶體的顯示卡就沒那麼便宜了。這使得使用深度學習去處理實際生活中遇到的問題,例如影象和語音的識別時,需要消耗大量的資源。而遷移可以改變這一切,顯著的降低深度學習所需的硬體資源。
本文會先介紹遷移學習的定義,接著說說預先訓練好的網路是什麼,為什麼有用?使用預訓練的網路又有那兩種方法?之後會通過minst數字識別的例子,來展示該如何應用遷移學習。
讓我們通過乙個直觀的例子來說明什麼是遷移學習。假設你穿越到了古代,成為了太子,為了治理好國家,你需要知道的實在太多了。若是從頭學起,肯定是來不及的。你要做的是找你的皇帝老爸,問問他正在做了什麼,而他也希望能將他腦子的知識一股腦的轉移到你腦中。這正是遷移學習。即將乙個領域的已經成熟的知識應用到其他的場景中。
用神經網路的詞語來表述,就是一層層網路中每個節點的權重從乙個訓練好的網路遷移到乙個全新的網路裡,而不是從頭開始,為每特定的個任務訓練乙個神經網路。這樣做的好處,可以從下面的例子中體現,假設你已經有了乙個可以高精確度分辨貓和狗的深度神經網路,你之後想訓練乙個能夠分別不同品種的狗的模型,你需要做的不是從頭訓練那些用來分辨直線,銳角的神經網路的前幾層,而是利用訓練好的網路,提取初級特徵,之後只訓練最後幾層神經元,讓其可以分辨狗的品種。
從上述的例子引申出來,遷移學習的理念,其實有廣泛的應用。人類的語言使得代際之間的遷移學習變得可能,在語言出現之前,每一代能夠教給下一代的東西極其有限,而有了語言,人類的知識得以**性的增長。而隨著現代科學的進步,每門學科都產生了很多術語,這些術語相當於抽象層次更高的表述,所需的學習時間也會變長,這使得童年這個文化概念得以產生。遷移學習的道理應用到現實生活中,還意味著教育和娛樂的區別。教育要有闡釋,有背景,有對情境複雜性的分析,追求的是寬度,而當前娛樂式的知識傳授,則只追求深度,從乙個有趣的案例,一路衍生出看似深刻的道理,或者停留在事實本身,將知識變成乙個個孤島而不是網路。
回到技術問題。遷移學習相當於讓神經網路有了語言,新一代的神經網路可以站在前人的基礎上更進一步,而不必重新發明輪子。使用乙個由他人預先訓練好,應用在其他領域的網路,可以作為我們訓練模型的起點。不論是有監督學習,無監督學習還是強化學習,遷移學習的概念都有廣泛的應用。
舉影象識別中最常見的例子,訓練乙個神經網路。來識別不同的品種的貓,你若是從頭開始訓練,你需要百萬級的帶標註資料,海量的顯示卡資源。而若是使用遷移學習,你可以使用google發布的inception或vgg16這樣成熟的物品分類的網路,只訓練最後的softmax層,你只需要幾千張,使用普通的cpu就能完成,而且模型的準確性不差。
使用遷徙學習時要注意,本來預訓練的神經網路,要和當前的任務差距不大,不然遷徙學習的效果會很差。例如如果你要訓練乙個神經網路來識別肺部x光片中是否包含腫瘤,那麼使用vgg16的網路就不如使用乙個已訓練好的判斷腦部是否包含腫瘤的神經網路。後者與當前的任務有相似的場景,很多底層的神經員可以做相同的事,而用來識別日常生活中**的網路,則難以從x光片中提取有效的特徵。
另一種遷移學習的方法是對整個網路進行微調,假設你已訓練好了識別貓品種的神經網路,你的網路能對50種貓按品種進行分類。接下來你想對網路進行公升級,讓其能夠識別100種貓,這時你不應該只訓練網路的最後一層,而應該逐層對網路中每個節點的權重進行微調。顯然,只訓練最後幾層,是遷移學習最簡單的1.0版,而對節點權重進行微調(fine turing),就是更難的2.0版,通過將其他層的權重固定,只訓練一層這樣的逐層訓練,可以更好的完成上述任務。
另一種遷移學習的方式是借用網路的結構,即不是使用已訓練好的網路的權重,而是使用相同的網路結構,例如多少層,每層多少節點這樣的資訊,然後使用隨機生成的權重作為訓練的起點。例如你要訓練世界上第乙個識別fmri影象的神經網路,你就可以借鑑識別x光的神經網路。
和傳統的方法相比,遷移學習的另乙個好處其可以做多工目標的學習,傳統的模型面對不同型別的任務,需要訓練多個不同的模型。而有了遷移學習,可以先去實現簡單的任務,將簡單任務中的得到的知識應用到更難的問題上,從而解決標註資料缺少,標註不準確等問題。
這幅圖說明了該用哪種遷移學習,讓我們逐個來看。
1)右下角場景,待訓練的資料集較小,已訓練的模型和當前任務相似。此時可以只是重新訓練已有模型的靠近輸出的幾層,例如將imagenet中輸出層原來可以判別一萬種輸出的網路改的只能判別貓的品種,從而利用已有網路來做低層次的特徵提取。
2)左下角場景,待訓練的資料集較小,已訓練的模型和當前任務場景差距較大。例如你有的已訓練網路能識別出白天高速路上的違章車輛,你需要訓練乙個能識別出夜間違章車輛的模型,由於不管白天夜晚,交通規則是沒有變化的,所以你需要將網路靠近輸入的那幾層重新訓練,等到新的網路能夠提取出夜間車輛的基本資訊後,就可以借用已有的,在大資料集下訓練好的神經網路來識別違章車輛,而不用等夜間違章的車輛的**積累的足夠多之後再重新訓練。
3)左上角場景,待訓練的資料集較大,已有的模型和新模型的資料差異度很高。此時應該做的是從頭開始,重新訓練。
4)右上角場景,待訓練的資料集較大,已有模型的訓練資料和現有的訓練資料類似。此時應該使用原網路的結構,並保留每一層的節點權重,再逐層微調。
總結一下,遷移學習應用廣泛,尤其是在工程界,不管是語音識別中應對不同地區的口音,還是通過電子遊戲的模擬畫面前期訓練自動駕駛汽車,遷移學習已深度學習在工業界之所以成功的最堅實支柱,而學術界對遷移學習的研究則關注以下幾點,一是通過半監督學習減少對標註資料的依賴,應對標註資料的不對稱性,二是用遷移學習來提高模型的穩定性和可泛化性,不至於因為乙個畫素的變化而改變分類結果,三是使用遷移學習來做到持續學習,讓神經網路得以保留在舊任務中所學到的技能。
最後引申來看,整合學習,例如adaboost其背後的機制,也可以看成是另一種形式的遷移學習,通過多次使用訓練樣本,並給不同的樣本賦予不同的權重,整合學習也可以做到站在巨人的肩上。而dropout機制,也是讓網路訓練中隨機的丟失節點,從而使得網路不得不依據之前的模型進行遷移學習,從而提高泛化能力。遷移學習本質上利用的是不同任務間的相關性,用冗餘對抗複雜。
NAS資料遷移初探
阿里雲檔案儲存 network attached storage,簡稱nas 是面向阿里雲ecs例項 hpc和docker的檔案儲存服務,提供標準的檔案訪問協議,使用者無需對現有應用做任何修改,即可使用具備無限容量及效能擴充套件 單一命名空間 多共享 高可靠和高可用等特性的分布式檔案系統。相比於傳統...
caffe學習 學習初探
關於安裝 關於安裝裝置 關於學習 推薦大神denny的caffe學習總結 目前只看了一小小部分,講的通俗易懂,膜拜學習ing 將大神的mnist例項 測試數字,即識別1 9 總結重新跑一下,遇到的問題 importerror no module named skimage.io cannot use...
遷移學習 自我學習
最近在看ng的深度學習教程,看到self taught learning的時候,對一些概念感到很陌生。作為還清技術債的乙個環節,用半個下午的時間簡單搜了下幾個名詞,以後如果會用到的話再深入去看。監督學習在前一篇部落格中討論過了,這裡主要介紹下遷移學習 自我學習。因為監督學習需要大量訓練樣本為前提,同...