【記錄】深度學習之蒸餾法訓練網絡

《Distilling the Knowledge in a Neural Network》
Geoffrey Hintion

論文鏈接

在這裏插入圖片描述

博主的一些絮絮叨叨:在嗶哩嗶哩看視頻的時候瞭解到蒸餾方法,該方法可以將大規模的訓練模型中的細粒度知識遷移至小規模模型的訓練當中,使其學習的速度效率提高了很多,並且在小粒度的任務當中對於容易引起困惑的實例的分類效果得到了加強。準備學習一下這方面的知識,意外發現剔除蒸餾網絡的居然是偶像Hinton在論文裏提出來的。。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚

問題摘要:

在幾乎所有的機器學習算法當中,我們都可以通過對同一數據集進行多次學習得到數個不同的模型,並將各模型的預測結果作以加權作爲最終輸出這一簡單的方式來提高任務性能。然而顯然這一方法在計算代價上經常過於昂貴。而在這篇文獻當中作者提出了一種所謂的“蒸餾”法,將大規模的訓練模型中的細粒度知識遷移至小規模模型的訓練當中,使其學習的速度效率提高了很多,並且在小粒度的任務當中對於容易引起困惑的實例的分類效果得到了加強。

因此,本文主要做出了以下兩點貢獻:

  1. 提出一種 知識蒸餾(Knowledge Distillation)方法,從大模型所學習到的知識中學習有用信息來訓練小模型,在保證性能差不多的情況下進行模型壓縮
  2. 提出一種新的 集成模型(Ensembles of Models)方法,包括一個通用模型(Generalist Model)和多個專用模型(Specialist Models),其中,專用模型用來對那些通用模型無法區分的細粒度(Fine-grained)類別的圖像進行區分

簡介

在大規模的機器學習領域,如物體檢測、語音識別等爲了獲得較好的performance常常會訓練很複雜的模型,因爲不需要考慮實時性、計算量等因素。但是,在部署階段就需要考慮模型的大小、計算複雜度、速度等諸多因素,因此我們需要更小更精煉的模型用於部署。這種訓練和部署階段不同的模型形態,可以類比於自然界中很多昆蟲有多種形態以適應不同階段的需求。具體地,如蝴蝶在幼蟲以蛹的形式存儲能量和營養來更好的發育,但是到了後期就爲了更好的繁殖和移動它就呈現了另外一種完全不一樣的形態。

有一種直觀的概念就是,越是複雜的網絡具有越好的描述能力,可以用來解決更爲複雜的問題。我們所說的模型學習得到“知識”就是模型參數,說到底我們想要學習的是一個輸入向量到輸出向量的映射,而不必太過於去關心中間映射過程。

Knowledge Distillation

在這裏插入圖片描述

Knowledge Distillation 的整體框架如上圖所示,下面介紹一下圖中的幾個概念

  • cumbersome model:複雜的大模型
  • distilled model:經過knowledge distillation後學習得到的小模型
  • hard targets:輸入數據所對應的label 例:[0,0,1,0]
  • soft targets:輸入數據通過大模型(cumbersome model)所得到的softmax層的輸出 例:[0.01,0.02,0.98,0.17]
soft targets 在訓練過程中可以提供更大的信息熵,將已訓練模型的知識更好地傳遞給新模型
  • softmax:
    在這裏插入圖片描述

其中 qi 表示第 i 類的輸出概率,zi、zj 表示 softmax 層的輸入(即 logits),T 爲溫度係數,用來控制輸出概率的soft程度。

溫度係數 T 的意義可以用如下圖來理解,圖中 分別對用同一組z在T爲(5,25,50)下的值,可以看出,T越大,值之間的差就越小(折線更平緩,即更加的 soft),但是相對的大小關係依然沒變。

在這裏插入圖片描述
實現流程:

  1. 使用一個較大的 T 和 hard targets 訓練一個大模型(cumbersome model),生成soft targets
  2. 使用 soft targets 訓練一個簡單的小模型(distilled model)(在測試時,T = 1)

distilled model 的目標函數由以下兩項的加權平均組成:

  • soft targets 和小模型的輸出數據的交叉熵(保證小模型和大模型的結果儘可能一致
  • hard targets 和小模型的輸出數據的交叉熵(保證小模型的結果和實際類別標籤儘可能一致

在這裏插入圖片描述

Training ensembles of model

當數據集非常巨大以及模型非常複雜時,訓練多個模型所需要的資源是難以想象的,因此提出一種新的集成模型方法,包括:

  • 一個 Generalist model :使用全部數據進行訓練
  • 多個 Specialist models :對某些易混淆的類別進行專門訓練的專有模型

Specialist models 的訓練集中,一半是初始訓練集中某些特定類別的子集(special subset),另一半由剩餘初始訓練集中隨機採樣組成

在該方法中,只有 generalist model 耗時較長,剩餘的 specialist model 由於訓練數據較少,且相互獨立,可以並行訓練,因此整體運算量少了非常多。

但是,specialist model由於只使用特定類別的數據進行訓練,因此模型對別的類別的判斷能力幾乎爲0,導致非常容易過擬合,我們可以採用如下方法來解決

  • specialist model 通過 hard targets 訓練完成後,再使用由 generalist model 生成的 soft targets 進行 finetune,這樣做是因爲 soft targets 保留了一些對於其他類別數據的信息,因此模型可以在原來基礎上學到更多知識,有效避免了過擬合

實現流程:

訓練階段:
訓練一個 generalist model
generalist model 生成的 confusion matrix 確定出每一個 specialist model 所對應的類別的子集
對每個類別子集獨立訓練每一個 specialist model(可並行訓練)

測試階段:

通過 generalist model 生成預測概率
由預測概率選擇相關的 specialist model 進行再次預測
對相關 specialist model 的輸出進行加權組合運算,並作爲最終的預測結果

參考博客

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