<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          知識蒸餾:如何用一個神經(jīng)網(wǎng)絡(luò)訓(xùn)練另一個神經(jīng)網(wǎng)絡(luò)

          共 3835字,需瀏覽 8分鐘

           ·

          2021-12-29 09:06

          點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時間送達(dá)

          如果你曾經(jīng)用神經(jīng)網(wǎng)絡(luò)來解決一個復(fù)雜的問題,你就會知道它們的尺寸可能非常巨大,包含數(shù)百萬個參數(shù)。例如著名的BERT模型約有1億1千萬參數(shù)。
          為了說明這一點,參見下圖中的NLP中最常見架構(gòu)的參數(shù)數(shù)量。
          各種模型結(jié)構(gòu)的參數(shù)數(shù)量
          在Kaggle競賽中,勝出的模型通常是由幾個模型組成的集合。盡管它們在精確度上可以大大超過簡單模型,但其巨大的計算成本使它們在實際應(yīng)用中完全無法使用。
          有沒有什么方法可以在不擴展硬件的情況下利用這些強大但龐大的模型來訓(xùn)練最先進(jìn)的模型?
          目前,有三種方法可以壓縮神經(jīng)網(wǎng)絡(luò),同時保持預(yù)測性能:
          • 權(quán)值裁剪
          • 量化
          • 知識蒸餾
          在這篇文章中,我的目標(biāo)是向你介紹“知識蒸餾”的基本原理,這是一個令人難以置信的令人興奮的想法,它的基礎(chǔ)是訓(xùn)練一個較小的網(wǎng)絡(luò)來逼近大的網(wǎng)絡(luò)。

          ???什么是知識蒸餾?

          讓我們想象一個非常復(fù)雜的任務(wù),比如對數(shù)千個類進(jìn)行圖像分類。通常,你不能指望ResNet50能達(dá)到99%的準(zhǔn)確度。所以,你建立一個模型集合,平衡每個模型的缺陷。現(xiàn)在你有了一個巨大的模型,盡管它的性能非常出色,但無法將其部署到生產(chǎn)環(huán)境中,并在合理的時間內(nèi)獲得預(yù)測。
          然而,該模型可以很好地概括未見的數(shù)據(jù),因此可以放心地相信它的預(yù)測。(我知道,情況可能不是這樣的,但我們現(xiàn)在就開始進(jìn)行思維實驗吧。)
          如果我們使用來自大而笨重的模型的預(yù)測來訓(xùn)練一個更小的,所謂的“學(xué)生”模型來逼近大模型會怎么樣?
          這本質(zhì)上就是知識的蒸餾,這是由Geoffrey Hinton、Oriol Vinyals和Jeff Dean在論文Distilling the Knowledge in a Neural Network中介紹的。
          大致說來,過程如下。
          1. 訓(xùn)練一個能夠性能很好泛化也很好的大模型。這被稱為教師模型
          2. 利用你所擁有的所有數(shù)據(jù),計算出教師模型的預(yù)測。帶有這些預(yù)測的全部數(shù)據(jù)集被稱為知識,預(yù)測本身通常被稱為soft targets。這是知識蒸餾步驟。
          3. 利用先前獲得的知識來訓(xùn)練較小的網(wǎng)絡(luò),稱為學(xué)生模型。
          為了使過程可視化,見下圖。
          知識蒸餾
          讓我們關(guān)注一下細(xì)節(jié)。知識是如何獲得的?
          在分類器模型中,類的概率由softmax層給出,將logits轉(zhuǎn)換為概率:
          其中:
          是最后一層生成的logits。替換一下,得到一個稍有修改的版本:
          其中,T是一個超參數(shù),稱為溫度。這些值叫做soft targets。
          如果T變大,類別概率會變軟,也就是說會相互之間更加接近,極端情況下,T趨向于無窮大。
          如果T = 1,就是原來的softmax函數(shù)。出于我們的目的,T被設(shè)置為大于1,因此叫做蒸餾
          Hinton, Vinyals和Dean證明了一個經(jīng)過蒸餾的模型可以像由10個大型模型的集成一樣出色。
          Geoffrey Hinton, Oriol Vinyals和Jeff Dean的論文Distilling the Knowledge in a Neural Network中對一個語音識別問題的知識蒸餾的結(jié)果

          ???為什么不重頭訓(xùn)練一個小網(wǎng)絡(luò)?

          你可能會問,為什么不從一開始就訓(xùn)練一個更小的網(wǎng)絡(luò)呢?這不是更容易嗎?當(dāng)然,但這并不一定有效。
          實驗結(jié)果表明,參數(shù)越多,泛化效果越好,收斂速度越快。例如,Sanjeev Arora, Nadav Cohen和Elad Hazan在他們的論文“On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization”中對此進(jìn)行了研究。
          左:單層網(wǎng)絡(luò)與4層和8層的線性網(wǎng)絡(luò)。右:使用TensorFlow教程中的MNIST分類的參數(shù)化和基線模型。
          對于復(fù)雜的問題,簡單的模型很難在給定的訓(xùn)練數(shù)據(jù)上很好地泛化。然而,我們擁有的遠(yuǎn)不止訓(xùn)練數(shù)據(jù):教師模型對所有可用數(shù)據(jù)的預(yù)測。
          這對我們有兩方面的好處。
          • 首先,教師模型的知識可以教學(xué)生模型如何通過訓(xùn)練數(shù)據(jù)集之外的可用預(yù)測進(jìn)行泛化?;叵胍幌?,我們使用教師模型對所有可用數(shù)據(jù)的預(yù)測來訓(xùn)練學(xué)生模型,而不是原始的訓(xùn)練數(shù)據(jù)集。
          • 其次,soft targets提供了比類標(biāo)簽更有用的信息:它表明兩個類是否彼此相似。例如,如果任務(wù)是分類狗的品種,像“柴犬和秋田犬非常相似”這樣的信息對于模型泛化是非常有價值的。
          左:秋田犬,右:柴犬

          ???與遷移學(xué)習(xí)的區(qū)別

          Hinton等人也提到,最早的嘗試是復(fù)用訓(xùn)練好的集成模型中的一些層來遷移知識,從而壓縮模型。
          用Hinton等人的話來說,
          “……我們傾向于用學(xué)習(xí)的參數(shù)值在訓(xùn)練過的模型中識別知識,這使得我們很難看到如何改變模型的形式而保持相同的知識。知識的一個更抽象的觀點是,它是一個從輸入向量到輸出向量的學(xué)習(xí)好的映射,它將知識從任何特定的實例化中解放出來。—— Distilling the Knowledge in a Neural Network
          因此,與轉(zhuǎn)移學(xué)習(xí)相反,知識蒸餾不會直接使用學(xué)到的權(quán)重。

          ???使用決策樹

          如果你想進(jìn)一步壓縮模型,你可以嘗試使用更簡單的模型,如決策樹。盡管它們的表達(dá)能力不如神經(jīng)網(wǎng)絡(luò),但它們的預(yù)測可以通過單獨觀察節(jié)點來解釋。
          這是由Nicholas Frosst和Geoffrey Hinton完成的,他們在他們的論文Distilling a Neural Network Into a Soft Decision Tree中對此進(jìn)行了研究。
          他們的研究表明,盡管更簡單的神經(jīng)網(wǎng)絡(luò)的表現(xiàn)比他們的研究要好,但蒸餾確實起到了一點作用。在MNIST數(shù)據(jù)集上,經(jīng)過蒸餾的決策樹模型的測試準(zhǔn)確率達(dá)到96.76%,較基線模型的94.34%有所提高。然而,一個簡單的兩層深卷積網(wǎng)絡(luò)仍然達(dá)到了99.21%的準(zhǔn)確率。因此,在性能和可解釋性之間存在權(quán)衡。

          ???Distilling BERT

          到目前為止,我們只看到了理論結(jié)果,沒有實際的例子。為了改變這種情況,讓我們考慮近年來最流行和最有用的模型之一:BERT。
          來自于谷歌的Jacob Devlin等人的論文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,很快被廣泛應(yīng)用于各種NLP任務(wù),如文檔檢索或情緒分析。這是一個真正的突破,推動了幾個領(lǐng)域的技術(shù)發(fā)展。
          然而,有一個問題。BERT包含約1.1億個參數(shù),需要大量的時間來訓(xùn)練。作者報告說,訓(xùn)練需要4天,使用4個pods中的16個TPU芯片。訓(xùn)練成本將約為10000美元,不包括碳排放等環(huán)境成本。
          Hugging Face成功地嘗試減小BERT的尺寸和計算成本。他們使用知識蒸餾來訓(xùn)練DistilBERT,這是原始模型大小的60%,同時速度提高了60%,語言理解能力保持在97%。
          DistilBERT的性能。
          較小的架構(gòu)需要更少的時間和計算資源:在8個16GB V100 gpu上花費90小時。如果你對更多的細(xì)節(jié)感興趣,你可以閱讀原始論文"DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter"或者文章的綜述,寫的很精彩,強烈推薦。

          ???總結(jié)

          知識蒸餾是壓縮神經(jīng)網(wǎng)絡(luò)的三種主要方法之一,使其適合于性能較弱的硬件。
          與其他兩種強大的壓縮方法權(quán)值剪枝和量化不同,知識蒸餾不直接對網(wǎng)絡(luò)進(jìn)行縮減。相反,它使用最初的模型來訓(xùn)練一個更小的模型,稱為“學(xué)生模型”。由于教師模型甚至可以對未標(biāo)記的數(shù)據(jù)提供預(yù)測,因此學(xué)生模型可以學(xué)習(xí)如何像教師那樣進(jìn)行泛化。在這里,我們看到了兩個關(guān)鍵的結(jié)果:最初的論文,它介紹了這個想法,和一個后續(xù)的論文,展示了簡單的模型,如決策樹,也可以用作學(xué)生模型。
          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python+OpenCV視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

          下載3:Pytorch常用函數(shù)手冊
          小白學(xué)視覺公眾號后臺回復(fù):pytorch常用函數(shù)手冊即可下載含有200余個Pytorch常用函數(shù)的使用方式,幫助快速入門深度學(xué)習(xí)。


          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲精品色婷婷 | 亚洲视频免费观看H | 成人黄色电影在线 | 青娱乐亚洲领先 | 农村乱子伦毛片国产乱 |