如果你最近開始從事深度學習,尤其是影象識別方面的工作,你可能已經在網上看到了大量的部落格文章,承諾教你如何在一個現代圖形處理器上用十幾行或更少的程式碼,只用幾分鐘就能建立一個世界級的影象分類器。令人震驚的不是承諾,而是大多數教程最終都實現了承諾。這怎麼可能呢?對於那些受過“傳統”機器學習技術訓練的人來說,為一個資料集開發的模型可以簡單地應用於另一個資料集的想法聽起來很荒謬。
答案當然是遷移學習,這是深層神經網路最迷人的特徵之一。在這篇文章中,我們將首先看看什麼是遷移學習,什麼時候它能起作用,以及為什麼在某些情況下它不能起作用,最後給出一些遷移學習最佳實踐的建議。
什麼是遷移學習?
Pan和Yang(2010)在他們關於這個主題的開創性論文中給出了遷移學習的一個優雅的數學定義(見2.2小節)。然而,就我們的目的而言,一個簡單得多的定義就足夠了:遷移學習使用為特定任務(有時稱為源任務)所學的知識來解決不同的任務(目的任務)。當然,假設源任務和標的任務非常相似。這一假設是遷移學習的核心。因此,我們必須首先理解為什麼遷移學習首先起作用。
你可能還記得,典型的當代神經網路-比方說,多層摺積深度神經網路(cDNN)-由神經元層組成,每個神經元層根據訓練結果計算出的網路權重和偏差來反饋其結果。這種架構是根據人腦中與此相當相似的一個特定過程形成的,即Ventral Visual Stream。
Ventral視覺流的概述。視覺神經(深紫色)將來自視網膜兩側的資訊傳送到視覺交叉(OX),在那裡它們根據來自視野的左側還是右側而被分開。外側膝狀體(LGN)將輸入型別分開。LGN兩側的投影進入相應的主視區(V1)。從那裡,它以越來越複雜和語意化的方式穿越Ventral視覺流。
Ventral流始於初級視皮層或V1,即枕葉的一部分。V1接收來自外側膝狀體的視覺資訊,這是丘腦的一部分,向枕葉傳送光學資訊,同時將其分成兩類資訊-對確定你正在看什麼更有用的輸入(LGN的小細胞層)和對確定某物在哪裡更有用的輸入(LGN的大細胞層)。兩者最終都在初級視覺皮層,但Ventral視覺流是由來自LGN小細胞層的“where”資訊提供的:來自視網膜神經節細胞(稱為P細胞)的關於物體的緩慢但持續的詳細資訊。
P細胞的輸出(有時稱為投射)隨後在穿過Ventral視覺流時被處理,從V1穿過V2、V4,最終到達下顳葉。透過興奮實驗發現,雖然V1的細胞對非常簡單的樣式(主要是邊緣、方向、顏色和空間頻率)做出反應,但V2對更複雜的概念做出反應,包括某些格式塔現象,如“主觀輪廓”。最終,神經元逐漸進入下顳葉,對越來越複雜的樣式做出反應。
CaffeNet的貓識別器,由DeconvNet逆向工程設計。請註意,隨著層數的增加,語意也在增加,從摺積層1中的簡單幾何圖形到背景關係2中的幾何圖形、複合幾何圖形(CL3和CL4)到物件類語意上有意義的特定過濾器(CL5)。影象來自於Qin等人(2018年)。
我們看到這在深層神經網路中被覆制。一種被稱為澤勒-弗格斯deconvolutional的技術讓我們能夠看到特定層(在本文中通常被稱為“過濾器”)最能響應(啟用最大化)-也就是說,最能激發特定神經元的“種類”結構(你可能熟悉谷歌DeepDream演演算法中的一些形狀)。隨著層數的增加,形狀的複雜性也會增加。雖然我們在第一層看到簡單的邊緣,甚至是顏色塊,但後面的層顯示出更複雜的圖案,最後一層的啟用通常被認為是預期的類別。它們也變得越來越語意化-線的組合被一起加權,作為識別三角形的過濾器
三角形過濾器能識別兩隻耳朵,與其他過濾器結合,它開始識別狗的臉和貓的臉。
傳遞學習的思想是固有的,因為神經網路是分層獨立的-也就是說,你可以在特定層之後移除所有層,用不同數量的神經元和隨機權重栓在完全連線的層上,並得到一個工作的神經網路。這是遷移學習的基礎。在遷移中學習,我們使用訓練有素、構建良好的網路在大型裝置上所學到的知識,並將其應用於小型裝置上提高檢測器的效能(通常提高幾個數量級!)資料集。
遷移還是不遷移
從上面可以看出,遷移學習在某些場景下起作用,有些卻不一定。遷移學習的最大好處在於標的資料集相對較小。在許多這種情況下,模型可能傾向於過擬合,資料擴充可能並不總能解決整個問題。因此,當源任務的模型在比標的任務更大的訓練集中訓練時,遷移學習得到了最好的應用。這可能是因為特定事物的實體很難獲得(例如,當致力於合成或識別隻有很少樣本存在的聲音時),或者標記實體很難獲得(例如,在放射診斷學的情況下,標記影象通常很難獲得,尤其是在罕見的情況下)。
如果存在過擬合風險,每個任務的資料量大致相同的模型仍可能受益於遷移學習,這種風險通常發生在標的任務是高度特定於領域的。事實上,在訓練一個大的領域特定的DCNN可能會適得其反,因為它可能會過度到特定的領域。總的來說,在源任務和標的任務的訓練集大小相同的情況下,有時使用遷移學習是明智的。
實際上,在計算機視覺領域,使用經過大量影象資料集訓練的黃金標準網路非常普遍,例如影象網120萬張超過1000個類別的影象甚至是非特定領域的任務,如評估胸片。許多現代機器學習包,特別是像Caffe、fastai和keras這樣的高階包,都有它們自己的內建的model zoo,可以方便地訪問預先訓練好的DCNN。因此,這僅僅是移除最頂層、新增一個或多個新層以及重新訓練(微調)模型的問題。新模型將立即受益於數周的艱苦訓練,這些訓練是為了建立像ResNet50這樣的模型,NASNet或Inceptionv3。總的來說,如果使用得當,
遷移學習會給你帶來三大好處:更高的起始精度、更快的收斂速度和更高的漸近精度(訓練收斂的精度水平)。最近,一些相當有前途的網站湧現出來,對各種預先訓練好的模型進行分類-我最喜歡的是模型倉庫(Model Depot)和ModelZoo,後者有一個可以透過框架和解決方案過濾的龐大資料庫,包括許多預先訓練好的GANs。
一些最佳實踐
大多數深度學習框架允許你“有選擇地解凍”深度神經網路的最後n層,剩下的部分將被凍結。總的來說,這個特性並不像最初聽起來那麼有用。經驗表明,花時間進行徹底的model introspection並試圖確定在哪裡切斷解凍幾乎是不值得的。一個例外是,如果你正在訓練一個可能不適合你的GPU記憶體的非常大的網路,在這種情況下,資源限制將決定你能夠解凍多少。
與其解凍特定的層,使用不同的學習速率可能是更好的主意,其中學習速率是基於每層來確定的。底層將具有非常低的學習率,因為這些概括得非常好,主要響應邊緣、斑點和其他瑣碎的幾何形狀,而響應更複雜特徵的層將具有更高的學習率。在過去,2:4:6規則(10的負冪)對我來說非常有效-對最底層的幾層使用10^-6學習率,對其他傳輸層使用10^-4學習率,對任何其他層使用10^-2學習率。我還聽說過其他人使用不同架構的2:3:4:5:6或2:3:4。對於ResNet及其衍生產品,我總是覺得2:4:6比2:3:4更舒服,但我絕對沒有經驗證據支援這一點。
透過retraining任何層次來進行遷移學習並不總是一個好主意。如果目的地任務基於一個小資料集,然而該資料集非常類似於網路所訓練的資料集(例如,識別影象網訓練的結果50中沒有包括的一個新的動物或車輛類別),保持權重不變,並且在輸出機率之上放置一個線性分類器可能更有用,在不冒過擬合風險的情況下產生大致相似的結果。
當遷移到具有相對較大資料集的任務時,你可能希望從頭開始訓練網路(這將使它根本不會遷移學習)。與此同時-假設這樣一個網路將被隨機值初始化,那麼透過使用預先處理的權重,你不會有任何損失!解凍整個網路,移除輸出層,用與標的任務類數量匹配的輸出層替換,並微調整個網路。
最後:知道你在用什麼。意識到自己正在從什麼樣的網路遷移不僅僅是一種好的做法,也是一種重要的深度學習手藝。雖然像ResNet這樣普遍信任的主要工具已經被反覆證明是構建良好的,但是堅實的網路,選擇一個適合你的任務的網路,並且如果存在的話,可能是幾種選擇中最有效率的,正是深度學習專業人士獲得高薪的原因。如果使用非標準網路-任何沒有數百個同行評審應用程式的都被視為非標準網路-請放心,網路架構是合理的,確實是最佳選擇。像TensorFlow圖形網路視覺化工具或Caffe的原型文字格式的神經網路網路觀測器(如果你只是想玩玩,Yang Lei有一個有趣的拖放原型文字編輯器)這樣的工具可以很好地洞察神經網路的內部,並有助於評估網路架構。當使用一個不熟悉的網路時,我也發現了內省,包括解除虛擬網路或其他逆向工程解決方案觀察層和神經元水平的啟用最大值會有很大的好處。
朋友會在“發現-看一看”看到你“在看”的內容