【說在前面】本人博客新手一枚,象牙塔的老白,職業場的小白。如下內容僅爲我的看法,歡迎批評指正,不喜勿噴![握手][握手]html
【再囉嗦一下】本文銜接上兩個隨筆:人工智能中小樣本問題相關的系列模型演變及學習筆記(一):元學習、小樣本學習python
【再囉嗦一下】本文銜接上兩個隨筆:人工智能中小樣本問題相關的系列模型演變及學習筆記(二):生成對抗網絡 GANgit
【再囉嗦一下】本文銜接上兩個隨筆:人工智能中小樣本問題相關的系列模型演變及學習筆記(三):遷移學習面試
知識蒸餾被普遍的用於模型壓縮和遷移學習當中。算法
本文主要參考:模型壓縮中知識蒸餾技術原理及其發展示狀和展望網絡
知識蒸餾能夠將一個網絡的知識轉移到另外一個網絡,兩個網絡能夠是同構或者異構。作法是先訓練一個teacher網絡,而後使用這個teacher網絡的輸出和數據的真實標籤去訓練student網絡。架構
知識蒸餾是對模型的能力進行遷移,根據遷移的方法不一樣能夠簡單分爲基於目標驅動的算法、基於特徵匹配的算法兩個大的方向。app
Hinton最先在文章「Distilling the knowledge in a neural network」中提出了知識蒸餾的概念,即knowledge distilling,對後續的許多算法都產生了影響,其框架示意圖以下:框架
從上圖中能夠看出,包括一個teacher model和一個student model,teacher model須要預先訓練好,使用的就是標準分類softmax損失,可是它的輸出使用帶溫度參數T的softmax函數進行映射,以下:機器學習
當T=1時,就是softmax自己。當T>1,稱之爲soft softmax,T越大,由於輸入 zk 產生的機率 f(zk) 差別就會越小。之因此要這麼作,其背後的思想是:當訓練好一個模型以後,模型爲全部的誤標籤都分配了很小的機率。然而實際上對於不一樣的錯誤標籤,其被分配的機率仍然可能存在數個量級的懸殊差距。這個差距,在softmax中直接就被忽略了,但這實際上是一部分有用的信息。
訓練的時候小模型有兩個損失:一個是與真實標籤的softmax損失,一個是與teacher model的蒸餾損失,定義爲KL散度。
當teacher model和student model各自的預測機率爲pi,qi時,其蒸餾損失部分梯度傳播以下:
能夠看出形式很是的簡單,梯度爲二者預測機率之差,這就是最簡單的知識蒸餾框架。
Hinton等人提出的框架是在模型最後的預測端,讓student模型學習到與teacher模型的知識,這能夠稱之爲直接使用優化目標進行驅動的框架,相似的還有ProjectionNet。
PrjojectNet同時訓練一個大模型和一個小模型,二者的輸入都是樣本,其中大模型就是普通的CNN網絡,而小模型會對輸入首先進行特徵投影。每個投影矩陣P都對應了一個映射,由一個d-bit長的向量表示,其中每個bit爲0或者1,這是一個更加稀疏的表達。特徵用這種方法簡化後天然就可使用更加輕量的網絡的結構進行訓練。那麼怎麼完成這個過程呢?文中使用的是locality sensitive hashing(LSH)算法,這是一種聚類任務中經常使用的降維的算法。
優化目標包含了3部分,分別是大模型的損失,投影損失,以及大模型和小模型的預測損失,所有使用交叉熵,各自定義以下:
基於優化目標驅動的方法其思想是很是直觀,就是結果導向型,中間怎麼實現的不關心,對它進行改進的一個有趣方向是GAN的運用。
結果導向型的知識蒸餾框架的具體細節是難以控制的,會讓訓練變得不穩定且緩慢。一種更直觀的方式是將teacher模型和student模型的特徵進行約束,從而保證student模型確實繼承了teacher模型的知識,其中一個典型表明就是FitNets,FitNets將比較淺而寬的Teacher模型的知識遷移到更窄更深的Student模型上,框架以下:
FitNets背後的思想是,用網絡的中間層的特徵進行匹配,不只僅是在輸出端。它的訓練包含了兩個階段:
(1)第一階段就是根據Teacher模型的損失來指導預訓練Student模型。記Teacher網絡的某一中間層的權值Wt爲Whint,意爲指導的意思。Student網絡的某一中間層的權值Ws爲Wguided,即被指導的意思,在訓練之初Student網絡進行隨機初始化。須要學習一個映射函數Wr使得Wguided的維度匹配Whint,獲得Ws',並最小化二者網絡輸出的MSE差別做爲損失,以下:
(2)第二個訓練階段,就是對整個網絡進行知識蒸餾訓練,與上述Hinton等人提出的策略一致。不過FitNet直接將特徵值進行了匹配,先驗約束太強,有的框架對激活值進行了歸一化。
基於特徵空間進行匹配的方法實際上是知識蒸餾的主流,相似的方法很是多,包括注意力機制的使用、相似於風格遷移算法的特徵匹配等。
知識蒸餾還有很是多有意思的研究方向,這裏咱們介紹其中幾個。
機器學習模型要解決的問題以下,其中y是預測值,x是輸入,L是優化目標,θ1是優化參數。
由於深度學習模型沒有解析解,每每沒法獲得最優解,咱們常常會經過添加一些正則項來促使模型達到更好的性能。
Born Again Neural Networks框架思想是經過增長一樣的模型架構,而且從新進行優化,以增長一個模型爲例,要解決的問題以下:
具體的流程就是:
(1)訓練一個教師模型使其收斂到較好的局部值。
(2)對與教師模型結構相同的學生模型進行初始化,其優化目標包含兩部分,一部分是要匹配教師模型的輸出分佈,好比採用KL散度。另外一部分就是與教師模型訓練時一樣的目標,即數據集的預測真值。
而後經過下面這樣的流程,一步一步往下傳,因此被形象地命名爲「born again」。
相似的框架還有Net2Net,network morphism等。
通常知識蒸餾框架都須要包括一個Teacher模型和一個Student模型,而Deep mutual learning則沒有Teacher模型,它經過多個小模型進行協同訓練,框架示意圖以下。
Deep mutual learning在訓練的過程當中讓兩個學生網絡相互學習,每個網絡都有兩個損失。一個是任務自己的損失,另一個就是KL散度。因爲KL散度是非對稱的,因此兩個網絡的散度會不一樣。
相比單獨訓練,每個模型能夠取得更高的精度。值得注意的是,就算是兩個結構徹底同樣的模型,也會學習到不一樣的特徵表達。
在進行知識蒸餾時,咱們一般假設teacher模型有更好的性能,而student模型是一個壓縮版的模型,這不就是模型壓縮嗎?與模型剪枝,量化先後的模型對比是同樣的。因此知識蒸餾也被用於與相關技術進行結合,apprentice框架是一個表明。
網絡結構如上圖所示,Teacher模型是一個全精度模型,Apprentice模型是一個低精度模型。
若是您對智能推薦感興趣,歡迎瀏覽個人另外一篇博客:智能推薦算法演變及學習筆記 、CTR預估模型演變及學習筆記
本文主要參考:知識蒸餾在推薦系統中的應用
深度學習模型正在變得愈來愈複雜,網絡深度愈來愈深,模型參數量也在變得愈來愈多。而這會帶來一個現實應用的問題:將這種複雜模型推上線,模型響應速度太慢,當流量大的時候撐不住。
知識蒸餾就是目前一種比較流行的解決此類問題的技術方向。複雜笨重可是效果好的 Teacher 模型不上線,就單純是個導師角色,真正上戰場擋搶撐流量的是靈活輕巧的 Student 小模型。
在智能推薦中已經提到,通常有三個級聯的過程:召回、粗排和精排。
以上環節均可以採用知識蒸餾技術來優化性能和效果,這裏的性能指的線上服務響應速度快,效果指的推薦質量好。
精排環節注重精準排序,因此採用儘可能多特徵複雜模型,以期待得到優質的個性化推薦結果。這也意味着複雜模型的在線服務響應變慢。
(1)在離線訓練的時候,能夠訓練一個複雜精排模型做爲 Teacher,一個結構較簡單的 DNN 排序模型做爲 Student。
(2)在模型上線服務的時候,並不用那個大 Teacher,而是使用小的 Student 做爲線上服務精排模型,進行在線推理。
(1)阿里媽媽在論文 "Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net" 提出。
在精排環節採用知識蒸餾,主要採用 Teacher 和 Student 聯合訓練 ( Joint Learning ) 的方法。所謂聯合訓練,指的是在離線訓練 Student 模型的時候,增長複雜 Teacher 模型來輔助 Student,二者同時進行訓練,是一種訓練過程當中的輔導。
從網絡結構來講,Teacher 和 Student 模型共享底層特徵 Embedding 層,Teacher 網絡具備層深更深、神經元更多的 MLP 隱層,而 Student 則由較少層深及神經元個數的 MLP 隱層構成,二者的 MLP 部分參數各自私有。
(2)愛奇藝在排序階段提出了雙 DNN 排序模型,能夠看做是在阿里的 rocket launching 模型基礎上的進一步改進。
爲了進一步加強 student 的泛化能力,要求 student 的隱層 MLP 的激活也要學習 Teacher 對應隱層的響應,這點一樣能夠經過在 student 的損失函數中加子項來實現。可是這會帶來一個問題,就是在 MLP 隱層複雜度方面,Student 和 Teacher 是至關的。那麼,Teacher 相比 student,模型複雜在哪裏呢?
這引出了第二點不一樣:雙 DNN 排序模型的 Teacher 在特徵 Embedding 層和 MLP 層之間,能夠比較靈活加入各類不一樣方法的特徵組合功能。經過這種方式,體現 Teacher 模型的較強的模型表達和泛化能力。
召回或者粗排環節,做爲精排的前置環節,須要在準確性和速度方面找到一個平衡點,在保證必定推薦精準性的前提下,對物品進行粗篩,減少精排環節壓力。這兩個環節並不追求最高的推薦精度。畢竟在這兩個環節,若是準確性不足能夠靠返回物品數量多來彌補。而模型小,速度快則是模型召回及粗排的重要目標之一。
做者給出了一些可能的處理方式,目前業內還沒定論。
(1)設想一:召回蒸餾的兩階段方法
(2)設想二:logits方法
(3)設想三:Without-Logits 方案
(4)設想四:Point Wise 蒸餾:Point Wise Loss 將學習問題簡化爲單 Item 打分問題。
(5)設想五:Pair Wise 蒸餾:Pair Wise Loss 對可以保持序關係的訓練數據對建模。
(6)設想六:List Wise 蒸餾:List Wise Loss 則對整個排序列表順序關係建模。
(7)設想七:聯合訓練召回、粗排及精排模型的設想
主要關注的是災難性遺忘,平衡新知識與舊知識之間的關係。即如何在學習新知識的狀況下不忘記舊知識。
引用Robipolikar對增量學習算法的定義,即一個增量學習算法應同時具備如下特色:
在概念上,增量學習與遷移學習最大的區別就是對待舊知識的處理:
關於這部份內容,將來有看到好的資料,再來分享。
若是您對異常檢測感興趣,歡迎瀏覽個人另外一篇博客:異常檢測算法演變及學習筆記
若是您對智能推薦感興趣,歡迎瀏覽個人另外一篇博客:智能推薦算法演變及學習筆記 、CTR預估模型演變及學習筆記
若是您對知識圖譜感興趣,歡迎瀏覽個人另外一篇博客:行業知識圖譜的構建及應用、基於圖模型的智能推薦算法學習筆記
若是您對時間序列分析感興趣,歡迎瀏覽個人另外一篇博客:時間序列分析中預測類問題下的建模方案 、深度學習中的序列模型演變及學習筆記
若是您對數據挖掘感興趣,歡迎瀏覽個人另外一篇博客:數據挖掘比賽/項目全流程介紹 、機器學習中的聚類算法演變及學習筆記
若是您對人工智能算法感興趣,歡迎瀏覽個人另外一篇博客:人工智能新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)、人工智能領域經常使用的開源框架和庫(含機器學習/深度學習/強化學習/知識圖譜/圖神經網絡)
若是你是計算機專業的應屆畢業生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的應屆生,你如何準備求職面試?
若是你是計算機專業的本科生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的本科生,你能夠選擇學習什麼?
若是你是計算機專業的研究生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的研究生,你能夠選擇學習什麼?
若是你對金融科技感興趣,歡迎瀏覽個人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以後博主將持續分享各大算法的學習思路和學習筆記:hello world: 個人博客寫做思路