導航:首頁 > 蒸餾問題 > 知識蒸餾演算法

知識蒸餾演算法

發布時間:2022-12-21 04:02:42

A. 常減壓蒸餾塔 的理論塔板數演算法由於自己自己基礎比較差,所有請告訴一個比較簡單的從頭到尾的計算方法。

要逐板計算理論塔板數,你得有這么幾個數據:(1)餾出液組成,即xd;(2)進料液組成,即xf;(3)餾殘液組成,即xw;(4)迴流比R以及相對揮發度a。
在精餾塔中,Xn和Yn是一對平衡,Xn和Yn+1是同一塔板上的一對氣液組成。氣液平衡組成滿足氣液平衡方程,可根據該方程由Yn算出Xn;同一塔板上的氣液組成分別滿足精餾段操作線方程和提餾段操作線方程,可根據這兩個方程由Xn算出Yn+1;然後由Yn+1算Xn+1(氣液平衡),Xn+1算Yn+2(操作線),以此類推即可分別算出精餾段理論塔板數和提餾段理論塔板數。其中,精餾段算至x接近Xf為止,提餾段算至x接近Xw為止。所得到的Y的下標即為理論塔板數。因為塔底再沸器是部分氣化,相當於一塊塔板,所以最後的理論塔板數要減1。例如,精餾段塔板數:第一步,因為已知Y1(即Xd),所以可由氣液平衡方程,由y1計算x1;第二步,由精餾段操作線方程,由x1計算y2;然後重復第一步和第二步,分別算出x2和y3;以此類推計算至Xn=Xf為止,可得精餾段理論塔板數;提餾段理論塔板數的計算與精餾段類似,只不過是從Xf開始,先根據提餾段操作線方程算其同層氣相組成Ym,然後由Ym根據氣液平衡算Xm。
希望對你有所幫助。

B. 白酒蒸餾技術

白酒的製作方法:
所用設備:
1.原料處理及運送設備。有粉碎機、皮帶輸送機、斗式提升機、螺旋式輸送機、送風設備等。
2.拌料、蒸煮及冷卻設備。有潤料槽、拌料槽、絞龍、連續蒸煮機(大廠使用)、甑桶(小廠使用)、晾渣機、通風晾渣設備。
3.發酵設備。水泥發酵池(大廠用)、陶缸(小廠用)等。
4.蒸酒設備。蒸酒機(大廠用)、甑桶(小廠用)等。
我國的白酒生產有固態發酵和液態發酵兩種,固態發酵的大麴、小曲、麩曲等工藝中,麩曲白酒在生產中所佔比重較大,故此處僅簡述麩曲白酒的工藝。
製作方法:
1.原料粉碎。原料粉碎的目的在於便於蒸煮,使澱粉充分被利用。根據原料特性,粉碎的細度要求也不同,薯干、玉米等原料,通過20孔篩者佔60%以上。
2.配料。將新料、酒糟、輔料及水配合在一起,為糖化和發酵打基礎。配料要根據甑桶、窖子的大小、原料的澱粉量、氣溫、生產工藝及發酵時間等具體情況而定,配料得當與否的具體表現,要看入池的澱粉濃度、醅料的酸度和疏鬆程度是否適當,一般以澱粉濃度14~16%、酸度0.6~0.8、潤料水分48~50%為宜。
3.蒸煮糊化。利用蒸煮使澱粉糊化。有利於澱粉酶的作用,同時還可以殺死雜菌。蒸煮的溫度和時間視原料種類、破碎程度等而定。一般常壓蒸料20~30分鍾。蒸煮的要求為外觀蒸透,熟而不粘,內無生心即可。將原料和發酵後的香醅混合,蒸酒和蒸料同時進行,稱為「混蒸混燒」,前期以蒸酒為主,甑內溫度要求85~90℃,蒸酒後,應保持一段糊化時間。若蒸酒與蒸料分開進行,稱之為「清蒸清燒」。
4.冷卻。蒸熟的原料,用揚渣或晾渣的方法,使料迅速冷卻,使之達到微生物適宜生長的溫度,若氣溫在5~10℃時,品溫應降至30~32℃,若氣溫在10~15℃時,品溫應降至25~28℃,夏季要降至品溫不再下降為止。揚渣或晾渣同時還可起到揮發雜味、吸收氧氣等作用。
5.拌醅。固態發酵麩曲白酒,是採用邊糖化邊發酵的雙邊發酵工藝,揚渣之後,同時加入曲子和酒母。酒麴的用量視其糖化力的高低而定,一般為釀酒主料的8~10%,酒母用量一般為總投料量的4~6%(即取4~6%的主料作培養酒母用)。為了利於酶促反應的正常進行,在拌醅時應加水(工廠稱加漿),控制入池時醅的水分含量為58~62%。
6.入窖發酵。入窖時醅料品溫應在18~20℃(夏季不超過26℃),入窖的醅料既不能壓的緊,也不能過松,一般掌握在每立方米容積內裝醅料630~640公斤左右為宜。裝好後,在醅料上蓋上一層糠,用窖泥密封,再加上一層糠。發酵過程主要是掌握品溫,並隨時分析醅料水分、酸度、酒量、澱粉殘留量的變化。發酵時間的長短,根據各種因素來確定,有3天、4~5天不等。一般當窖內品溫上升至36~37℃時,即可結束發酵。
7.蒸酒。發酵成熟的醅料稱為香醅,它含有極復雜的成分。通過蒸酒把醅中的酒精、水、高級醇、酸類等有效成分蒸發為蒸汽,再經冷卻即可得到白酒。蒸餾時應盡量把酒精、芳香物質、醇甜物質等提取出來,並利用掐頭去尾的方法盡量除去雜質。
8、原酒儲存一段時間,勾兌成品,符合國家相關標准就可以出售了。

如果是單純蒸餾過程的技術細節,那就很細了,要點:輕、松、緩、勻,見氣撒糟、探氣撒糟、斷花取酒、掐頭去尾、高溫餾酒、底鍋黃水、適時調味、蒸糠攤涼等等。

C. 知識蒸餾綜述:網路結構搜索應用

【GiantPandaCV導語】知識蒸餾將教師網路中的知識遷移到學生網路,而NAS中天然的存在大量的網路,使用KD有助於提升超網整體性能。兩者結合出現了許多工作,本文收集了部分代表性工作,並進行總結。

知識蒸餾可以看做教師網路通過提供soft label的方式將知識傳遞到學生網路中,可以被視為一種更高級的label smooth方法。soft label與hard label相比具有以下優點:

那麼知識蒸餾在網路結構搜索中有什麼作用呢?總結如下:

知識蒸餾在很多工作中作為訓練技巧來使用,比如OFA中使用漸進收縮訓練策略,使用最大的網路指導小網路的學習,採用inplace distillation進行蒸餾。BigNAS中則使用三明治法則,讓最大的網路指導剩下網路的蒸餾。

目標:解決教師網路和學生網路的匹配問題(知識蒸餾中教師網路和學生網路匹配的情況下效果更好)。

在知識蒸餾中,選擇不同的教師網路、不同的學生網路的情況下,最終學生網路的性能千差萬別。如果學生網路和教師網路的容量相差過多,會導致學生難以學習的情況。Cream這篇文章就是為了解決兩者匹配問題。

普通的SPOS方法如左圖所示,通過采樣單路徑子網路進行訓練。右圖則是結合了知識蒸餾的方法,Cream提出了兩個模塊:

Cream中心思想是,子網路可以在整個訓練過程中協作學習並相互教導,目的是提高單個模型的收斂性。

消融實驗如下:

目標:通過教師引導各個block特徵層的學習,根據loss大小評判各子網的性能。

這是一篇將NAS和KD融合的非常深的一個工作,被CVPR20接收。之前寫過一篇文章進行講解,這里簡單回顧一下。

DNA是兩階段的one-shot NAS方法,因此其引入蒸餾也是為了取代普通的acc指標,提出了使用子網路與教師網路接近程度作為衡量子網性能的指標。

在訓練的過程中,進行了分塊蒸餾,學生網路某一層的輸入來自教師網路上一層的輸出,並強制學生網路這一層的輸出與教師網路輸出一致(使用MSELoss)。在搜索過程結束後,通過計算各子網路與教師網路的接近程度來衡量子網路。

目標:通過改進KL divergence防止學生over estimate或者under estimate教師網路。

上圖展示了OFA,BigNAS等搜索演算法中常用到的蒸餾方法,子網使用的是KL divergence進行衡量,文中分析了KL 散度存在的局限性:即避零性以及零強制性。如下公式所示,p是教師的邏輯層輸出,q是學生邏輯層輸出。

AlphaNet提出了一個新的散度衡量損失函數,防止出現過估計或者低估的問題。如下所示,引入了 。

其中 不為0或者1,這樣如下圖所示:

藍色線對應example 2表示,當 為負值,如果q過估計了p中的不確定性, 的值會變大。

紫色線對應example 1表示,當 為正數,如果q低估了p中的不確定性, 的值會變大

同時考慮兩種情況,取兩者中最大值作為散度:

目標:提出了衡量學生網路和教師網路 內部激活相似度 衡量指標,通過表徵匹配可以用來加速網路結構搜索。

這部分其實是屬於知識蒸餾分類中基於關系的知識,構建的知識由不同樣本之間的互作用構成。

具體的指標構成如上圖所示,是一個bsxbs大小的矩陣,這個在文中被稱為Representational Dissmilarity Matrix,其功能是構建了激活層內部的表徵,可以通過評估RDM的相似度通過計算上三角矩陣的關系系數,比如皮爾遜系數。

該文章實際上也是構建了一個指標P+TG來衡量子網的性能,挑選出最優子網路。

如上圖所示,RDM的計算是通過衡量教師網路的feature以及學生網路的feature的相似度,並選擇選取其中最高的RDM相似度。通過構建了一組指標,隨著epoch的進行,排序一致性很快就可以提高。

目標:固定教師網路,搜索最合適的學生網路。

對於相同的教師網路來說,不同的架構的學生網路,即便具有相同的flops或者參數,其泛化能力也有所區別。在這個工作中選擇固定教師網路,通過網路搜索的方法找到最優的學生網路,使用L1 Norm優化基礎上,選擇出與教師網路KL散度差距最小的學生網路。

目標:在給定教師網路情況下,搜索最合適的學生網路。

神經網路中的知識不僅蘊含於參數,還受到網路結構影響。KD普遍方法是將教師網路知識提煉到學生網路中,本文提出了一種架構感知的知識蒸餾方法Architecture-Aware KD (AKD),能夠找到最合適提煉給特定教師模型的學生網路。

Motivation: 先做了一組實驗,發現不同的教師網路會傾向於不同的學生網路,因此在NAS中,使用不同的教師網路會導致模型傾向於選擇不同的網路結構。

AKD做法是選擇使用強化學習的方法指導搜索過程, 使用的是ENAS那種通過RNN采樣的方法。

目標:從集成的教師網路中學習,並使用NAS調整學生網路模型的容量。NAS+KD+集成。

這篇文章之前也進行了講解,是網路結構搜索,知識蒸餾,模型集成的大雜燴。

詳見: https://blog.csdn.net/DD_PP_JJ/article/details/121268840

這篇文章比較有意思,使用上一步中得到的多個子網路進行集成,可以得到教師網路,然後使用知識蒸餾的方法來引導新的子網路的學習。關注重點在於:

AdaNAS受Born Again Network(BAN)啟發, 提出Adaptive Knowledge Distillation(AKD)的方法以輔助子網路的訓練。

集成模型選擇

從左到右代表四次迭代,每個迭代中從搜索空間中選擇三個模型。綠色線框出的模型代表每個迭代中最優的模型,AdaNAS選擇將每個迭代中最優subnet作為集成的對象。

最終集成的時候還添加了額外的weight參數w1-w4:

最終輸出邏輯層如下所示:(這個w權重也會被訓練,此時各個集成網路的權重是固定的,只優化w)

Knowledge Distillation

目標:解決知識蒸餾的效率和有效性,通過使用特徵聚合來引導教師網路與學生網路的學習,網路結構搜索則是體現在特徵聚合的過程,使用了類似darts的方法進行自適應調整放縮系數。ECCV20

文章總結了幾種蒸餾範式:

最後一種是本文提出的方法,普通的特徵蒸餾都是每個block的最後feature map進行互相蒸餾,本文認為可以讓教師網路的整個block都引導學生網路。

具體如何將教師網路整個block中所有feature map進行聚合,本文使用的是darts的方法進行動態聚合信息。(a) 圖展示的是對group i進行的可微分搜索過程。(b)表示從教師到學生的路徑loss構建,使用的是CE loss。(c)表示從學生到教師網路的路徑loss構建,使用的是L2 Loss。其中connector實際上是一個1x1 卷積層。

(ps: connector讓人想到VID這個工作)

D. 模型壓縮簡述

如今學術界新提出的神經網路模型越來越大,而在實際應用中很多模型都要被部屬在移動端。移動端的存儲空間以及算力都有限,無法運行太大的模型,所以模型壓縮這個概念就應運而生。本文簡單介紹一下在演算法(軟體)層面的模型壓縮方法和paper,不涉及硬體上的技巧。內容大多來自2020年李宏毅老師的課程。
目前在演算法層面模型壓縮主要有四個流派,簡介如下:

剪枝思想加入神經網路中。將網路中不重要的weight和neuron(網路中每層的層數)刪除。

傳說中的知識蒸餾。利用已經訓練好的大模型來指導小模型。主要用在分類任務上。

從數據存儲角度節省空間,將存儲參數的浮點數壓縮為更小的單位,用更少的位來表示值。

調整結構/使用特殊的結構來節省參數,後面再詳細介紹。

前面提到了刪除不重要的weight和neuron。對於權重來說,他的范數(比如L1或L2)大小可以看出重要程度:范數太小,不重要。對於神經元,不同輸入下的輸出是0的頻率可以看出重要程度:經常輸出0,不重要。刪完之後,對新的模型進行fine-tune。這是剪枝最基礎的思路,具體每層剪幾個,低於多少要剪掉不同paper有提出不同演算法。注意可以迭代多次刪除,不要一次刪除太多。在實踐中,刪除神經元的方式更容易被執行計算。
下面兩張圖是對於剪枝降低了參數的示意圖:

至於為什麼不直接訓練小的模型,因為大的網路容易訓練,小的網路容易陷入局部最優,所以就把大網路裁剪成小網路而不是直接訓練小網路。
當然可以剪枝的部分不限於weight和neuron,對於剪枝完之後模型的處理方法也有新的發現。下面給出相關的paper list:

Pruning Filters for Efficient ConvNets(ICLR 2017)
Learning Efficient Convolutional Networks Through Network Slimming(ICCV2017)
Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration(CVPR2019)
The Lottery Ticket Hypothesis:Finding Sparse,Trainable Neural Networks(ICLR2019)
Rethinking the value of network pruning(ICLR2019)
Deconstructing Lottery Tickets:Zeros,Signs,and the Supermask(ICML2019)

通過已訓練好的teacher模型訓練student模型,指導/學習的過程在這里被抽象為蒸餾(distillation)。可以蒸餾模型的輸出,直接匹配logits,或者蒸餾模型中間輸出的特徵feature,直接匹配feature或者學習feature如何轉換 。
先說最經典的,對logits的蒸餾。結構如下圖:

至於為什麼要在softmax前除T,paper給的解釋是讓softmax的輸出更平滑(意為輸入更加類似soft target,而不是one-hot那樣的hard target)。知識蒸餾還有一個有趣的點就是讓小的模型還學會了不同輸出label間的關系,比如在mnist模型可以學會label1和7很相似。
對於logits distillation的研究還有Deep Mutual Learning,Born Again Neural Networks,Improved Knowledge Distiilation via Teacher Assistant等研究,在下面的paperlist也有列出。
接下來簡單介紹feature distillation。

類似的研究還有Similarity-Preserving Knowledge Distiilation,下面是paper list:

Distilling the knowledge in a Neural Network(NIPS2014)
Deep Mutual Learning(CVPR2018)
Born Again Neural Networks(ICML2018)
Improved Knowledge Distiilation via Teacher Assistant(AAAI2020)
Paying More Attention to Attention:Improving the Performance of Convolutional Neural Networks via Attention Transfer(ICLR2017)
Relational Knowledge Distiilation(CVPR2019)
Similarity-Preserving Knowledge Distiilation(ICCV2019)

可以用的方法有權重聚類,如下圖:

也可以用一些經典的方法比如哈夫曼編碼。
還有一種方法是使權重全都是+1或-1:

調整結構來節省參數的圖示如下:

對於卷積結構也類似,傳統的卷積結構需要3x3x2x4=72個參數,而以下結構只需要18+8=26個:

著名的模型有SqueezeNet,MobileNet,ShuffleNet,Xception。

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

最近利用知識蒸餾的方法,對業務中的性能有了可觀的提升,因此在這里總結一波。本文主要從宏觀的角度分析一下各個蒸餾演算法的蒸餾方式,具體細節可以根據興趣閱讀論文~ 知識蒸餾是一種模型壓縮常見方法,用於模型壓縮指的是在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信息,而鑒別器主要被用來鑒別學生網路的輸出和教師網路的輸出,最終學習的目的就是是的學生網路能夠欺騙鑒別器,是的鑒別起無法區分出學生網路和教師網路的輸出。最終實現學生網路學習到了教師網路的輸出特徵和分布。而無監督對抗學習這篇文章的出發點有點不一樣,由於一些實踐問題(如隱私、法律等問題),給定深度網路的訓練數據往往不可用,除了一些介面之外,給定網路的架構也是未知的。基於此,本文提出了一種利用生成對抗網路訓練高效深度神經網路的新框架。講預先訓練好的教師網路看作一個固定的鑒別器,利用該鑒別器產生的訓練樣本可以得到最大的鑒別結果。然後,利用生成的數據和教師網路,同時訓練出模型尺寸較小、計算復雜度較低的高效網路。

F. 【心理學與AI】2019年9月DNN模型壓縮-綜述

Cheng, Y., Wang, D., Zhou, P., & Zhang, T. (2017). A survey of model compression and acceleration for deep neural networks. arXiv preprint arXiv:1710.09282.

目前的DNN太龐大,使得計算需要的時間和空間都很大。為了優化這個問題,科學家們提出了壓縮模型的各種方法。

牛逼的那些DNN到底有多大?
2012的CNN(已經算參數少的了),6千萬個參數,5卷積層+3全連接。在NVIDIA K40的機器上要訓練2-3天 (Krizhevsky et al. , NIPS , 2012) 。人臉識別網路,幾億個參數 (Taigman et al., CVPR , 2014; Lu et al., CoRR , 2016)。純靠全連接的網路甚至有幾十億個參數 (Dean et al., NIPS , 2012) 。

在移動設備上的使用局限
移動設備的內存,CPU,續航能力都有限,經不起那麼大的網路折騰。比如ResNet-50有50個卷積層,僅處理一個圖片就需要95M和38億次的浮點數乘法。經過優化之後可以減少75%的參數,節省50%的計算時間。

*卷:卷積層;全:全連接層
*新:從頭訓練的模型(train from scratch);預:預訓練模型(pre-trained model)

這些方法各有各的優勢,有些可以結合著使用效果更佳,接下來我們就分別對這些方法進行描述。

包括用K-means 聚類減少參數數量[6,7],把參數壓縮到8-bit[8], 16-bit[9],用霍夫曼編碼(Huffman coding)來壓縮碼表[10]。用二階偏導來衡量網路參數的重要性[11]。最極端情況乾脆二值化參數,也就是參數只有可能是0或1,形成二值網路[12-14]。

缺點 二值網路在簡化大型網路的時候損失較大

最早的剪枝演算法是偏差權重衰減(Biased Weight Decay) [18].

The Optimal Brain Damage [19] and the Optimal Brain Surgeon [20] methods 根據the Hessian of the loss function來削減鏈接的數量。
這幾種方法需要從頭訓練模型。

近來開始流行對預訓練的模型進行剪枝[21,22],用哈希碼表來儲存參數,實現參數共享[23]。也已經有工作把上述的壓縮,剪枝,參數貢獻融合在一個統一的流程中[24]。

也有一些新興的工作,將稀疏約束(sparsity constraints)加入到CNN的訓練中[25-28]。大大減少了卷積核的數量,甚至是層數。

缺點 剪枝有很多需要手動調整的地方,對於某些應用場景來說太復雜了。

由於全連接層的參數過多,而且f(x,M) = σ(Mx),這里的σ(·)不是一個線性變化(因為引入了層間的非線性變換,如Relu),是對於每個元素特異的變換。

也就是說本來這個矩陣中每個值之間完全沒有關系,我就得把每個值都單獨存下來, 計算量也是O(mn)。現在我創建一種關系來約束部分的參數,那我只需要存這個關系就好了,不用存那麼多值了。

缺點 人為地進行約束會降低模型地准確率,而且對特定任務找到合適的約束關系本身就很難,現在還沒有一種靠譜的理論來定位這個約束關系。

這個方法的核心是對卷積核進行低秩分解,分解之後重要的信息被保留下來,計算的速度也提高了。

對於預訓練的模型,可以一層一層的分解卷積核,分解完一層之後這層的參數就固定了,但是因為會有損失,下一層要先繼續調參,再分解。

也有人提出基於低秩因子分解從頭訓練的做法[40]。Canonical Polyadic (CP)[39],Batch Normalization (BN)[40]這兩種方法都可以做分解,效果都很好,但是前者存在有時候找不到一個最優的秩(best rank-K)的情況。具體是什麼數學方法沒有看。

全連接層是二維的矩陣,同樣也可以用這種方法進行降維。

缺點 分解本身需要的計算量很大;只能逐層分解,不能進行全局的優化;為了達到跟原模型相近的效果,需要重新訓練的量較大(因為每一層分解之後都要重新調參)。

(這句話也沒有引用,但是感覺說的挺有道理在這里存個檔。)

這個方法的核心思想其實跟結構矩陣挺像的,只不過這個方法是針對卷積層做的處理。

由於卷積層中有大量的卷積核,如果對他們進行隨機的初始化,會發現最後訓練出來也有很多的冗餘。比如,有一些卷積核,是另一些卷積核的-1倍。這樣我們還不如在一開始定義一些卷積核的約束規則,比如直接定義有一些核是另一些的-1倍[45]。(文獻中的方程4)

反正定不定義訓練出來都是類似的特徵,為什麼要定義這個約束呢?當然是首先節省了儲存卷積核的空間,同時也節省了訓練所需要的計算量。

雖然理論上不知道為什麼,但是實際訓練顯示,如果卷積核之間有些關聯的話效果甚至會更好。

缺點
這個方法對比較寬的淺層網路(e.g. VGG)效果較好,但是對窄而深的網路(e.g. GoogleNet,Resial Net)效果不好。另外,這種約束定義之後有時候會造成訓練結果的不穩定。

要把一個復雜模型進行壓縮,有人想到可以通過遷移的方法來把核心信息提取出來,但是之前這個方法只限於在淺層模型上操作[50]。

知識蒸餾這個概念是後來提出來的,它把復雜模型比作老師,目標的壓縮模型,即簡單模型比作學生,把老師的知識遷移到學生身上,並讓學生在處理問題上的表現盡可能去逼近老師,就是知識蒸餾的核心演算法。

數學方法的主要步驟就是,把學生網路和老師網路的輸出結果看成兩個分布,我要讓這兩個分布盡可能的接近。那麼我首先要把輸出結果(例如代表A類的輸出神經元的值為0.8,B類的0.2,C類的0.2)轉化為標准化的分布,並且我想盡可能突出最大值。這里就用到softmax函數,把輸出結果映射到(0,1)上的分布,並且讓值的和為1。

接下來我要基於當前兩個分布的差異,來定義一個損失函數,我的目標就是讓這個損失盡可能的小。這里常用的損失函數就是交叉熵損失函數(CrossEntropy Loss)。

一般我們用KL散度的值表示倆概率分布之間的差異,而交叉熵是等於KL散度加上一個常量(信息熵),其公式相比KL散度更容易計算,因此在機器學習中常常使用交叉熵損失函數而不是KL散度。

現有的KD演算法中,FitNets[53] 提出如何將寬而淺的模型,壓縮成窄而深的模型。這些演算法在各大數據集(e.g. MNIST, CIFAR-10, CIFAR-100, SVHN, AFLW) 都得到了有效的驗證,學生網路有的時候甚至比老師網路的效果更好。

之後的工作[54-57]進一步優化了這個演算法的計算速度,或是尋找一下更寬松的訓練條件(e.g. Attention Transfer (AT) [57]),又能達到相近的效果。

缺點 這個方法只能用在用softmax+crossentrophy loss訓練的網路上,所以也有一些局限。另一方面,這個方法有時候約束條件太嚴格了,不一定訓練得出來。

基於注意的演算法是最近比較新的趨勢,它的核心思想是,在訓練時,選擇性地關注那些和任務相關的網路結構,而不是整個網路,通過這種方式來大幅節省計算量。

Dynamic capacity network (DCN) [59] 的設計包括了兩個網路,一個小型網路和一個大型網路,訓練數據先經過小網路,確定一下主要激活的是哪些區域,然後再喂給大網路,這時只需計算那些重要區域的權重就可以了。

Sparsely-gated mixture-of-experts Layer (MoE) [60] 的思想也是只計算那些重要的梯度,這個MoE模塊是由很多個專家網路構成的,並且另外有一個負責做選擇的網路,通過訓練它可以對不同的輸入數據,選擇不同的專家網路的組合來學習。

針對殘差網路的壓縮,也有幾項研究提出隨機深度(stochastic depth)的演算法[63-65],相當於對於每個輸入數據(batch),隨機(或者根據某種規則)抽掉幾層網路進行訓練。(感覺跟dropout差不多)

還有一些研究對池化層(pooling)進行優化,但是僅僅是提高計算速度,沒有壓縮空間。

壓縮工作要基於一些基準的模型進行改進,或者跟他們的效果進行比較,現有的一些基準模型大概如表格所列。

評估一個壓縮工作的效果主要是兩方面,空間的壓縮程度和計算速度的提升程度。這兩方面分別由 壓縮率(compression rate) 加速率(speep rate)

壓縮率是用基準模型的參數量a,除以壓縮後模型的參數量a*得到的。(也有用右邊這種的)

加速率則是用基準模型需要的訓練時間s,除以壓縮後模型的訓練時間s*得到的。

對於小模型來說,這兩個評估指標通常是高度相關的。但是不同的模型這兩個指標的關系也會有差異。比如圖像處理的CNN,它主要是剛開始幾層的大量卷積操作,浮點數計算比較耗時間。但有些DNN(幾百層的)很瘦的,主要是全連接層的參數占據了大多數的空間和時間。

總的來說並沒有一個統一的准則,而是根據具體的應用場景來的。作者提供了一些參考建議。

目前對於深度網路的壓縮演算法還處於一個比較初級的階段,面臨很多的困難和挑戰。

G. 什麼是蒸餾,蒸餾操作有什麼作用

把水煮開收集那些水蒸氣就叫蒸餾可以提純,比如說白酒就是用蒸餾技術提取酒精的。

H. 蒸餾是物理變化還是化學變化 它有哪些特點

屬於物理變化,拿水來說,首先水經過加熱蒸發轉變為水蒸汽,再經液化得到蒸餾水,水與蒸餾水的區別為水中有雜質以及礦物質,而蒸餾水中沒有,原因是蒸餾水是由水蒸汽液化得到的,所以蒸餾是物理變化。

蒸餾

是一種熱力學的分離工藝,它利用混合液體或液-固體系中各組分沸點不同,使低沸點組分蒸發,再冷凝以分離整個組分的單元操作過程,是蒸發和冷凝兩種單元操作的聯合。與其它的分離手段,如萃取、吸附等相比,它的優點在於不需使用系統組分以外的其它溶劑,從而保證不會引入新的雜質。

基本分類

1、簡單蒸餾,如製造蒸餾水以去處其中溶解的固體雜質;製造蒸餾酒以濃縮酒精,去除部分水分;

2、精餾,一個設備中進行多次部分汽化和部分冷凝,以分離液態混合物,如將石油經過分餾可以分離出汽油、柴油、煤油和重油等多種組分。

分餾

是分離幾種不同沸點的混合物的一種方法;對某一混合物進行加熱,針對混合物中各成分的不同沸點進行冷卻分離成相對純凈的單一物質過程。過程中沒有新物質生成,只是將原來的物質分離,屬於物理變化。

干餾

是固體或有機物在隔絕空氣條件下加熱分解的反應過程。干餾的結果是生成各種氣體、蒸氣以及固體殘渣。氣體與蒸氣的混合物經冷卻後被分成氣體和液體。干餾是人類很早就熟悉和採用的一種生產過程。

以上是我整理的蒸餾的知識點,希望能幫到你。

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

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

但是,它的存在必有其合理性,更何況是我偶像,深度學習第一人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%的准確率。因此,在任務追求的精度和推理性能及邊界性之間尋求一個權衡即可。

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

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

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

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

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

閱讀全文

與知識蒸餾演算法相關的資料

熱點內容
廣州化學實驗廢液污水怎麼處理 瀏覽:436
edi證查詢 瀏覽:974
鋼管防腐環氧樹脂漆分類 瀏覽:719
環氧樹脂自流平材料技術要求 瀏覽:497
蒸汽爐除垢劑的用法 瀏覽:298
石油蒸餾加沸石嗎 瀏覽:180
超濾膜的進出水壓差是多少 瀏覽:651
安徽潤心水處理怎麼樣 瀏覽:487
ro膜可以用檸檬酸浸泡嗎 瀏覽:640
凈水器反滲透膜包裝紙要撕掉嗎 瀏覽:342
衛生間頂上污水管換管多少錢 瀏覽:916
污水指標cod是什麼項目 瀏覽:18
重慶塵蟎過敏凈化器多少錢一台 瀏覽:977
污水井爬梯尺寸6 瀏覽:939
合成樹脂玩具容易變色嗎 瀏覽:568
污水中亞硫酸怎麼去除 瀏覽:163
鋁鍋能用檸檬酸除垢劑 瀏覽:353
農村污水是如何抽樣 瀏覽:205
過期的蒸餾水還可以洗臉嗎 瀏覽:598
過濾f7等級 瀏覽:362