首頁  >  文章  >  科技週邊  >  大模型精準反哺小模型,知識蒸餾可協助提升 AI 演算法效能

大模型精準反哺小模型,知識蒸餾可協助提升 AI 演算法效能

WBOY
WBOY轉載
2023-04-08 20:01:092153瀏覽

01 知識蒸餾誕生的背景

來,深度神經網路(DNN)在工業界和學術界都取得了巨大成功,尤其是在 電腦視覺任務 方面。深度學習的成功很大程度上歸功於其具有數十億參數的用於編碼資料的可擴展性架構,其訓練目標是在已有的訓練資料集上建模輸入和輸出之間的關係,其效能高度依賴網路的複雜程度及有標註訓練資料的數量和品質。

相較於電腦視覺領域的傳統演算法,大多數基於DNN 的模型都因為 過參數化 而具備強大的 泛化能力 ,這種泛化能力體現在對於某個問題輸入的所有數據上,模型能給出較好的預測結果,無論是訓練數據、測試數據,或是屬於該問題的未知數據。

在當前深度學習的背景下,演算法工程師為了提升業務演算法的預測效果,常常會有兩種方案:

使用過參數化的更複雜的網絡,這類網絡學習能力非常強,但需要大量的運算資源來訓練,而且推理速度較慢。

整合模型,將許多效果較弱的模型整合起來,通常包括參數的整合和結果的整合。

這兩種方案能顯著提升現有演算法的效果,但都提升了模型的規模,產生了較大的運算負擔,所需的運算和儲存資源很大。

在工作中,各種演算法模型的最終目的都是要 服務某個應用 。就像在買賣中我們需要控制收入和支出一樣。在工業應用中,除了要求模型要有好的預測以外, 計算資源的使用也要嚴格控制,不能只考慮結果不考慮效率。在輸入資料編碼量高的電腦視覺領域,運算資源較顯有限,控制演算法的資源佔用就更為重要。

通常來說,規模較大的模型預測效果更好,但訓練時間長、推理速度慢的問題使得模型難以即時部署。尤其是在視訊監控、自動駕駛汽車和高吞吐量雲端環境等運算資源有限的設備上,響應速度顯然不夠用。規模較小的模型雖然推理速度較快,但是因為參數量不足,推理效果和泛化表現可能就沒那麼好。如何權衡大規模模型和小規模模型一直是個熱門話題,目前的解決方法大多是 根據部署環境的終端設備效能選擇合適規模的 DNN 模型。

如果我們希望有一個規模較小的模型,能在保持較快推理速度的前提下,達到和大模型相當或接近的效果該如何做到呢?

在機器學習中,我們常常假定輸入到輸出有一個潛在的映射函數關係,從頭學習一個新模型就是輸入資料和對應標籤中一個 近似 未知的映射函數。在輸入資料不變的前提下,從頭訓練一個小模型,從經驗上來看很難接近大模型的效果。為了提升小模型演算法的效能,一般來說最有效的方式是標註更多的輸入數據,也就是提供更多的監督信息,這可以讓學習到的映射函數更魯棒,性能更好。舉兩個例子,在電腦視覺領域中,實例分割任務透過額外提供掩膜訊息,可以提高目標包圍框檢測的效果;遷移學習任務透過提供在更大資料集上的預訓練模型,顯著提升新任務的預測效果。因此 提供更多的監督資訊 ,可能是縮短小規模模型和大規模模式差距的關鍵。

依照先前的說法,想要獲取更多的監督資訊意味著標註更多的訓練數據,這往往需要龐大的成本,那麼有沒有一種低成本又高效的監督資訊取得方法呢? 2006 年的文獻[1]中指出,可以讓新模型近似(approximate)原始模型(模型即函數)。因為原模型的函數是已知的,新模型訓練時等於天然地增加了更多的監督訊息,這顯然要更可行。

進一步思考,原模型帶來的監督資訊可能蘊含著不同維度的知識,這些與眾不同的資訊可能是新模型自己無法捕捉到的,在某種程度上來說,這對於新模型也是一種「跨域」的學習。

2015年Hinton在論文《Distilling the Knowledge in a Neural Network》[2] 中沿用近似的思想,率先提出「 知識蒸餾 (Knowledge Distillation, KD)」的概念:可以先訓練出一個大而強的模型,然後將其包含的知識轉移給小的模型,就實現了“保持小模型較快推理速度的同時,達到和大模型相當或接近的效果”的目的。這其中先訓練的大模型可以稱為教師模型,後訓練的小模型則稱為學生模型,整個訓練過程可以形像地比喻為「師生學習」。隨後幾年,湧現了大量的知識蒸餾與師生學習的工作,為工業界提供了更多新的解決想法。目前,KD 已廣泛應用於兩個不同的領域:模型壓縮和知識遷移[3]。

大模型精準反哺小模型,知識蒸餾可協助提升 AI 演算法效能


02 Knowledge Distillation

簡介 

Knowledge Distillation 是一種基於「教師-學生網路」思想的模型壓縮方法,由於簡單有效,在工業界被廣泛應用。其目的是將已經訓練好的大模型所包含的知識-蒸餾(Distill),提取到另一個小的模型中去。那怎麼讓大模型的知識,或者說泛化能力轉移到小模型身上呢? KD 論文把大模型對樣本輸出的機率向量當作軟目標(soft targets)提供給小模型,讓小模型的輸出盡量去向這個軟目標靠(原來是往one-hot 編碼上靠),去近似學習大模型的行為。

在傳統的硬標籤訓練過程中,所有負標籤都被統一對待,但這種方式把類別間的關係割裂開了。比如說辨識手寫數字,同是標籤為“3”的圖片,可能有的比較像“8”,有的比較像“2”,硬標籤區分不出來這個信息,但是一個訓練良好的大模型可以給出。大模型 softmax 層的輸出,除了正例之外,負標籤也帶有大量的訊息,例如某些負標籤對應的機率遠大於其他負標籤。近似學習此行為使得每個樣本帶給學生網路的資訊量大於傳統的訓練方式。

因此,作者在訓練學生網路時修改了一下損失函數,讓小模型在擬合訓練資料的真值(ground truth)標籤的同時,也要擬合大模型輸出的機率分佈。這個方法叫做知識 蒸餾訓練 (Knowledge Distillation Training, KD Training)。知識蒸餾過程所使用的訓練樣本可以和訓練大模型用的訓練樣本一樣,或是另找一個獨立的 Transfer set。

大模型精準反哺小模型,知識蒸餾可協助提升 AI 演算法效能

方法詳解 

具體來說,知識蒸餾使用的是Teacher—Student 模型,其中teacher 是「知識」的輸出者,student 是「知識」的接受者。知識蒸餾的過程分為2 個階段:

  • 教師模型訓練:訓練」Teacher 模型「, 簡稱為Net-T,它的特徵是模型相對複雜,也可以由多個分別訓練的模型整合而成。對「Teacher模型」不作任何關於模型架構、參數量、是否集成方面的限制,因為該模型不需要部署,唯一的要求就是,對於輸入X, 其都能輸出Y,其中Y 經過softmax 的映射,輸出值對應相應類別的機率值。
  • 學生模型訓練:訓練「Student 模型」, 簡稱為 Net-S,它是參數量較小、模型結構相對簡單的單一模型。同樣的,對於輸入 X,其都能輸出 Y,Y 經過 softmax 映射後同樣能輸出對應對應類別的機率值。

由於使用softmax 的網路的結果很容易走向極端,即某一類的置信度超高,其他類別的置信度都很低,此時學生模型關注到的正類信息可能還是僅屬於某一類。除此之外,因為不同類別的負類資訊也有相對的重要性,所有負類分數都差不多也不好,達不到知識蒸餾的目的。為了解決這個問題,引入溫度(Temperature)的概念,使用高溫將小機率值所攜帶的資訊蒸餾出來。具體來說,在 logits 過 softmax 函數前除以溫度 T。

訓練時先將教師模型學習到的知識蒸餾給小模型,具體來說對樣本X,大模型的倒數第二層先除以一個溫度T,然後透過softmax 預測一個軟目標Soft target,小模型也是一樣,倒數第二層除以同樣的溫度T,然後透過softmax 預測一個結果,再把這個結果和軟目標的交叉熵當作訓練的total loss 的一部分。然後再將小模型正常的輸出和真值標籤(hard target)的交叉熵作為訓練的 total loss 的另一部分。 Total loss 把這兩個損失加權合起來作為訓練小模型的最終的 loss。

在小模型訓練好了要預測時,就不需要再有溫度 T 了,直接按照常規的 softmax 輸出就可以了。

03 FitNet 

簡介 

FitNet 論文在蒸餾時引入了中間層隱藏映射(intermediate-level hints)來指導學生模型的訓練。使用一個寬而淺的教師模型來訓練一個窄而深的學生模型。在進行 hint 引導時,提出使用一個層來匹配 hint 層和 guided 層的輸出 shape,在後人的工作裡面常被稱為 adaptation layer。

總的來說,相當於在做知識蒸餾時,不僅用到了教師模型的 logit 輸出,還用到了教師模型的中間層特徵圖作為監督資訊。可以想到的是,直接讓小模型在輸出端模仿大模型,這個對於小模型來說太難了(模型越深越難訓,最後一層的監督信號要傳到前面去還是挺累的),不如在中間加一些監督訊號,使得模型在訓練時可以從逐層接受學習更難的映射函數,而不是直接學習最難的映射函數;除此之外,hint 引導加速了學生模型的收斂,在在一個非凸問題上找到更好的局部最小值,使得學生網路能更深的同時,還能訓練得更快。這感覺就好像是,我們的目的是讓學生做高考題,那麼就先把國中的題目給他教會了(先讓小模型用前半個模型學會提取圖像底層特徵),然後再回到本來的目的、去學高考題(用KD 調整小模型的全部參數)。

這篇文章是提出蒸餾中間特徵圖的始祖,提出的演算法很簡單,但思路具有開創性。

大模型精準反哺小模型,知識蒸餾可協助提升 AI 演算法效能

方法詳解 

FitNets 的具體做法是:

  • 確定教師網路,並訓練成熟,將教師網路的中間特徵層hint 提取出來。
  • 設定學生網絡,一般較教師網絡較窄且較深。訓練學生網路使得學生網路的中間特徵層與教師模型的 hint 相符。由於學生網路的中間特徵層和與教師 hint 尺寸不同,因此需要在學生網路中間特徵層後添加回歸器用於特徵升維,以匹配 hint 層尺寸。其中匹配教師網路的 hint 層與回歸器轉換後的學生網路的中間特徵層的損失函數為均方差損失函數。

實際訓練的時候往往和上一節的KD Training 聯合使用,用兩階段法訓練:先用hint training 去pretrain 小模型前半部分的參數,再用KD Training 去訓練全體參數。由於蒸餾過程中使用了更多的監督信息, 基於中間特徵圖的蒸餾方法比基於結果 logits 的蒸餾方法效果要好 ,但是訓練時間更久。

04 總結

知識蒸餾對於將知識從整合或從高度正規化的大型模型轉移到較小的模型中非常有效。即使在用於訓練蒸餾模型的遷移資料集中缺少任何一個或多個類別的資料時,蒸餾的效果也非常好。在經典之作 KD 和 FitNet 提出之後,各種各樣的蒸餾方法如雨後春筍般湧現。未來我們也希望能在模型壓縮和知識遷移領域中做出更進一步的探索。

作者簡介 

馬佳良,網易易盾資深電腦視覺演算法工程師,主要負責電腦視覺演算法在內容安全領域的研發、最佳化與創新。

以上是大模型精準反哺小模型,知識蒸餾可協助提升 AI 演算法效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除