本文轉(zhuǎn)自徐飛翔的“卷積網(wǎng)絡(luò)模型壓縮的若干總結(jié)”
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
為什么要用模型壓縮
深度卷積神經(jīng)網(wǎng)絡(luò)CNN在一系列應(yīng)用特別是計(jì)算機(jī)視覺(jué)領(lǐng)域取得了很多最為先進(jìn)的成果。一個(gè)限制這個(gè)技術(shù)更為廣泛發(fā)展的絆腳石就是巨大的數(shù)據(jù)儲(chǔ)存需求。原始的AlexNet網(wǎng)絡(luò)架構(gòu)需要大概240MB的內(nèi)存以儲(chǔ)存訓(xùn)練參數(shù),以用于對(duì)一張圖片進(jìn)行分類(lèi),當(dāng)考慮到其更為深層的網(wǎng)絡(luò)VGG時(shí),其需要更多的內(nèi)存(528MB)[1,2]。這種種(海量?jī)?nèi)存需求)的原因之一,特別是深度學(xué)習(xí)的發(fā)展早期,可能是受到了想要在ImageNet這個(gè)比賽中取得最好成績(jī)的欲望驅(qū)使,才設(shè)計(jì)出了這樣的網(wǎng)絡(luò)。然而,除了讓深度學(xué)習(xí)能夠正常工作外,還有許多是需要額外考慮的。
在一些基于云計(jì)算部署的環(huán)境中,因?yàn)橛兄哂嗟挠?jì)算資源,包括有著大量的GPU支持,以上談到的大量的內(nèi)存需求可能不是一個(gè)大問(wèn)題。但是,考慮到在一些移動(dòng)設(shè)備或者邊緣計(jì)算設(shè)備上時(shí),情況可能就有所不同了,這些資源要求限制了深度神經(jīng)網(wǎng)絡(luò)不能真正地在應(yīng)用場(chǎng)景部署。最近,隨著深度學(xué)習(xí)應(yīng)用在移動(dòng)物聯(lián)網(wǎng)設(shè)備上的蔓延(包括智能手機(jī)),人們發(fā)現(xiàn)已經(jīng)到了解決這個(gè)重要問(wèn)題的時(shí)候了。
因此,嘗試使得深度神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)要求更少的內(nèi)存儲(chǔ)存和計(jì)算資源完成工作成為了一個(gè)新的研究方向。特別來(lái)說(shuō),這個(gè)研究方向指的就是,對(duì)大量笨重的模型(指的是參數(shù)量多)進(jìn)行修改,以減少其內(nèi)存需求的同時(shí)盡量取得更多的其原來(lái)未修改模型的性能。另一個(gè)研究方向就是嘗試去從頭設(shè)計(jì)一個(gè)內(nèi)存使用更為緊湊的神經(jīng)網(wǎng)絡(luò)。接下來(lái),我們會(huì)討論這些方法的一些細(xì)節(jié)。
內(nèi)存緊致的網(wǎng)絡(luò)
讓我們回顧C(jī)NN結(jié)構(gòu)的設(shè)計(jì),我們會(huì)發(fā)現(xiàn)其壓縮模型的一個(gè)直接的方法就是考慮更為內(nèi)存緊致的模型。首先,我們知道對(duì)于一個(gè)標(biāo)準(zhǔn)的M輸入通道, N輸出通道的大小為的卷積核而言,其參數(shù)量為
,對(duì)于全連接網(wǎng)絡(luò)而言,則是 i個(gè)輸入單元 j 個(gè)輸出單元的要求參數(shù)量為
。
舉例來(lái)說(shuō),在VGG16中,其最后一個(gè)卷積塊的一層的參數(shù)量為 ,而且最后還需要將這個(gè)
的特征圖喂給最后的4096個(gè)節(jié)點(diǎn)的全連接層,因此,光是在最后的全連接這一層,就需要
的參數(shù)量。因此,將最后一層的全連接層拋棄并且替換成其他網(wǎng)絡(luò)已經(jīng)成為了實(shí)踐中的常規(guī)操作,比如ResNet和Inception中都這樣做過(guò),這樣可以使得內(nèi)存需求的大幅度下降,同時(shí)可以讓模型設(shè)計(jì)得更深。[3,4]
最近,有很多文章在嘗試解決這個(gè)導(dǎo)致卷積層復(fù)雜的因素,以壓縮模型大小。2016年發(fā)表的SqueezeNet是第一篇文章考慮設(shè)計(jì)一個(gè)內(nèi)存緊湊的架構(gòu)去解決這個(gè)問(wèn)題的[5]。在這里,應(yīng)用了1x1卷積去壓縮輸入的通道數(shù)量以減少參數(shù)量。具體來(lái)說(shuō),就是在采用更加內(nèi)存不經(jīng)濟(jì)的3x3卷積之前,通過(guò)減少輸入特征圖的通道數(shù)量來(lái)減少參數(shù)量。說(shuō)的更精確些就是,這個(gè)結(jié)構(gòu)包含了一系列連續(xù)的“Fire-Module”,這些模組包含了兩層卷積層,第一層是1x1卷積,通過(guò)將原來(lái)輸入特征圖的通道數(shù)從 N 轉(zhuǎn)化到 M (M < N),第二層是1x1卷積和3x3卷積的組合。通過(guò)這種手段,只需要4.8MB的參數(shù)量就可以達(dá)到AlexNet的精度水平。
在這里插入圖片描述Fig 1. SqueezeNet中的一個(gè)"Fire Module"。
Google的MobileNets在修改卷積操作的路上走得更遠(yuǎn)些[6]。MobileNets的主要特點(diǎn)就是所謂的深度可分離卷積(depthwise separable convolutions)。在標(biāo)準(zhǔn)卷積里,如果我們將卷積核看成是一個(gè)三維的物件(如Fig 2所示),那么將輸入的 M M M個(gè)特征圖轉(zhuǎn)換成輸出的 N N N個(gè)特征圖,需要參數(shù)量為。在深度可分離卷積中,這個(gè)標(biāo)準(zhǔn)的卷積將被取代成下列兩步驟:
一個(gè)卷積,大小為(也就是只考慮輸入通道),應(yīng)用在輸入特征圖上(深度方向卷積,Depthwise Convolution),得到輸出特征圖
?(譯者注:注意此處只有一個(gè)卷積核,而不同與標(biāo)準(zhǔn)卷積中的需要N個(gè)) 然后,在經(jīng)過(guò)了BatchNorm層和ReLU激活層后,N個(gè)1x1的卷積被分別應(yīng)用在第一步得到的輸出特征圖
上,從而得到N 個(gè)輸出特征圖。
通過(guò)這個(gè)手段我們發(fā)現(xiàn)我們的參數(shù)量縮減為而不是標(biāo)準(zhǔn)卷積的
,參數(shù)量幾乎減少了 N倍,大量的內(nèi)存和計(jì)算資源得到了節(jié)省。通過(guò)這個(gè)技術(shù),MobileNets在ImageNet上達(dá)到了70.6%的Top-1準(zhǔn)確率(對(duì)比AlexNet的約57%),而且其內(nèi)存需求只要16MB(對(duì)比AlexNet的240MB)。整個(gè)過(guò)程如Fig 3所示。
在這里插入圖片描述Fig 2. 將卷積核看成三維的結(jié)構(gòu)。(考慮到通道之間的變換)
在這里插入圖片描述Fig 3. 深度可分離卷積和標(biāo)準(zhǔn)卷積的區(qū)別示意圖。
在MobileNets中的逐個(gè)深度的卷積(Depthwise Convolutions)的這個(gè)想法可以被更進(jìn)一步演化成逐個(gè)組的卷積(Group-wise Convolutions),而這個(gè)就是SEP-Nets所做的[7]或者ShuffleNets[8]所做的。在MobileNets的逐深度卷積中,一個(gè)單獨(dú)的的卷積核被應(yīng)用于輸入特征圖。而逐組卷積考慮把這個(gè)輸入特征圖分為k個(gè)組,然后不同組之間共享不同的卷積核。通過(guò)這個(gè)手段可以達(dá)到常規(guī)卷積操作參數(shù)量的
?。(即是當(dāng)k=1時(shí),逐組卷積=逐深度卷積,當(dāng)k=M時(shí),逐組卷積=常規(guī)卷積。)整個(gè)過(guò)程如Fig 4所示。這個(gè)對(duì)組的分割可以通過(guò)設(shè)置參數(shù),在PyTorch中簡(jiǎn)單實(shí)現(xiàn)。
在這里插入圖片描述Fig 4. 逐組卷積示意圖。
從浮點(diǎn)數(shù)到更低位寬——通過(guò)量化實(shí)現(xiàn)壓縮
另一個(gè)直接的方法去實(shí)現(xiàn)壓縮參數(shù)儲(chǔ)存需求的方法就是通過(guò)減少參數(shù)的位寬,被稱(chēng)之為量化(quantization)。我們可以把大型卷積網(wǎng)絡(luò)的參數(shù)數(shù)據(jù)類(lèi)型從32bit的浮點(diǎn)數(shù)下降到8bit的浮點(diǎn)數(shù),而這個(gè)后處理步驟對(duì)性能影響不大。這個(gè)結(jié)論同樣在那些被設(shè)計(jì)成節(jié)省內(nèi)存的網(wǎng)絡(luò),如MobileNets和SqueezeNet中成立。事實(shí)上,這個(gè)叫做量化的功能已經(jīng)在TensorFlow中得到了支持[9]。然而,如果把32bit下降到8bit位寬,那么不可避免的是,在這么低的位寬下訓(xùn)練還再需要訓(xùn)練這個(gè)網(wǎng)絡(luò)。因?yàn)樗械膬?yōu)化算法,比如SGD或者Adam,都是依賴于高精度的參數(shù)數(shù)據(jù)和梯度數(shù)據(jù)的,如何訓(xùn)練這種經(jīng)過(guò)量化的網(wǎng)絡(luò)成為了一個(gè)緊急需要研究的方向。
另一個(gè)和這個(gè)量化的想法強(qiáng)相關(guān)的是不僅僅是把參數(shù),而且把其激活值(既是輸入在卷積操作過(guò)后的輸出值)也進(jìn)行量化。對(duì)于參數(shù)進(jìn)行量化對(duì)于減少模型的內(nèi)存需求有著很好的表現(xiàn),如果附加地對(duì)激活值也進(jìn)行量化,那么就可以對(duì)一些專(zhuān)用的硬件(如FPGAs)進(jìn)行加速,這種硬件對(duì)于1或者2bits的參數(shù)或者激活值,其矩陣計(jì)算可以被邏輯運(yùn)算完全代替,從而提高運(yùn)算速度。部分因?yàn)檫@個(gè)原因,深度學(xué)習(xí)的硬件加速是一個(gè)獨(dú)立的研究領(lǐng)域,并且可以獨(dú)立寫(xiě)成另一個(gè)博客,因此這里只考慮軟件角度上的量化。最為常見(jiàn)的想法就是首先在GPU上訓(xùn)練一個(gè)量化模型,然后在邊緣設(shè)備上部署推理。
最為極端一種情況就是二值量化,也就是在推理階段把參數(shù)限制在-1和+1兩個(gè)值,這個(gè)工作可以在Courbariaux et al. [10,11,12]中找到。在他們?cè)嫉腂inaryConnect文章中,他們提出在訓(xùn)練過(guò)程中用完整精度的參數(shù)進(jìn)行參數(shù)更新,但是在反向傳播時(shí)是根據(jù)二值參數(shù)進(jìn)行傳遞的。換句話說(shuō),這個(gè)loss是根據(jù)二值參數(shù)進(jìn)行計(jì)算的,但是參數(shù)更新卻用全精度的參數(shù)進(jìn)行。這個(gè)二值操作在所有參數(shù)更新中都實(shí)施,其被簡(jiǎn)單的被sign二值函數(shù)計(jì)算出來(lái)。(其有個(gè)隨機(jī)版本,就是將一個(gè)參數(shù)根據(jù)概率 設(shè)置為+1,以對(duì)訓(xùn)練進(jìn)行正則化。)
在他們的BNN文章[11]中,這個(gè)二值激活的想法得到了擴(kuò)展。在這個(gè)工作中,不僅僅是參數(shù)更新,而且反向傳播也是用全精度的參數(shù),因?yàn)樘荻瓤赡軙?huì)因?yàn)槭褂昧穗x散值而變得幾乎所有地方都變成0(導(dǎo)致無(wú)法訓(xùn)練)。在他們稱(chēng)之為XNOR的文章中[13],Rastegari et al.將這個(gè)方法進(jìn)行擴(kuò)展,提出了二值卷積的尺度化因子,這個(gè)因子由每個(gè)卷積核的全精度參數(shù)的平均值所給定。
在他們的QNN文章[12]中,Courbariaux et al. 通過(guò)用signum函數(shù)將二值演化成線性量化,進(jìn)一步擴(kuò)展了嚴(yán)格的二值卷積到更高的位寬。
另一個(gè)方法由Ternary提出,其對(duì)模型參數(shù)可以取為0,+1和-1。Li et al. 提出了一個(gè)合適的尺度放縮因子和一個(gè)閾值(Threshold Delta)可以泛化這個(gè)BinaryConnect的方法到Ternary的那種情況,簡(jiǎn)單描述為:在全精度參數(shù)的情況下,如果
,w就設(shè)置為-1;如果
這個(gè)w設(shè)置為0,如果是
\delta" />則設(shè)置為1 [14]。
一個(gè)非線性量化的方法由Zhou et al.提出,其參數(shù)被2的指數(shù)或者0的指數(shù)所量化 [15]。這個(gè)想法允許有效的位移操作去替代浮點(diǎn)數(shù)的乘法操作,甚至對(duì)于更高的位寬而言。此外,這個(gè)作者還介紹了一種和上述文獻(xiàn)提到的不同的量化策略,與其同時(shí)量化所有的參數(shù),不如將量化遞增地進(jìn)行實(shí)施。在每個(gè)迭代中,只有一些參數(shù)被量化,而其他的仍然保持浮點(diǎn)數(shù)形式的參數(shù)被重訓(xùn)練以補(bǔ)償精度上的損失。量化部分的參數(shù)逐步遞增直到100%。在ImageNet上用不同的架構(gòu)進(jìn)行的實(shí)驗(yàn)證實(shí)了在5bits上的量化有著比全精度模型更高的性能。采用位寬為2,ResNet-18可以被量化,然后其精度損失為2.3%。
最佳大腦損傷——通過(guò)剪枝移除冗余部分
即便有著強(qiáng)大的正則化技術(shù)如dropout或者參數(shù)衰減的應(yīng)用,我們?nèi)匀豢梢灾溃瑢?duì)比其他參數(shù),神經(jīng)網(wǎng)絡(luò)中的一些參數(shù)總是可以對(duì)預(yù)測(cè)作出更大的貢獻(xiàn)。移除更小貢獻(xiàn)的參數(shù)以壓縮神經(jīng)網(wǎng)絡(luò)的過(guò)程因而被稱(chēng)之為剪枝(Pruning)。在一些權(quán)值被剪枝掉之后,神經(jīng)網(wǎng)絡(luò)通常不得不經(jīng)過(guò)微調(diào)以適應(yīng)這個(gè)變化。
這個(gè)想法首先有Yann Le Cunn et. al 在1990提出,其著名的文獻(xiàn)名為Optimal Brain Damage(OBD),這個(gè)想法被后續(xù)很多現(xiàn)代深度模型所沿用。[16]
在剪枝上的研究大部分考慮的是如何度量參數(shù)對(duì)性能的貢獻(xiàn)。在OBD中,這個(gè)貢獻(xiàn)用對(duì)訓(xùn)練誤差的造成的影響進(jìn)行度量,將特定的參數(shù)設(shè)置為0,然后觀察其訓(xùn)練誤差的變化。 顯然,這個(gè)方法是在深度網(wǎng)絡(luò)中不現(xiàn)實(shí)的,需要太大的計(jì)算量。在深度壓縮中,Han et. al簡(jiǎn)單把最低絕對(duì)值的參數(shù)裁剪,在其全連接層上比原始尺寸減少了10%的參數(shù)量,在卷積層上減少了大概60%的參數(shù)量,而其預(yù)測(cè)性能沒(méi)有減少[17]。
Tu et la.提出了一種方法,聯(lián)合其參數(shù),其可以精準(zhǔn)地度量Fisher信息,并且可以把它作為對(duì)貢獻(xiàn)的一種度量 [18]。最近,更為先進(jìn)的逐個(gè)層的方法被提出 [19,20]。
從大模型到小模型——通過(guò)知識(shí)蒸餾的方法進(jìn)行知識(shí)遷移
一個(gè)更為通用的方法去壓縮一個(gè)給定模型,是強(qiáng)制一個(gè)更小的模型去模擬它的表現(xiàn)。在深度學(xué)習(xí)的語(yǔ)境中,這個(gè)想法被描述為T(mén)eacher-Student Learning師生學(xué)習(xí) 或者 Knowledge Distillation知識(shí)蒸餾 [22]。我們首先可以訓(xùn)練一個(gè)最為先進(jìn)的模型如ResNet或者inception(這個(gè)作為老師),然后想要利用這個(gè)老師網(wǎng)絡(luò)的預(yù)測(cè)去訓(xùn)練一個(gè)更小的模型,也即是學(xué)生網(wǎng)絡(luò)。(譯者注:其實(shí)這個(gè)過(guò)程在嘗試去用更小模型去擬合大模型的聯(lián)合概率分布)為了達(dá)到這個(gè)目標(biāo),當(dāng)在訓(xùn)練學(xué)生網(wǎng)絡(luò)時(shí),我們對(duì)兩個(gè)網(wǎng)絡(luò)都采取了前向傳播,模型計(jì)算其老師輸出和學(xué)生輸出之間的的交叉熵。通過(guò)這個(gè)方法進(jìn)行訓(xùn)練,學(xué)生網(wǎng)絡(luò)不僅學(xué)習(xí)到了基于真實(shí)標(biāo)簽的信息,而且還額外學(xué)習(xí)到了老師網(wǎng)絡(luò)的信息,這個(gè)信息被稱(chēng)之為模型的“dark knowledge”,即是一個(gè)類(lèi)別在隱空間里面可以是靠近另一個(gè)類(lèi)別的(有一定相關(guān)性)。
舉例而言,我們的任務(wù)是對(duì)四個(gè)類(lèi)別:貓,狗,馬和斑馬進(jìn)行圖像分類(lèi)。一個(gè)強(qiáng)大的模型可以學(xué)習(xí)到貓比馬和斑馬更加相似于狗,這個(gè)可以通過(guò)其給出的softmax結(jié)果如 (0.7, 0.25, 0.035, 0.015) 得出。在實(shí)際操作中,老師網(wǎng)絡(luò)的softmax的輸出通過(guò)一個(gè)因子進(jìn)行分割,這個(gè)超參數(shù)被描述為溫度(Temperature),這個(gè)可以使得將它們更大程度上的拉離硬的目標(biāo)(也就是真實(shí)的標(biāo)簽)。因此,如果學(xué)生模型通過(guò)這個(gè)額外的信息進(jìn)行訓(xùn)練,而不僅僅是真實(shí)標(biāo)簽,其可以比從頭訓(xùn)練有著更好的表現(xiàn)性能。更抽象的說(shuō),我們可以說(shuō)我們通過(guò)將其知識(shí)從遷移到了更小的模型,使得其有著相同的輸出。
在這里插入圖片描述Fig 5. TS學(xué)習(xí)的示意圖。
這個(gè)想法第一次由Ba and Caruana提出[21], 隨后被Hinton [22]跟進(jìn)。 自此之后一些對(duì)這些算法的改進(jìn)被提出,其可以在一些特定的應(yīng)用中提高性能[23]。知識(shí)蒸餾在物體識(shí)別中同樣得到了成功應(yīng)用,一些例子說(shuō)明了其可以在大型數(shù)據(jù)集上使用,甚至對(duì)于更復(fù)雜的任務(wù)都可以勝任[24,25]。
Reference
[0]. https://medium.com/@nicolas_19145/state-of-the-art-in-compressing-deep-convolutional-neural-networks-cfd8c5404f22
[1]. Krizhevsky, A., Sutskever, I., & Hinton, G. E. (n.d.). ImageNet Classification with Deep Convolutional Neural Networks. Retrieved from https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
[2]. Simonyan, K., & Zisserman, A. (2015). VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION. Retrieved from https://arxiv.org/pdf/1409.1556.pdf
[3]. He, K., Zhang, X., Ren, S., & Sun, J. (n.d.). Deep Residual Learning for Image Recognition. Retrieved from https://arxiv.org/pdf/1512.03385.pdf
[4]. Szegedy, C., Ioffe, S., Vanhoucke, V., & Alemi, A. (n.d.). Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning. Retrieved from https://arxiv.org/pdf/1602.07261.pdf
[5]. Iandola, F. N., Han, S., Moskewicz, M. W., Ashraf, K., Dally, W. J., & Keutzer, K. (n.d.). SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
[6]. Howard, A. G., Zhu, M., Chen, B., Kalenichenko, D., Wang, W., Weyand, T., … Adam, H. (n.d.). MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications. Retrieved from https://arxiv.org/pdf/1704.04861.pdf
[7]. Li, Z., Wang, X., Lv, X., & Yang, T. (n.d.). SEP-Nets: Small and Effective Pattern Networks. Retrieved from https://arxiv.org/pdf/1706.03912.pdf
[8]. Zhang, X., Zhou, X., Lin, M., & Sun, J. (n.d.). ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices. Retrieved from https://arxiv.org/pdf/1707.01083v1.pdf
[9]. https://www.tensorflow.org/performance/quantization
[10]. Courbariaux, M., & David, J. (n.d.). BinaryConnect : Training Deep Neural Networks with binary weights during propagations https://arxiv.org/pdf/1511.00363.pdf
[11]. Courbariaux, M., Hubara, I., Soudry, D., El-Yaniv, R., Il, R. T. A., Bengio, Y., & Com, Y. U. (n.d.). Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1. Retrieved from https://arxiv.org/pdf/1602.02830.pdf
[12]. Hubara, I., Courbariaux, M., Soudry, D., El-Yaniv, R., & Bengio, Y. (2016). Quantized Neural Networks Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations. Retrieved from https://arxiv.org/pdf/1609.07061.pdf
[13]. Rastegari, M., Ordonez, V., Redmon, J., & Farhadi, A. (n.d.). XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks. Retrieved from https://arxiv.org/pdf/1603.05279.pdf
[14]. Li, F., Zhang, B., & Liu, B. (n.d.). Ternary weight networks. Retrieved from https://arxiv.org/pdf/1605.04711.pdf
[15]. Zhou, A., Yao, A., Guo, Y., Xu, L., & Chen, Y. (n.d.). INCREMENTAL NETWORK QUANTIZATION: TOWARDS LOSSLESS CNNS WITH LOW-PRECISION WEIGHTS.
[16]. Cun, L., Denker, S., Le Cun, Y., Denker, J. S., & Sol1a, S. A. (n.d.). Optimal Brain Damage. Retrieved from https://papers.nips.cc/paper/250-optimal-brain-damage.pdf
[17]. Han, S., Mao, H., & Dally, W. J. (n.d.). DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING. Retrieved from https://arxiv.org/pdf/1510.00149.pdf
[18]. Tu, M., Berisha, V., Woolf, M., Seo, J.-S., & Cao, Y. (n.d.). RANKING THE PARAMETERS OF DEEP NEURAL NETWORKS USING THE FISHER INFORMATION. Retrieved from http://www.mirlab.org/conference_papers/International_Conference/ICASSP 2016/pdfs/0002647.pdf
[19]. Dong, X., Chen, S., & Pan, S. J. (n.d.). Learning to Prune Deep Neural Networks via Layer-wise Optimal Brain Surgeon. Retrieved from https://arxiv.org/pdf/1705.07565.pdf
[20]. Aghasi, A., Abdi, A., Nguyen, N., & Romberg, J. (n.d.). Net-Trim: Convex Pruning of Deep Neural Networks with Performance Guarantee. Retrieved from https://arxiv.org/pdf/1611.05162.pdf
[21]. Lei Jimmy Ba and Rich Caruana: Do Deep Nets Really Need to be Deep? https://arxiv.org/pdf/1312.6184.pdf
[22]. Hinton, G., Vinyals, O., & Dean, J. (2015). Distilling the Knowledge in a Neural Network. Retrieved from https://arxiv.org/pdf/1503.02531.pdf
[23]. Romero, A., Ballas, N., Kahou, S. E., Chassang, A., Gatta, C., & Bengio, Y. (2015). FITNETS: HINTS FOR THIN DEEP NETS. Retrieved from https://arxiv.org/pdf/1412.6550.pdf
[24]. Chen, G., Choi, W., Yu, X., Han, T., & Chandraker, M. (n.d.). Learning Efficient Object Detection Models with Knowledge Distillation. Retrieved from https://papers.nips.cc/paper/6676-learning-efficient-object-detection-models-with-knowledge-distillation.pdf
[25]. Wang, C., Lan, X., & Zhang, Y. (n.d.). Model Distillation with Knowledge Transfer from Face Classification to Alignment and Verification. Retrieved from https://arxiv.org/pdf/1709.02929.pdf