導航:首頁 > 蒸餾問題 > 知識蒸餾的坑

知識蒸餾的坑

發布時間:2024-01-10 21:24:51

Ⅰ 高中化學中蒸餾應有哪些注意事項

高中化學中蒸餾應注意事項:

1、 控制好加熱溫度。

2、選用短頸蒸餾瓶或者採取其它保溫措施等,保證蒸餾順利進行。

3、蒸餾之前,必須了解被蒸餾的物質及其雜質的沸點和飽和蒸氣壓,以決定何時收集餾分。

4、 蒸餾燒瓶應當採用圓底燒瓶。

5、在蒸餾燒瓶中放少量碎瓷片,防止液體暴沸。

6、溫度計水銀球的位置應與支管口下端位於同一水平線上。

7、蒸餾燒瓶中所盛放液體不能超過其容積的2/3,也不能少於1/3。

8、冷凝管中冷卻水從下口進,上口出。

9、加熱溫度不能超過混合物中沸點最高物質的沸點。

(1)知識蒸餾的坑擴展閱讀

蒸餾是指利用液體混合物中各組分揮發性的差異而將組分分離的傳質過程。

一、特點

1.通過蒸餾操作,可以直接獲得所需要的產品,而吸收和萃取還需要如其它組分。

2.蒸餾分離應用較廣泛,歷史悠久。

3.能耗大,在生產過程中產生大量的氣相或液相。

二、分類

1.按方式分:簡單蒸餾、平衡蒸餾 、精餾、特殊精餾。

2.按操作壓強分:常壓、加壓、減壓。

3.按混合物中組分:雙組分蒸餾、多組分蒸餾。

4.按操作方式分:間歇蒸餾、連續蒸餾。

三、主要儀器

蒸餾燒瓶(帶支管的),溫度計,冷凝管,牛角管,酒精燈,石棉網,鐵架台,支口錐形瓶,橡膠塞。

Ⅱ 蒸箱裡面有個圓坑中要加水嗎

蒸箱里邊有個圓坑中要加水嗎?這個問題是這樣的,那個圓坑是純蒸餾水流下來用的,不需要你往裡加水,如果加水蒸餾水留下來沒地方去了,蒸出來,這效果就不好了

Ⅲ 釀酒知識-制酒蒸餾上甄小技巧

一、取料時裝甄要注意將取出的料裝入甄桶時要注意:裝甄要疏鬆,動作要輕快,上汽要均勻,甄料不宜太厚且要平整,蓋料要准確。

二、裝甄完畢時要注意插好餾酒管,蓋上甄蓋,蓋內倒入水。甄桶蒸餾要做到緩汽蒸餾,大汽追尾。在整個餾酒過程中,冷卻水的溫度大致控制在:酒頭30左右,酒身不超過30,酒尾溫度較高。

三、裝甄工序應注意 「見濕蓋料」的裝甄方法要注意:酒醅發濕時蓋一層發酵的材料,避免跑汽,但若掌握不好,容易壓汽; 「見汽蓋料」酒汽上升至甄桶表層要注意:在酒醅表層稍見白色霧狀酒汽時,迅速准確地蓋一層發酵材料,此法不易壓汽,但易跑汽。這兩種操作方法各有利弊,可根據自己裝甄技術的熟練程度選擇使用。

Ⅳ 【技術博客】通過量化知識來解釋知識蒸餾

【技術博客】****通過量化知識來解釋知識蒸餾

知識蒸餾介紹

知識蒸餾(Knowledge Distillation)最早是在2006年由 Bulica 提出的,在2014年 Hinton 對知識蒸餾做了歸納和發展。知識蒸餾主要思想是訓練一個小的網路模型來模仿一個預先訓練好的大型網路或者集成的網路。Hinton 在2015年發表的論文中提出了『softmax temperature』的概念,對 softmax 函數做了改進:

當 T 等於1時就是標準的 softmax 參數,前者比後者具有這樣一個優勢:經過訓練後的原模型,其 softmax 分布包含有一定的知識,真實標簽只能告訴我們,某個圖像樣本是一輛寶馬,不是一輛垃圾車,也不是一顆蘿卜;而帶有溫度參數T的softmax函數可能會告訴我們,它最可能是一輛寶馬,不大可能是一輛垃圾車,但不可能是一顆蘿卜。

Hinton 等人做了三組實驗,大體上驗證了知識蒸餾方法的有效性。 Hinton 等人促進了知識蒸餾的發展並從實驗的角度來驗證了知識蒸餾的有效性,而本篇介紹的論文則提出了一些量化知識的概念來解釋知識蒸餾的成功機理。

該論文為了解釋知識蒸餾的成功機理,提出了三個假設,並根據假設基於可視化的量化標准,提出了三種類型的度量標准來驗證了關於知識蒸餾的三個假設,為解釋知識蒸餾提供了依據。

假設提出

假設1:知識蒸餾使 DNN 可以學習更多的視覺概念。我們將與任務相關的視覺概念和其他概念區分開來,如下圖所示,前景上的視覺概念通常被認為是與任務相關的,而背景上的視覺概念則被認為是與任務無關的。

假設2:知識蒸餾確保了 DNN 易於同時學習各種視覺概念。相比之下基礎網路傾向於順序學習視覺概念,即在不同的 epoch 學習不同的概念。

假設3:知識蒸餾的模型優化方向更加穩定。DNN 在對原始數據進行學習時,通常會在早期嘗試對各種視覺概念進行建模,然後在後期拋棄某些視覺概念;而在知識蒸餾的過程中,教師網路直接引導學生網路瞄準特定視覺概念,沒有明顯的迂迴。

在該文章的研究中,視覺概念被定義為一個圖像區域,如物體的一個部分:翅膀、頭、爪子等。基礎網路被定義為從原始數據中學習的網路。

演算法

在該節,我們給定一個提前訓練好的 DNN 網路(教師網路)和一個經蒸餾形成的另一個 DNN 網路(學生網路),為了解釋知識蒸餾,我們將學生網路與從原始數據中學習生成 DNN 網路相比較,另外我們將任務限制為分類任務來簡化下面的理論分析。

為了驗證假設1,這里定義幾個度量的標准:

這里

和[圖片上傳失敗...(image-dffcd3-1601385590605)]

的圖像區域可以視為有效的視覺概念,b為一個正標量。當括弧內條件滿足時,返回1,否則返回0.

(上圖為視覺概念(visual concepts)的可視化表現,第二列表示了不同圖像每個像素的熵值,在第三列中,具有低熵值的區域被視為視覺概念)

參數會更高。

來測量在視覺概念最多時的學習過程。沒有使用 epoch number 而是使用 weight distance 的原因是後者更好的量化了每個epoch後參數更新的總路徑,因此我們使用平均值[圖片上傳失敗...(image-381693-1601385590604)]

標准差[圖片上傳失敗...(image-184659-1601385590604)]

來量化一個 DNN 是否同時學習視覺概念:

[圖片上傳失敗...(image-127b3a-1601385590604)]

平均值[圖片上傳失敗...(image-e1aaea-1601385590604)]

和標准差[圖片上傳失敗...(image-171a50-1601385590604)]

的數值越小,代表 DNN 能夠快速同時地學習各種視覺概念。

(DNN 傾向於在前期學習各種視覺概念,之後主要丟棄與任務無關的概念)

結論

該文章從對 DNN 的知識進行量化的角度來解釋了知識蒸餾的成功。提出了三種類型的度量標准來驗證分類場景中的三種假設,也就是相對於從原始數據進行學習,知識蒸餾可以確保 DNN 學習更多與任務相關的概念,學習更少與任務無關的概念,具有更高的學習速度,並以更少的彎路進行優化。

參考文獻

[1]Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.

[2]Cheng X , Rao Z , Chen Y , et al. Explaining Knowledge Distillation by Quantifying the Knowledge[J]. 2020.

Ⅳ 名師出高徒:關於知識蒸餾技術的一點思考

在最初聽說知識蒸餾技術的時候,我是持懷疑態度的,甚至覺得不可思議,為什麼通過用簡單模型去學習復雜模型的效果會比直接用訓練標簽來訓練簡單模型要好???

但是,它的存在必有其合理性,更何況是我偶像,深度學習第一人Hinton等人最早開始提出這種思想的.
於是便帶著疑惑,對所謂的模型蒸餾技術做了一番研究,發現這個東西確實有過人之處,能夠用更簡單的模型獲得更優質的推理效果,這在工程上,簡直是妙不可言.下面就讓我們來think think,模型蒸餾為什麼有用,又是怎麼來實現的.

眾所周知,對於各類任務,當有足夠多的數據的情況下,我們的神經網路模型越大越深,往往效果也會越好,正如ResNet50在圖像任務上摧枯拉朽,Large Bert在語言任務上效果拔群,除了優秀的模型結構涉及,可以歸結為是大力出奇跡.
但是,在實際的生產中,部署一個很大的推理模型是十分困難的,因為它的計算量是無數大大小小公司不能承受之痛,並不是每個企業都像Google那樣擁有成千上萬的TPU,當然即使有,在大部分場景下,也顯然是不劃算的.為了解決日益增長的模型預測效果的追求和和工程師想要提高性能老闆想要節省成本之間的矛盾,有人提出了知識蒸餾技術.
即我們先在原始的訓練數據上訓練一個大的復雜的擬合的好泛化能力也很好的巨無霸模型(教師模型),再用這個復雜模型的inference結果取代原有的標簽,用於訓練一個新的更小的效果跟教師模型相差不大的模型(學生模型).然後生產環節只要部署這個性能強勁和推理效果足夠好的學生模型就可以了.

好,這個想法實在是太好了..但是旁觀者大概會有些不明覺厲....直接從原始的訓練數據學不好嗎?幹嘛還多此一舉去學一個更不精確的擬合結果數據?

這樣做自然是有好處滴,且聽我給你慢慢分析...這一切應該從一個軟妹字說起..... [噗..抱歉,多打了一個妹字...

人類能夠非常好的從許許多多的特徵之中找到主要特徵來區分不同的物品,而不會被表面很多相似的特徵所迷惑,比如,人類可以較好的區分一隻像貓的狗或是一隻像狗的貓,而對於深度神經網路來說,卻並沒有那麼容易.正如Hinton等人的一個經典論述: 一輛寶馬被深度網路識別為一台垃圾車的可能性很小,但是被錯誤的識別為一個胡蘿卜的可能性卻要高很多倍.
為了讓網路能夠獲得學習這些東西的能力,我們不得不讓網路變得更深更復雜.知識蒸餾的目的就是希望大模型能夠將學習到的這些區分近似特徵的能力教給小模型,教育這種知識的精髓就恰好在於用softmax的軟特徵來取代原始one-hot標注的硬特徵.

仔細想一下,軟特徵的好處實際上是顯而易見的.

就拿手寫數字識別的例子來說,我們的標注數據的不同分類之間,實際是無法捕捉到它們之間的關系的,因為它們都是只有自己的分類位置是0,其餘位置是1,每個目標向量之間的距離是一樣的,因此這種標注的方式實際上是存在一定缺陷的,它無法包含這樣一種信息:比如數字1,和只帶有一點點彎曲的7實際是極為相似的,但實際的標注數據並不能體現這一點.但是經過一個大模型的學習之後,或許對於一個只有一點點彎曲的7模型的預測結果中,1的score是0.4,7的score是0.5,其餘score都接近0. 當我們看到這樣一組特徵向量的時候,是可以很清晰的發現這個手寫圖片非常相7同時又有點像1而和其他數字不像.
因此,再用這個向量作為target給小模型進行學習的時候,小模型只需要很小的代價就能學習到這一復雜的關系了~

是不是覺得我上面的說法很有道理? 如果你真的就這么認為,那就too naive了! 夢想很豐滿,而現實卻很骨感..真實的情況是,經過softmax函數之後,幾乎不可能出現某個分類0.5,另一個分類0.4的情況,更一般的是某個分類0.99,另一個分類0.01......

當然,別擔心,前面的想法這么好,自然遇到一點困難不該輕易放棄,既然softmax不行,那我們就不如就給它調整一下..

Hinton等大佬的解決方案是:將原始logits傳遞給softmax之前,將教師模型的原始logits按一定的溫度進行縮放.這樣,就會在可用的類標簽上得到更加廣泛的分布.並且這個溫度縮放機制同樣可以用於學生模型.

然後,原始的softmax操作就變成了:

其中, 便是一個縮放因子的超參數,這些得到的結果便是所謂的軟目標...
變大,類別概率就會變軟,也就是說會相互之間更加接近,從而達到了捕捉類別間關系的目的.

除了上述這種方法,還有其他人有一些別的不使用softmax獲得軟特徵的方法,各有優劣...因為想快點寫完這篇,所以別的方法先不介紹了,有興趣可以自己了解,或者改天有時間我回來補充上這個部分....

如果想要更大限度的壓縮模型,可以使用一些十分高效的傳統機器學習方法作為學生去蒸餾
比如決策樹。我覺得這可能是一個很好的方法,盡管它們的表達能力不如神經網路,但它們的預測非常可控和具有解釋性,並有可能實現自動的更新和快速迭代.可以看一下Hinton他們的研究,讀下這篇論文 Distilling a Neural Network Into a Soft Decision Tree

他們的研究表明,盡管更簡單的神經網路的表現比他們的研究要好,但蒸餾確實起到了一點作用。在MNIST數據集上,經過蒸餾的決策樹模型的測試准確率達到96.76%,較基線模型的94.34%有所提高。然而,一個簡單的兩層深卷積網路仍然達到了99.21%的准確率。因此,在任務追求的精度和推理性能及邊界性之間尋求一個權衡即可。

個人認為知識蒸餾是一個極具前途的研究.它讓更好的推理效果以更小更便捷的方式得以部署,這在工業界簡直是無敵的存在.正所謂名師出高徒,和人類的學習一樣,能夠有一個牛逼的老師對你進行深入淺出的指導,能讓你的學習過程事半功倍.而知識蒸餾,正好就是實現了這樣一個深入淺出的功能,這種思想我個人十分推崇.

Ⅵ 知識蒸餾 | 模型壓縮利器_良心總結

最近利用知識蒸餾的方法,對業務中的性能有了可觀的提升,因此在這里總結一波。本文主要從宏觀的角度分析一下各個蒸餾演算法的蒸餾方式,具體細節可以根據興趣閱讀論文~ 知識蒸餾是一種模型壓縮常見方法,用於模型壓縮指的是在teacher-student框架中,將復雜、學習能力強的網路學到的特徵表示「知識蒸餾」出來,傳遞給參數量小、學習能力弱的網路。從而我們會得到一個速度快,能力強的網路,因此這是一個概念上的模型壓縮方案。從另一個角度來說,蒸餾可以使得student學習到teacher中更加軟化的知識,這裡麵包含了類別間的信息,這是傳統one-hot label中所沒有的。由於蒸餾中軟化標簽的本質,因此蒸餾也可以被認為是一種正則化的策略。總結來說,知識蒸餾除了能夠學習到大模型的特徵表徵能力,也能學習到one-hot label中不存在的類別間信息。現有的知識蒸餾方法主要側重於兩點: 從teacher的什麼位置學習 和 用什麼方式學習 。以下的總結圖概述了本文要介紹的蒸餾方法。

目錄結構:

(1)KL:知識蒸餾:蒸餾開山之作
https://arxiv.org/pdf/1503.02531.pdf

如上圖所示,本文中直接利用KL散度來衡量教師模型和學生模型的輸出分布,通過最小化KL散度的方式,使得學生模型的輸出分布能夠盡可能的逼近教師模型,從而實現知識蒸餾的目的。KL散度是一種衡量兩個概率分布之間的差異的數學概念,有不懂的同學請出門左拐網路一下,右拐也行Google一下。

(2)FT:相關性因子加權學習法
https://arxiv.org/pdf/1802.04977.pdf
(3)PKT:概率分布學習法
https://arxiv.org/pdf/1803.10837.pdf

上述兩篇文章的作者認為學生一般都是不聰明的,為了讓學生能夠更好的理解教師模型,FT演算法這篇文章提出了一種新的知識轉移方式,如圖所示,利用卷積運算對教師模型的輸出進行編碼,並解碼(翻譯)給學生。而位於學生模塊部分也添加一個卷積操作,用來學習翻譯後的教師知識。實驗證明這種方式要比直接學習效果好。PKT演算法這篇文章提出了另一種新的知識轉移方式,如圖所示,該文章讓學生模型學習教師模型的概率分布,使得整體的學習更加容易,更魯棒。作者提出了一種通過匹配數據在特徵空間中的概率分布進行知識蒸餾,PKT演算法的另一個優勢是該方法可以直接轉移不同架構和維度層之間的知識。

(4)RKD:關系型學習法
https://arxiv.org/pdf/1904.05068.pdf
(5)CC:多輸入聯系型學習法
https://arxiv.org/pdf/1904.01802.pdf

所謂的單打獨斗就是一個樣本進行自我學習,單打獨斗的蒸餾方法使得學生模型只能學習教師模型的輸出表現,無法真正學習到教師模型的結構信息。而這兩篇文章的作者都提出了多個樣本之間進行合作學習的蒸餾學習方法,使得學生模型能夠更好的學習到教師模型的結構信息。RKD關系型學習演算法的核心是以多個教師模型的輸出為結構單元,取代傳統蒸餾學習中以單個教師模型輸出學習的方式,利用多輸出組合成結構單元,更能體現出教師模型的結構化特徵,使得學生模型得到更好的指導。CC多輸入聯系型學習法在上述RKD演算法的基礎上,為了更好的擴大類間差異,更好的縮小類間距離,CC演算法提出了兩種采樣方法:包括均衡類別采樣法和均衡超類別采樣法。所謂的均衡類別采樣法,即假設每個batch大小為48,則這48個樣本分布來自於6個類別,每個類別8個樣本,使得整體的學習樣本不像RKD演算法那樣是隨機的。

(1)Fitnet:階段性知識蒸餾
https://arxiv.org/pdf/1412.6550.pdf

FItnet這篇文章首次提出了從教室模型的中間層去進行蒸餾學習,而不僅僅關注教室模型的輸出。因為通過中間層的引導,使得學生模型進行了提前學習,使得最終的蒸餾學習效果變得更好。

(2)VID:互信息學習法
https://arxiv.org/pdf/1904.05835.pdf
(3)SP:相似性矩陣學習
https://arxiv.org/pdf/1907.09682.pdf
(4)AT:注意力學習法
https://arxiv.org/pdf/1612.03928.pdf

為了更好的表徵神經網路中間層的特徵,如上圖所示,本文列舉了三種不同形式的用於更好抽象的表徵中間層特徵的新的蒸餾形式。其中VID互信息學習法,將中間層知識蒸餾的最優性能定義為最大化教師和學生網路之間的互信息。那麼為什麼通過最大化互信息可以使得蒸餾學習變得有效呢?首先作者對互信息做了定義:互信息為[教師模型的熵值] - [已知學生模型的條件下的教師模型熵值]。而我們又有如下常識:當學生模型已知,能夠使得教師模型的熵很小,這說明學生模型以及獲得了能夠恢復教師模型所需要的「壓縮」知識,間接說明了此時學生模型已經學習的很好了。而這種情況下也就是說明上述公式中的熵很小,從而使得互信息會很大。作者從這個角度解釋了為什麼可以通過最大化互信息的方式來進行蒸餾學習。而在SP相似性矩陣學習法中,作者提出了一種新的知識蒸餾形式,該方法是作者觀察到相似語義的輸入往往會使得神經網路輸出相似的激活模式這一現象啟發得到的。該知識蒸餾方法被稱為保持相似性知識蒸餾(SPKD),該方法使得教師網路中相似(不同)激活的輸入樣本對,能夠在學生網路中產生相同(不同)的激活,從而指導學生網路的學習。而在AT注意力學習法中,作者認為注意力在人類視覺體驗中起著至關重要的作用。以圖像分類為例,注意力地圖展示了學習完成後的網路模型更關注於圖像的哪個區域,是網路模型學習成果的體現。本文通過迫使學生模型模仿強大的教師模型的注意力特徵圖,來顯著提高學生模型的性能。為此,本文提出了基於激活注意力地圖的蒸餾法。

(5)NST:基於濾波器的知識蒸餾
https://arxiv.org/pdf/1707.01219.pdf

(6)FSP:授之以魚不如授之以漁
http://openaccess.thecvf.com/content_cvpr_2017/papers/Yim_A_Gift_From_CVPR_2017_paper.pdf

和之前對中間層特徵進行直接學習的方式不同,本文提出了一個偏哲學的論點:授之以魚不如授之以漁。具體來說就是,如上圖所示,本文將教師模型網路層與層之間的映射關系作為學生網路學習的目標,而不是像之前提到的直接對教師模型的中間結果進行學習。通過讓學生學習這種獲得特徵的方法,而不是直接學習特徵本身,文章的結果顯示,這種方式確實有助於提高學生模型的魯棒性。

(1)AB:激活邊界學習
https://arxiv.org/abs/1811.03233.pdf
(2)利用對抗樣本進行激活邊界學習
https://arxiv.org/abs/1805.05532.pdf

在分類任務中,小模型真正的缺陷更多的在於對邊界樣本(難例樣本)的分類困難。而這真是我們在分類任務中最關心的問題。而教師模型處理邊界的能力一定是要優於學生模型的。因此嘗試用學生模型學習教師模型的邊界分布,這將是蒸餾學習的新思路。本部分列舉了兩種不同的邊界學習方法。AB激活邊界學習法,通過最大化邊界誤差的方式,來引導學生模型學習更強的邊界約束能力。利用對抗樣本進行邊界激活學習的方法,首先定義一個基類並通過基類找到各個類別中的對抗邊界,最終通過對抗邊界樣本進行蒸餾學習。

(1)be your own teacherr
https://arxiv.org/pdf/1905.08094.pdf
(2)強制拉近類內距離:regularzing class-wise
https://arxiv.org/pdf/2003.13964.pdf
(3)類內的魯棒性學習:Data-Distortion Guided
https://www.researchgate.net/publication/335476911_Data-Distortion_Guided_Self-Distillation_for_Deep_Neural_Networks

由於我們不一定可以在所有任務中都順利的獲取教師模型,有的大模型由於數據的缺失,很難被正常的訓練出來。基於這種情況,很多研究者提出了自我學習的策略。簡單來說該策略就是自己作為自己的老師,進行自我優化。本部分列舉了三種自學習的方式。be your own teacher這篇文章將網路較深部分的知識壓縮到較淺部分,也就是說該蒸餾策略的教師模型和學生模型來自與同一個模型,這大大降低了蒸餾學習的復雜度,並且通過增加額外的訓練檢測模型,在不增加前向推理時間的前提下提升了自我學習的能力。舉例來說,如上圖中以resnet50為例,在每個block之後都接出一個bottleneck作為隱藏層的監督輸出模塊,並接出一個全連接層作為每個子模塊的子分類器。每個子分類器都作為一個小的學生模型,其對應的教師模型為主分類層的輸出,最終實現自我蒸餾的學習。另外兩篇文章的思路主要從同一個類內的樣本出發進行自我學習。其中強制拉近類內距離這篇文章,在訓練的過程中,首先我們會從數據迭代器中提取batch1大小的數據,同時選出和當前batch1中類別相同的樣本形成batch2,並將兩個batch的樣本組合起來進行聯合訓練。具體來說就是每一此計算loss時,從batch1和batch2中各挑選出一個同類樣本,在loss計算中盡可能的是的這兩個同類樣本的輸出分布一致,這種方式是一種廣義上的自我學習的策略,且這種訓練方式能夠強制減小類內的差異,且可以利用這種方式減小某些過度自信的異常值的預測。其中增強類內魯棒性這篇文章,也是從對同一個類別的樣本進行聯合學習,具體操作如下:對輸入batch中每個圖片利用不同的數據增強方式增強層兩份輸入,這兩份輸入的標簽為同一個類別,將兩份輸入特徵concat之後通過卷積層提取全局特徵,並將得到的特徵向量進行對應的切分,在訓練過程中通過最小化切分後特徵向量間的差異,從而增強同一個類內的多樣性提升魯棒性,該過程也可以被認為是自己和自己學習。

(1)DML:互相學習
https://arxiv.org/pdf/1706.00384.pdf
(2)知識嫁接
https://arxiv.org/pdf/2001.05868.pdf

與自學習類似的是互相學習策略中不存在教師模型,與自學習不同的是互相學習的方式通用是多個模型之間的學習,而自學習僅僅只有一個模型。其中DML:互相學習這篇文章就是一種典型的互相學習的方式,DML是在訓練過程中,幾個需要反向傳播的待訓學生網路協同學習,互相傳遞知識。每個互相學習的網路都有一個標準的分類Loss和互學習Loss,其中互學習Loss是一個KL散度。 具體而言,兩個網路的softmax輸出為p1,p2.則互學習的意義在於,對於Net1(Net2亦然),對了提高其泛化能力,使用Net2的p2作為一種後驗概率,然後最小化p1,p2的KL散度。而知識蒸餾這篇文章更像是一種廣義上的互相學習方法,該文章的主要是思想是並行地訓練多個網路,對所有網路的參數進行重要性排序,並另一個並行網路中的更有效的權重替換到當前網路的不重要權重的位置,在訓練過程中通過這種重要性權重的互相替換實現互相學習。

(1)GAN對抗學習
https://arxiv.org/pdf/1709.00513.pdf
(2)無監督對抗學習
https://arxiv.org/pdf/1904.01186.pdf

本部分主要列舉了兩種利用GAN網路進行蒸餾的文章。GAN對抗學習這篇文章就是典型的利用生成對抗網路的例子,具體來說,學生網路作為生成器,生成對應的輸出結果,而教師網路用來表徵GT信息,而鑒別器主要被用來鑒別學生網路的輸出和教師網路的輸出,最終學習的目的就是是的學生網路能夠欺騙鑒別器,是的鑒別起無法區分出學生網路和教師網路的輸出。最終實現學生網路學習到了教師網路的輸出特徵和分布。而無監督對抗學習這篇文章的出發點有點不一樣,由於一些實踐問題(如隱私、法律等問題),給定深度網路的訓練數據往往不可用,除了一些介面之外,給定網路的架構也是未知的。基於此,本文提出了一種利用生成對抗網路訓練高效深度神經網路的新框架。講預先訓練好的教師網路看作一個固定的鑒別器,利用該鑒別器產生的訓練樣本可以得到最大的鑒別結果。然後,利用生成的數據和教師網路,同時訓練出模型尺寸較小、計算復雜度較低的高效網路。

Ⅶ 知識蒸餾-Distilling the knowledge in a neural network

「很多昆蟲在幼蟲形態的時候是最擅長從環境中吸取能量和養分的,而當他們成長為成蟲的時候則需要擅長完全不同能力比如遷移和繁殖。」在2014年Hinton發表的知識蒸餾的論文中用了這樣一個很形象的比喻來說明知識蒸餾的目的。在大型的機器學習任務中,我們也用兩個不同的階段 training stage 和 deployment stage 來表達兩種不同的需求。training stage(訓練階段)可以利用大量的計算資源不需要實時響應,利用大量的數據進行訓練。但是在deployment stage (部署階段)則會有很多限制,比如計算資源,計算速度要求等。知識蒸餾就是為了滿足這種需求而設計的一種模型壓縮的方法。

知識蒸餾的概念最早是在2006年由Bulica提出的,在2014年Hinton對知識蒸餾做了歸納和發展。知識蒸餾的主要思想是訓練一個小的網路模型來模仿一個預先訓練好的大型網路或者集成的網路。這種訓練模式又被稱為 "teacher-student",大型的網路是「老師」,小型的網路是「學生」。

在知識蒸餾中,老師將知識傳授給學生的方法是:在訓練學生的過程中最小化一個以老師預測結果的概率分布為目標的損失函數。老師預測的概率分布就是老師模型的最後的softmax函數層的輸出,然而,在很多情況下傳統的softmax層的輸出,正確的分類的概率值非常大,而其他分類的概率值幾乎接近於0。因此,這樣並不會比原始的數據集提供更多有用的信息,沒有利用到老師強大的泛化性能,比如,訓練MNIST任務中數字『3』相對於數字『5』與數字『8』的關系更加緊密。為了解決這個問題,Hinton在2015年發表的論文中提出了『softmax temperature』的概念,對softmax函數做了改進:

這里的 就是指 temperature 參數。當 等於1 時就是標準的softmax函數。當 增大時,softmax輸出的概率分布就會變得更加 soft(平滑),這樣就可以利用到老師模型的更多信息(老師覺得哪些類別更接近於要預測的類別)。Hinton將這樣的蘊含在老師模型中的信息稱之為 "dark knowledge",蒸餾的方法就是要將這些 "dark knowledge" 傳給學生模型。在訓練學生的時候,學生的softmax函數使用與老師的相同的 ,損失函數以老師輸出的軟標簽為目標。這樣的損失函數我們稱為"distillation loss"。

在Hinton的論文中,還發現了在訓練過程加上正確的數據標簽(hard label)會使效果更好。具體方法是,在計算distillation loss的同時,我利用hard label 把標準的損失( )也計算出來,這個損失我們稱之為 "student loss"。將兩種 loss 整合的公式如下:

這里的 是輸入, 是學生模型的參數, 是交叉熵損失函數, 是 hard label , 是參數有 的函數, 是系數, 分別是學生和老師的logits輸出。模型的具體結構如下圖所示:

在上述公式中, 是作為超參數人為設置的,Hinton的論文中使用的 的范圍為1到20,他們通過實驗發現,當學生模型相對於老師模型非常小的時候, 的值相對小一點效果更好。這樣的結果直觀的理解就是,如果增加 的值,軟標簽的分布蘊含的信息越多導致一個小的模型無法"捕捉"所有信息但是這也只是一種假設,還沒有明確的方法來衡量一個網路「捕捉」信息的能力。關於 ,Hinton的論文中對兩個loss用了加權平均: 。他們實驗發現,在普通情況下 相對於 非常小的情況下能得到最好的效果。其他人也做了一些實驗沒用加權平均,將 設置為1,而對 進行調整。

Hinton的論文中做了三個實驗,前兩個是MNIST和語音識別,在這兩個實驗中通過知識蒸餾得到的學生模型都達到了與老師模型相近的效果,相對於直接在原始數據集上訓練的相同的模型在准確率上都有很大的提高。下面主要講述第三個比較創新的實驗:將知識蒸餾應用在訓練集成模型中。

訓練集成模型(訓練多個同樣的模型然後集成得到更好的泛化效果)是利用並行計算的非常簡單的方法,但是當數據集很大種類很多的時候就會產生巨大的計算量而且效果也不好。Hinton在論文中利用soft label的技巧設計了一種集成模型降低了計算量又取得了很好的效果。這個模型包含兩種小模型:generalist model 和 specialist model(網路模型相同,分工不同)整個模型由很多個specialist model 和一個generalist model 集成。顧名思義generalist model 是負責將數據進行粗略的區分(將相似的圖片歸為一類),而specialist model(專家模型)則負責將相似的圖片進行更細致的分類。這樣的操作也非常符合人類的大腦的思維方式先進行大類的區分再進行具體分類,下面我們看這個實驗的具體細節。
實驗所用的數據集是谷歌內部的JFT數據集,JFT數據集非常大,有一億張圖片和15000個類別。實驗中 generalist model 是用所有數據集進行訓練的,有15000個輸出,也就是每個類別都有一個輸出概率。將數據集進行分類則是用Online k-means聚類的方法對每張圖片輸入generalist model後得到的軟標簽進行聚類,最終將3%的數據為一組分發給各個specialist,每個小數據集包含一些聚集的圖片,也就是generalist認為相近的圖片。
在specialist model的訓練階段,模型的參數在初始化的時候是完全復制的generalist中的數值(specialist和generalist的結構是一模一樣的),這樣可以保留generalist模型的所有知識,然後specialist對分配的數據集進行hard label訓練。但是問題是,specialist如果只專注於分配的數據集(只對分配的數據集訓練)整個網路很快就會過擬合於分配的數據集上,所以Hinton提出的方法是用一半的時間進行hard label訓練,另一半的時間用知識蒸餾的方法學習generalist生成的soft label。這樣specialist就是花一半的時間在進行小分類的學習,另一半的時間是在模仿generalist的行為。
整個模型的預測也與往常不同。在做top-1分類的時候分為以下兩步:
第一步:將圖片輸入generalist model 得到輸出的概率分布,取概率最大的類別k。
第二步:取出數據集包含類別k的所有specialists,為集合 (各個數據集之間是有類別重合的)。然後求解能使如下公式最小化的概率分布q作為預測分布。

這里的KL是指KL散度(用於刻畫兩個概率分布之間的差距) 和 分別是測試圖片輸入generalist 和specialists(m)之後輸出的概率分布,累加就是考慮所有屬於 集合的specialist的「意見」。

由於Specialist model的訓練數據集很小,所以需要訓練的時間很短,從傳統方法需要的幾周時間減少到幾天。下圖是在訓練好generalist模型之後逐個增加specialist進行訓練的測試結果:

從圖中可以看出,specialist個數的增加使top1准確個數有明顯的提高。

本文結合Hinton在2014年發表的論文對知識蒸餾和相關實驗做了一個簡單的介紹,如今很多模型都用到了知識蒸餾的方法,但知識蒸餾在深度學習中還是非常新的方向,還有非常多的應用場景等待研究。

項目地址: https://momodel.cn/explore/5dc3b1223752d662e35925a3?type=app

[1]Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.
[2] https://nervanasystems.github.io/distiller/knowledge_distillation.html
[3] https://www.youtube.com/watch?v=EK61htlw8hY&t=3323s

Ⅷ 蒸餾操作中有哪些需要注意的事項

高中化學中蒸餾應注意事項:1、 控制好加熱溫度。2、選用短頸蒸餾瓶或版者採取其它保溫權措施等,保證蒸餾順利進行。3、蒸餾之前,必須了解被蒸餾的物質及其雜質的沸點和飽和蒸氣壓,以決定何時收集餾分。4、 蒸餾燒瓶應當採用圓底燒瓶。5、在蒸餾燒瓶中放少量碎瓷片,防止液體暴沸。6、溫度計水銀球的位置應與支管口下端位於同一水平線上。7、蒸餾燒瓶中所盛放液體不能超過其容積的2/3,也不能少於1/3。8、冷凝管中冷卻水從下口進,上口出。9、加熱溫度不能超過混合物中沸點最高物質的沸點。蒸餾是指利用液體混合物中各組分揮發性的差異而將組分分離的傳質過程。一、特點1.通過蒸餾操作,可以直接獲得所需要的產品,而吸收和萃取還需要如其它組分。2.蒸餾分離應用較廣泛,歷史悠久。3.能耗大,在生產過程中產生大量的氣相或液相。二、分類1.按方式分:簡單蒸餾、平衡蒸餾 、精餾、特殊精餾。2.按操作壓強分:常壓、加壓、減壓。3.按混合物中組分:雙組分蒸餾、多組分蒸餾。4.按操作方式分:間歇蒸餾、連續蒸餾。三、主要儀器蒸餾燒瓶(帶支管的),溫度計,冷凝管,牛角管,酒精燈,石棉網,鐵架台,支口錐形瓶,橡膠塞

閱讀全文

與知識蒸餾的坑相關的資料

熱點內容
游戲顏色過濾設置方法 瀏覽:743
購買金利源外壓式超濾膜濾芯配件 瀏覽:165
d509濾芯怎麼弄不下來 瀏覽:268
在昆明回哈爾濱飛機用隔離嗎 瀏覽:145
硫脲廢水處理 瀏覽:568
反滲透膜壓力容器 瀏覽:74
飲水機的燒水的地方怎麼替換 瀏覽:741
馭菱車空氣濾芯在哪裡 瀏覽:844
10年道奇酷威空調濾芯怎麼更換 瀏覽:268
車下面裝樹脂板防什麼 瀏覽:684
入口鹽濃度100gl反滲透膜選擇 瀏覽:120
藕粉為什麼不能用飲水機的水沖泡 瀏覽:413
河南凈水器代理加盟哪裡好 瀏覽:609
超濾濃水排放閥沒開會怎樣 瀏覽:314
環氧樹脂和大白 瀏覽:113
機油濾芯裂開會怎麼樣 瀏覽:582
神經專科醫院污水 瀏覽:652
機油濾芯是上在哪裡的 瀏覽:860
純水蛭素是什麼顏色 瀏覽:430
洗菜凈化器什麼原理 瀏覽:185