十歲的小男孩
本文為終端移植的一個小章節。
引言
蒸餾神經網絡,是Hinton在上面這篇論文提出來的一個概念。文章開篇用一個比喻來引入網絡蒸餾:
昆蟲作為幼蟲時擅於從環境中汲取能量,但是成長為成蟲后確是擅於其他方面,比如遷徙和繁殖等。
同理神經網絡訓練階段從大量數據中獲取網絡模型,訓練階段可以利用大量的計算資源且不需要實時響應。然而到達使用階段,神經網絡需要面臨更加嚴格的要求包括計算資源限制,計算速度要求等等。
由昆蟲的例子我們可以這樣理解神經網絡:一個復雜的網絡結構模型是若干個單獨模型組成的集合,或者是一些很強的約束條件下(比如dropout率很高)訓練得到的一個很大的網絡模型。一旦復雜網絡模型訓練完成,我們便可以用另一種訓練方法:“蒸餾”,把我們需要配置在應用端的縮小模型從復雜模型中提取出來。
“蒸餾”的難點在於如何縮減網絡結構但是把網絡中的知識保留下來。知識就是一幅將輸入向量導引至輸出向量的地圖。做復雜網絡的訓練時,目標是將正確答案的概率最大化,但這引入了一個副作用:這種網絡為所有錯誤答案分配了概率,即使這些概率非常小。
我們將復雜模型轉化為小模型時需要注意保留模型的泛化能力,一種方法是利用由復雜模型產生的分類概率作為“軟目標”來訓練小模型。在轉化階段,我們可以用同樣的訓練集或者是另外的“轉化”訓練集。當復雜模型是由簡單模型復合而成時,我們可以用各自的概率分布的代數或者幾何平均數作為“軟目標”。當“軟目標的”熵值較高時,相對“硬目標”,它每次訓練可以提供更多的信息和更小的梯度方差,因此小模型可以用更少的數據和更高的學習率進行訓練。
像MNIST這種任務,復雜模型可以給出很完美的結果,大部分信息分布在小概率的軟目標中。比如一張2的圖片被認為是3的概率為0.000001,被認為是7的概率是0.000000001。Caruana用logits(softmax層的輸入)而不是softmax層的輸出作為“軟目標”。他們目標是是的復雜模型和小模型分別得到的logits的平方差最小。而我們的“蒸餾法”:第一步,提升softmax表達式中的調節參數T,使得復雜模型產生一個合適的“軟目標” 第二步,采用同樣的T來訓練小模型,使得它產生相匹配的“軟目標”
“轉化”訓練集可以由未打標簽的數據組成,也可以用原訓練集。我們發現使用原訓練集效果很好,特別是我們在目標函數中加了一項之后。這一項的目的是是的小模型在預測實際目標的同時盡量匹配“軟目標”。要注意的是,小模型並不能完全無誤的匹配“軟目標”,而正確結果的犯錯方向是有幫助的。
設計思想
在用神經網絡訓練大規模數據集時,為了處理復雜的數據分布:一種做法是建立復雜的神經網絡模型,例如含有上百層的殘差網絡,這種復雜的網絡往往含有多達幾百萬個參數;
另一種做法往往會混合多種模型,將幾個大規模的神經網絡在同一個數據集上訓練好,然后綜合(ensemble)多個模型,得到最終的分類結果。
但是這種復雜模型,一是在新的場景下重新訓練成本過高,二是由於模型過於龐大而難以大規模部署(deployment)。
所以,最基本的想法就是將大模型學習出來的知識作為先驗,將先驗知識傳遞到小規模的神經網絡中,之后實際應用中部署小規模的神經網絡。這樣做有三點依據:
大規模神經網絡得到的類別預測包含了數據結構間的相似性;
有了先驗的小規模神經網絡只需要很少的新場景數據就能夠收斂;
Softmax函數隨着溫度變量(temperature)的升高分布更均勻。
1. 數據結構間的相似性:
神經網絡模型在預測最終的分類結果時,往往是通過softmax函數產生概率分布的:
這里將T定義為溫度參數,是一個超參數,q_i是i類的概率值大小。
比如一個大規模網絡,如ImageNet這樣的大網絡,能夠預測上千種類別,正確類別的概率值能夠達到0.9,錯誤類的概率值可能分布在10^-8~10^-3這個區間中。雖然每個錯誤類別的的概率值都很小,但是10^-3還是比10^-8高了五個數量級,這也反映了數據之間的相似性。
比如一只狗,在貓這個類別下的概率值可能是0.001,而在汽車這個類別下的概率值可能就只有0.0000001不到,這能夠反映狗和貓比狗和汽車更為相似,這就是大規模神經網絡能夠得到的更為豐富的數據結構間的相似信息。
2. 將大規模神經網絡的soft target作為訓練目標
由於大規模神經網絡在訓練的時候雖然是通過0-1編碼來訓練的,由於最后一層往往使用softmax層來產生概率分布,所以這個概率分布其實是一個比原來的0-1 編碼硬目標(hard target)更軟的軟目標(soft target)。這個分布是由很多(0,1)之間的數值組成的。
同一個樣本,用在大規模神經網絡上產生的軟目標來訓練一個小的網絡時,因為並不是直接標注的一個硬目標,學習起來會更快收斂。
更巧妙的是,這個樣本我們甚至可以使用無標注的數據來訓練小網絡,因為大的神經網絡將數據結構信息學習保存起來,小網絡就可以直接從得到的soft target中來獲得知識。
這個做法類似學習了樣本空間嵌入(embedding)信息,從而利用空間嵌入信息學習新的網絡。
3. 隨着溫度上升,軟目標分布更均勻
公式(1)中,T參數是一個溫度超參數,按照softmax的分布來看,隨着T參數的增大,這個軟目標的分布更加均勻。
因此:
首先用較大的T值來訓練模型,這時候復雜的神經網絡能夠產生更均勻分布的軟目標;
之后小規模的神經網絡用相同的T值來學習由大規模神經產生的軟目標,接近這個軟目標從而學習到數據的結構分布特征;
最后在實際應用中,將T值恢復到1,讓類別概率偏向正確類別。
所以,蒸餾神經網絡取名為蒸餾(Distill),其實是一個非常形象的過程。
我們把數據結構信息和數據本身當作一個混合物,分布信息通過概率分布被分離出來。首先,T值很大,相當於用很高的溫度將關鍵的分布信息從原有的數據中分離,之后在同樣的溫度下用新模型融合蒸餾出來的數據分布,最后恢復溫度,讓兩者充分融合。這也可以看成Prof. Hinton將這一個遷移學習過程命名為蒸餾的原因。
論文
A. Distilling the Knowledge in a Neural Network
B. A survey on transfer learning.
C. Model compression.
Buciluǎ, Cristian, Rich Caruana, andAlexandru Niculescu-Mizil. "Model compression." Proceedings of the12th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2006.
知識應該是開源的,歡迎斧正。929994365@qq.com