训练softmax分类器实例_知识蒸馏:如何用一个神经网络训练另一个神经网络
作者:Tivadar Danka
編譯:ronghuaiyang
原文鏈接
知識蒸餾:如何用一個神經網絡訓練另一個神經網絡?mp.weixin.qq.com導讀
知識蒸餾的簡單介紹,讓大家了解知識蒸餾背后的直覺。
如果你曾經用神經網絡來解決一個復雜的問題,你就會知道它們的尺寸可能非常巨大,包含數百萬個參數。例如著名的BERT模型約有1億1千萬參數。
為了說明這一點,參見下圖中的NLP中最常見架構的參數數量。
各種模型結構的參數數量
在Kaggle競賽中,勝出的模型通常是由幾個模型組成的集合。盡管它們在精確度上可以大大超過簡單模型,但其巨大的計算成本使它們在實際應用中完全無法使用。
有沒有什么方法可以在不擴展硬件的情況下利用這些強大但龐大的模型來訓練最先進的模型?
目前,有三種方法可以壓縮神經網絡,同時保持預測性能:
- 權值裁剪
- 量化
- 知識蒸餾
在這篇文章中,我的目標是向你介紹“知識蒸餾”的基本原理,這是一個令人難以置信的令人興奮的想法,它的基礎是訓練一個較小的網絡來逼近大的網絡。
什么是知識蒸餾?
讓我們想象一個非常復雜的任務,比如對數千個類進行圖像分類。通常,你不能指望ResNet50能達到99%的準確度。所以,你建立一個模型集合,平衡每個模型的缺陷。現在你有了一個巨大的模型,盡管它的性能非常出色,但無法將其部署到生產環境中,并在合理的時間內獲得預測。
然而,該模型可以很好地概括未見的數據,因此可以放心地相信它的預測。(我知道,情況可能不是這樣的,但我們現在就開始進行思維實驗吧。)
如果我們使用來自大而笨重的模型的預測來訓練一個更小的,所謂的“學生”模型來逼近大模型會怎么樣?
這本質上就是知識的蒸餾,這是由Geoffrey Hinton、Oriol Vinyals和Jeff Dean在論文Distilling the Knowledge in a Neural Network中介紹的。
大致說來,過程如下。
為了使過程可視化,見下圖。
知識蒸餾
讓我們關注一下細節。知識是如何獲得的?
在分類器模型中,類的概率由softmax層給出,將logits轉換為概率:
其中:
是最后一層生成的logits。替換一下,得到一個稍有修改的版本:
其中,T是一個超參數,稱為溫度。這些值叫做soft targets。
如果T變大,類別概率會變軟,也就是說會相互之間更加接近,極端情況下,T趨向于無窮大。
如果T = 1,就是原來的softmax函數。出于我們的目的,T被設置為大于1,因此叫做蒸餾。
Hinton, Vinyals和Dean證明了一個經過蒸餾的模型可以像由10個大型模型的集成一樣出色。
Geoffrey Hinton, Oriol Vinyals和Jeff Dean的論文Distilling the Knowledge in a Neural Network中對一個語音識別問題的知識蒸餾的結果
為什么不重頭訓練一個小網絡?
你可能會問,為什么不從一開始就訓練一個更小的網絡呢?這不是更容易嗎?當然,但這并不一定有效。
實驗結果表明,參數越多,泛化效果越好,收斂速度越快。例如,Sanjeev Arora, Nadav Cohen和Elad Hazan在他們的論文“On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization”中對此進行了研究。
左:單層網絡與4層和8層的線性網絡。右:使用TensorFlow教程中的MNIST分類的參數化和基線模型。
對于復雜的問題,簡單的模型很難在給定的訓練數據上很好地泛化。然而,我們擁有的遠不止訓練數據:教師模型對所有可用數據的預測。
這對我們有兩方面的好處。
- 首先,教師模型的知識可以教學生模型如何通過訓練數據集之外的可用預測進行泛化。回想一下,我們使用教師模型對所有可用數據的預測來訓練學生模型,而不是原始的訓練數據集。
- 其次,soft targets提供了比類標簽更有用的信息:它表明兩個類是否彼此相似。例如,如果任務是分類狗的品種,像“柴犬和秋田犬非常相似”這樣的信息對于模型泛化是非常有價值的。
左:秋田犬,右:柴犬
與遷移學習的區別
Hinton等人也提到,最早的嘗試是復用訓練好的集成模型中的一些層來遷移知識,從而壓縮模型。
用Hinton等人的話來說,
“……我們傾向于用學習的參數值在訓練過的模型中識別知識,這使得我們很難看到如何改變模型的形式而保持相同的知識。知識的一個更抽象的觀點是,它是一個從輸入向量到輸出向量的學習好的映射,它將知識從任何特定的實例化中解放出來。—— Distilling the Knowledge in a Neural Network因此,與轉移學習相反,知識蒸餾不會直接使用學到的權重。
使用決策樹
如果你想進一步壓縮模型,你可以嘗試使用更簡單的模型,如決策樹。盡管它們的表達能力不如神經網絡,但它們的預測可以通過單獨觀察節點來解釋。
這是由Nicholas Frosst和Geoffrey Hinton完成的,他們在他們的論文Distilling a Neural Network Into a Soft Decision Tree中對此進行了研究。
他們的研究表明,盡管更簡單的神經網絡的表現比他們的研究要好,但蒸餾確實起到了一點作用。在MNIST數據集上,經過蒸餾的決策樹模型的測試準確率達到96.76%,較基線模型的94.34%有所提高。然而,一個簡單的兩層深卷積網絡仍然達到了99.21%的準確率。因此,在性能和可解釋性之間存在權衡。
Distilling BERT
到目前為止,我們只看到了理論結果,沒有實際的例子。為了改變這種情況,讓我們考慮近年來最流行和最有用的模型之一:BERT。
來自于谷歌的Jacob Devlin等人的論文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,很快被廣泛應用于各種NLP任務,如文檔檢索或情緒分析。這是一個真正的突破,推動了幾個領域的技術發展。
然而,有一個問題。BERT包含約1.1億個參數,需要大量的時間來訓練。作者報告說,訓練需要4天,使用4個pods中的16個TPU芯片。訓練成本將約為10000美元,不包括碳排放等環境成本。
Hugging Face成功地嘗試減小BERT的尺寸和計算成本。他們使用知識蒸餾來訓練DistilBERT,這是原始模型大小的60%,同時速度提高了60%,語言理解能力保持在97%。
DistilBERT的性能。
較小的架構需要更少的時間和計算資源:在8個16GB V100 gpu上花費90小時。如果你對更多的細節感興趣,你可以閱讀原始論文"DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter"或者文章的綜述,寫的很精彩,強烈推薦。
總結
知識蒸餾是壓縮神經網絡的三種主要方法之一,使其適合于性能較弱的硬件。
與其他兩種強大的壓縮方法權值剪枝和量化不同,知識蒸餾不直接對網絡進行縮減。相反,它使用最初的模型來訓練一個更小的模型,稱為“學生模型”。由于教師模型甚至可以對未標記的數據提供預測,因此學生模型可以學習如何像教師那樣進行泛化。在這里,我們看到了兩個關鍵的結果:最初的論文,它介紹了這個想法,和一個后續的論文,展示了簡單的模型,如決策樹,也可以用作學生模型。
—END—
英文原文:https://towardsdatascience.com/can-a-neural-network-train-other-networks-cf371be516c6
總結
以上是生活随笔為你收集整理的训练softmax分类器实例_知识蒸馏:如何用一个神经网络训练另一个神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python运行不了程序代码_pytho
- 下一篇: 3D打印上市公司 相比机床之类的是弯道超