訓(xùn)練好的模型,用自己蒸餾一下,就能提高性能,是不是很神奇,這里面的原理到底是什么呢,這要從模型集成開始說起。
在現(xiàn)在的標準技術(shù)下,例如過參數(shù)化、batch-normalization和添加殘差連接,“現(xiàn)代”神經(jīng)網(wǎng)絡(luò)訓(xùn)練 —— 至少對于圖像分類任務(wù)和許多其他任務(wù)來說 —— 通常是相當(dāng)穩(wěn)定的。使用標準的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練算法(通常是帶動量的SGD),學(xué)習(xí)模型的表現(xiàn)一貫良好,不僅在訓(xùn)練精度方面,甚至在測試精度方面,無論在訓(xùn)練過程中使用的是哪種隨機初始化或隨機數(shù)據(jù)順序。例如,用不同的隨機種子在CIFAR-100數(shù)據(jù)集上訓(xùn)練相同的WideResNet-28-10架構(gòu)10次,平均測試精度為81.51%,而標準偏差僅為0.16%。
在一篇新論文“Towards Understanding Ensemble, Knowledge Distillation, and Self-Distillation in Deep Learning“中,我們專注于研究神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中純粹由于隨機化產(chǎn)生的差異。我們提出了以下問題:除了測試準確性上的微小偏差外,從不同隨機初始化中訓(xùn)練出來的神經(jīng)網(wǎng)絡(luò)是否學(xué)習(xí)了非常不同的函數(shù)?如果是這樣,差異從何而來?我們?nèi)绾螠p少這種差異,使神經(jīng)網(wǎng)絡(luò)更穩(wěn)定,甚至更好?這些問題并非微不足道,它們與深度學(xué)習(xí)中廣泛使用的三種技術(shù)有關(guān)。
深度學(xué)習(xí)中的三個神秘之處
神秘之處1:集成
使用不同隨機種子的學(xué)習(xí)網(wǎng)絡(luò)F1,…F10 —— 盡管具有非常相似的測試性能 —— 被觀察到與非常不同的函數(shù)相關(guān)聯(lián)。實際上,使用一種著名的技術(shù)叫做集成(ensemble),只需對這些獨立訓(xùn)練的網(wǎng)絡(luò)的輸出進行無加權(quán)的平均,就可以在許多深度學(xué)習(xí)應(yīng)用中獲得測試時性能的巨大提升。(參見下面的圖1。)這意味著單個函數(shù)F1,…F10必須是不同的。然而,為什么集成的效果會突然提高呢?另外,如果一個人直接訓(xùn)練(F1+?+F10)/10,為什么性能提升會消失?
圖1:在深度學(xué)習(xí)應(yīng)用中,集成可以提高測試精度的性能,但這種精度的提高無法通過直接訓(xùn)練模型的平均值來實現(xiàn)。
神秘之處2:知識蒸餾
盡管集成在提高測試時性能方面非常出色,但在推理時間(即測試時間)上,它的速度會慢10倍:我們需要計算10個神經(jīng)網(wǎng)絡(luò)的輸出,而不是一個。當(dāng)我們在低能耗、移動環(huán)境中部署這樣的模型時,這是一個問題。為了解決這個問題,提出了一種叫做知識蒸餾的開創(chuàng)性技術(shù)。也就是說,知識蒸餾只需要訓(xùn)練另一個單獨的模型就可以匹配集成的輸出。在這里,對貓圖像的集成輸出(也稱為“dark knowledge”)可能是類似“80% cat + 10% dog + 10% car”,而真正的訓(xùn)練標簽是“100% cat”。(參見下面的圖2。)
事實證明,經(jīng)過訓(xùn)練的單個模型,在很大程度上,可以匹配10倍大的集成測試時的表現(xiàn)。然而,這導(dǎo)致了更多的問題。為什么與真實的標簽相比,匹配集成的輸出能給我們更好的測試精度?此外,我們是否可以對知識蒸餾后的模型進行集成學(xué)習(xí)以進一步提高測試精度?
圖2:知識蒸餾和自蒸餾也提高了深度學(xué)習(xí)的性能。
神秘之處3:自蒸餾
注意,知識蒸餾至少直觀上是有意義的:教師集成模型的測試準確率為84.8%,所以單個學(xué)生模型的測試準確率可以達到83.8%。下面的現(xiàn)象,被稱為自蒸餾(或“Be Your Own Teacher”),是完全令人驚訝的 ——通過對同一架構(gòu)的單個模型執(zhí)行知識蒸餾,測試的準確性也可以得到提高。(請參見上面的圖2。) 考慮一下這個問題:如果訓(xùn)練一個單獨的模型只能得到81.5%的測試準確率,那么為什么“再次訓(xùn)練同一個模型把自己當(dāng)作老師”突然可以把測試準確率提高到83.5%呢?
神經(jīng)網(wǎng)絡(luò)集成 vs 特征圖集成
大多數(shù)現(xiàn)有的集成理論只適用于個體模型本質(zhì)上不同的情況(例如,使用不同變量子集的決策樹)或在不同的數(shù)據(jù)集上訓(xùn)練(如bootstrapping)。在深度學(xué)習(xí)世界中,單獨訓(xùn)練的神經(jīng)網(wǎng)絡(luò)具有相同的架構(gòu),使用相同的訓(xùn)練數(shù)據(jù) —— 它們唯一的區(qū)別在于訓(xùn)練過程中的隨機性。
也許現(xiàn)有的深度學(xué)習(xí)中最接近去匹配集成定理的是隨機特征映射的集成。一方面,將多個隨機(特定的)特征的線性模型結(jié)合在一起可以提高測試時的性能,因為它增加了特征的數(shù)量。另一方面,在某些參數(shù)上,神經(jīng)網(wǎng)絡(luò)權(quán)重可以保持非常接近他們的初始化(稱為neural tangent kernel、NTK,regime),以及由此產(chǎn)生的網(wǎng)絡(luò)僅僅是學(xué)習(xí)一個由完全隨機初始化決定的特定的特征映射的線性函數(shù)。當(dāng)將兩者結(jié)合起來時,我們可以推測深度學(xué)習(xí)中的集成與隨機特征映射中的集成原理相同。這就引出了下面的問題:
與隨機特征映射(即NTK特征映射)相比,集成/知識蒸餾在深度學(xué)習(xí)中的工作方式是否相同?
**回答:并非如此,下面圖3的實驗證明了這一點。**此圖比較了深度學(xué)習(xí)中的集成和知識蒸餾與隨機特征映射的線性模型的集成和知識蒸餾。集成在兩種情況下都有效。然而,圖3中的準確性清楚地表明,它們的工作原因完全不同。具體地說:
- 與深度學(xué)習(xí)的情況不同,隨機特征設(shè)置下集成的優(yōu)越性能不能被蒸餾為單個模型。例如,在圖3中,neural tangent kernel(NTK)模型在CIFAR-10數(shù)據(jù)集上的集成精度達到了70.54%,但經(jīng)過知識精餾后,集成精度下降到66.01%,甚至低于個體模型的測試精度66.68%。在深度學(xué)習(xí)中,直接訓(xùn)練模型的平均值(F1+?+F10)/10與訓(xùn)練單個模型Fi相比沒有任何好處,而在隨機特征設(shè)置中,訓(xùn)練平均值的效果優(yōu)于單個模型和它們的集成。例如,在圖3中,NTK模型的集成達到了70.54%的精度,但這甚至比直接訓(xùn)練10個模型的平均的精度72.86%還要差。
圖3:集成在隨機特征映射中起作用(但原因與深度學(xué)習(xí)完全不同),而知識蒸餾在隨機特征映射中不起作用。
神經(jīng)網(wǎng)絡(luò)的原因是執(zhí)行(層次特性學(xué)習(xí)) —— 單個Fi模型,盡管使用不同的隨機初始化,仍有能力學(xué)習(xí)相同的特性集。因此,與單個網(wǎng)絡(luò)相比,它們的平均幾乎無法提供額外的能力。然而,在線性設(shè)置中,每個Fi使用一組不同的特定的特征。因此,盡管結(jié)合這些特征(使用集合或直接訓(xùn)練平均值)確實有優(yōu)勢,但由于特征的稀缺性,它們不能被提煉成單個模型。
集成 vs 減少單個模型的誤差
除了隨機特征的集合外,人們還可以推測,由于神經(jīng)網(wǎng)絡(luò)的高度復(fù)雜性,每個單獨的模型Fi可能學(xué)習(xí)一個函數(shù)Fi (x)=y+ξi,其中ξi是一些依賴于訓(xùn)練過程中使用的隨機性的噪聲。經(jīng)典統(tǒng)計表明,如果所有的ξi都是大致獨立的,那么對它們平均可以大大減少噪聲。因此,
“集成減少誤差”是集成可以讓性能提升的原因嗎?
答案:我們的證據(jù)表明,這種減少誤差的假設(shè)在深度學(xué)習(xí)的背景下是非常值得懷疑的:
- 集成不會永遠提高測試精度:當(dāng)集成超過100個單獨的模型時,與集成超過10個單獨的模型相比,通常沒有區(qū)別。因此,100ξi的均值與10ξi的相比不再減少方差 —— 這表明ξi的(1)可能不是獨立的,(2)可能是有偏的,因此其均值不為零。在(1)的情況下,很難討論通過對這些算子的平均可以減少多少誤差。即使人們希望接受理想主義的信念即(1)不會發(fā)生,所有的ξi都是有偏的,用符號表示的話,F(xiàn)i(x)=y+ξ+ξi‘,其中ξ是一般性偏差,ξi '是獨立偏差。那么為什么知識蒸餾能工作呢?在集成之后,我們期望輸出可以接近y+ξ ,也就是具有一般性的偏差ξ。那么,為什么使用具有誤差ξ的輸出(也稱為 dark knowledge)比原來訓(xùn)練的真實標記更好呢?在圖4中,我們看到神經(jīng)網(wǎng)絡(luò)的集成學(xué)習(xí)并不總是提高測試精度——至少在輸入是類似高斯的情況下是這樣。換句話說,在這些網(wǎng)絡(luò)中,“平均這些數(shù)據(jù)”并不會導(dǎo)致任何精度的提高。因此,我們需要更仔細地理解深度學(xué)習(xí)中的集成,而不是像“減少誤差”這樣的一般性說法。
圖4:當(dāng)輸入為類高斯時,實驗表明集成并沒有提高測試精度。
多視圖數(shù)據(jù):新方法去證明深度學(xué)習(xí)中的集成
由于集成不太可能在非結(jié)構(gòu)化的隨機輸入下工作(見圖4),我們必須查看數(shù)據(jù)中的特殊結(jié)構(gòu)以正確理解它。
在我們的新工作中,我們建議研究一種可以在許多深度學(xué)習(xí)擅長的數(shù)據(jù)集中找到的共同結(jié)構(gòu)。特別是在視覺數(shù)據(jù)集中,對象通常可以使用多個視圖進行分類。例如,一輛汽車的圖像可以根據(jù)前燈、車輪或窗戶分類為一輛汽車。對于汽車在圖像中的典型視圖,我們可以觀察到所有這些特征,使用其中一個特征將其分類為汽車就足夠了。然而,也有一些從特定角度拍攝的汽車圖像,其中一個或多個特征是缺失的。例如,一輛汽車正面朝前的圖像可能沒有車輪的特征。我們在圖5中給出了實際的例子。
圖5:CIFAR-10訓(xùn)練后的ResNet-34第23層部分通道的可視化
我們將這種結(jié)構(gòu)稱為“多視圖”,其中每個數(shù)據(jù)類都有多個視圖特征。在大多數(shù)數(shù)據(jù)中,幾乎所有的視角特征都會顯示出來,但在一些數(shù)據(jù)中,一些視圖特征可能會丟失。(更廣義地說,“多視圖”結(jié)構(gòu)不僅表現(xiàn)在輸入像素空間中,也表現(xiàn)在中間層中)
我們發(fā)展出一個定理,表明在多視圖數(shù)據(jù)下的神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,網(wǎng)絡(luò)會:
- 根據(jù)學(xué)習(xí)過程中使用的隨機性,快速學(xué)習(xí)這些視圖特征的子集。記住少數(shù)剩余的不能使用這些視圖特性正確分類的數(shù)據(jù)。
第一點意味著,不同網(wǎng)絡(luò)的集成將收集所有這些可學(xué)習(xí)的視圖特征,從而實現(xiàn)更高的測試精度。第二點意味著單個模型不能學(xué)習(xí)所有的視圖特性,不是因為它們沒有足夠的容量,而是因為沒有足夠多的訓(xùn)練數(shù)據(jù)來學(xué)習(xí)這些視圖。大多數(shù)數(shù)據(jù)已經(jīng)用現(xiàn)有的視圖特征進行了正確的分類,所以在這個訓(xùn)練階段它們基本上不提供梯度。
知識蒸餾:讓單個模型去學(xué)習(xí)多個視圖
在這項新工作中,我們繼續(xù)展示知識蒸餾的工作原理。在現(xiàn)實生活中,一些汽車圖像可能比其他圖像看起來“更像貓”:例如,一些汽車圖像的前燈看起來像貓的眼睛。當(dāng)這種情況發(fā)生時,集成模型可以提供有意義的dark knowledge:例如,“汽車圖像X有10%像一只貓。”
現(xiàn)在來看看關(guān)鍵的觀察結(jié)果。當(dāng)訓(xùn)練一個單獨的神經(jīng)網(wǎng)絡(luò)模型時,如果“前照燈”視圖沒有被學(xué)習(xí),那么即使剩余的視圖仍然可以正確地將圖像X標記為一輛車,它們也不能用來匹配“dark knowledge”圖像X是10%像一只貓。換句話說,在知識蒸餾過程中,個體模型被迫學(xué)習(xí)每一個可能的視圖特征,以匹配集成的性能。請注意,深度學(xué)習(xí)中知識提煉的關(guān)鍵是,作為神經(jīng)網(wǎng)絡(luò)的單個模型正在進行特征學(xué)習(xí),因此能夠?qū)W習(xí)集成的所有特征。這與我們在實踐中觀察到的情況是一致的。(參見圖6)。
圖6:知識蒸餾已經(jīng)從集成中學(xué)習(xí)了大多數(shù)視圖特征,因此在知識蒸餾后對模型進行集成學(xué)習(xí)不會提供更多的性能提升。
自蒸餾:隱式地結(jié)合集成和知識蒸餾
在這項新工作中,我們還為知識自蒸餾提供了理論支持(參見圖3)。訓(xùn)練一個單個模型以匹配另一個相同單個模型的輸出(但使用不同的隨機種子),以某種方式提高了性能。
在較高的層次上,我們把自蒸餾看作是集成蒸餾和知識蒸餾更緊密的結(jié)合。當(dāng)從隨機初始化學(xué)習(xí)單個模型F2以匹配單獨訓(xùn)練的單個模型F1的輸出時,可以期望F2根據(jù)它自己的隨機初始化學(xué)習(xí)特征的子集。除此之外,F(xiàn)2也有動機去學(xué)習(xí)F1已經(jīng)學(xué)習(xí)過的特征子集。換句話說,人們可以把這個過程看作是“集成學(xué)習(xí)兩個單獨的模型F1和F2,并將其蒸餾為F2。最終的學(xué)習(xí)模型F2可能不一定涵蓋數(shù)據(jù)集中所有的可學(xué)習(xí)視圖,但它至少有潛力學(xué)習(xí)所有可以通過集成學(xué)習(xí)覆蓋兩個單獨模型的視圖。這就是測試時性能提升的來源。
總結(jié)
在這項工作中,我們盡我們所知,展示了第一個理論證明,有助于理解集成在深度學(xué)習(xí)中的工作原理。我們也提供了實證證據(jù)來支持我們的理論和我們的“多視角”數(shù)據(jù)假設(shè)。我們認為,我們的框架可以適用于其他情況。例如,使用隨機裁剪的數(shù)據(jù)增強可以被視為增強網(wǎng)絡(luò)學(xué)習(xí)“多視圖”的另一種方式。我們希望,在實踐中,我們關(guān)于神經(jīng)網(wǎng)絡(luò)如何在訓(xùn)練過程中提取特征的新理論觀點,也可以幫助設(shè)計新的原則和方法,以提高神經(jīng)網(wǎng)絡(luò)的測試精度,并有可能與模型集成的測試精度相匹配。
英文原文:https://www.microsoft.com/en-us/research/blog/three-mysteries-in-deep-learning-ensemble-knowledge-distillation-and-self-distillation/