【机器学习】模型压缩大杀器!详解高效模型设计的自动机器学习流水线
作者丨科技猛獸
編輯丨極市平臺(tái)
導(dǎo)讀
?本文首先對(duì)模型壓縮進(jìn)行了綜述,論述目前深度學(xué)習(xí)存在的挑戰(zhàn),同時(shí)對(duì)三種高效自動(dòng)機(jī)器流水線方法ProxyLessNAS、AMC和AMC進(jìn)行了詳細(xì)的介紹。最后探討了如何進(jìn)行網(wǎng)絡(luò)體系結(jié)構(gòu)、剪枝和量化策略的聯(lián)合搜索。
目錄
為什么要進(jìn)行Model Compression?
論述當(dāng)前深度學(xué)習(xí)存在的挑戰(zhàn)。
自動(dòng)機(jī)器學(xué)習(xí)流水線 (AutoML Pipeline):讓模型更加高效
簡(jiǎn)述自動(dòng)機(jī)器學(xué)習(xí)的流水線。
第1步:ProxyLessNAS:搜索最適宜的模型架構(gòu)。
第2步:AMC:壓縮模型,減少參數(shù)量。
第3步:HAQ:進(jìn)一步量化模型,減小內(nèi)存占用。
自動(dòng)機(jī)器學(xué)習(xí)流水線的演進(jìn)
論述如何進(jìn)行網(wǎng)絡(luò)體系結(jié)構(gòu)、剪枝和量化策略的聯(lián)合搜索。
1 為什么要進(jìn)行Model Compression?
摩爾定律告訴我們:芯片的性能每隔18個(gè)月將會(huì)提高一倍。
盡管摩爾定律的現(xiàn)象已經(jīng)被觀察到了數(shù)十年,但是,它仍應(yīng)該被視為一種對(duì)現(xiàn)象的觀測(cè)或?qū)ξ磥?lái)的推測(cè),而不是一個(gè)物理定律。
換句話說(shuō),未來(lái)的增長(zhǎng)率在邏輯上無(wú)法保證會(huì)跟過(guò)去的數(shù)據(jù)一樣,也就是邏輯上無(wú)法保證摩爾定律會(huì)持續(xù)下去。而且,摩爾定律已經(jīng)在2013年年底放緩。
比如說(shuō)英特爾在22納米跟14納米的CPU制程上已經(jīng)放慢了技術(shù)更新的腳步,之后的時(shí)間里,晶體管數(shù)量密度預(yù)計(jì)只會(huì)每3年增加一倍。
而另一方面,在現(xiàn)代深度學(xué)習(xí)中,更復(fù)雜的問(wèn)題往往需要更復(fù)雜的計(jì)算量來(lái)處理;摩爾定律的放緩使得當(dāng)前的算力往往無(wú)法滿足復(fù)雜AI問(wèn)題的要求,尤其是在移動(dòng)端這種算理有限的設(shè)備上面。
圖1:摩爾定律正在放緩評(píng)價(jià)一個(gè)深度學(xué)習(xí)模型,除了Accuracy之外,我們還要考慮下面這5個(gè)方面:
延遲:Latency (ms)
能耗:Energy Consumption (J/度電)
計(jì)算量:Computational Cost (FLOPs/BitOPs)
模型參數(shù)量:Parameter (M)
運(yùn)行占用內(nèi)存:Memory (MB)
所以當(dāng)前深度學(xué)習(xí)面臨的一個(gè)挑戰(zhàn)是:模型非常大 (Large Model Size),也就需要大量的能源消耗 (Large Energy Consumption),密集的計(jì)算量 (Computation Intensive)和密集的內(nèi)存占用 (Memory Intensive)。以上問(wèn)題使得模型在部署的過(guò)程中會(huì)遇到很大的挑戰(zhàn)。
舉一個(gè)例子: AlphaGo打一局比賽約需要1920塊CPU和280塊GPU的算力,以及3000$的電費(fèi)(electric bill),對(duì)于端側(cè)設(shè)備 (Edge-side devices)來(lái)講,會(huì)很快耗盡電池的電量 (Drains Battery);對(duì)于數(shù)據(jù)中心來(lái)講會(huì)增加總持有成本TCO (Total Cost of Ownership)。
圖2:模型非常大,也就需要大量的能源消耗所以,模型壓縮對(duì)于深度學(xué)習(xí)的部署來(lái)講意義重大,尤其是硬件資源受限的端側(cè)設(shè)備。
模型壓縮的方法有很多,可以參考下面的鏈接:
深入淺出的模型壓縮:你一定從未見(jiàn)過(guò)如此通俗易懂的Slimming操作
科技猛獸:模型壓縮工作總結(jié)
https://zhuanlan.zhihu.com/p/262359207
借助AutoML技術(shù),可以使得深度學(xué)習(xí)模型變得更加高效,以部署在端側(cè)設(shè)備上面。所以本文介紹的重點(diǎn)是這一流水線具體是什么樣的,以及后續(xù)有哪些改進(jìn)的工作。
2 自動(dòng)機(jī)器學(xué)習(xí)流水線 (AutoML Pipeline):讓模型更加高效
2.1 自動(dòng)機(jī)器學(xué)習(xí)的流水線
自動(dòng)機(jī)器學(xué)習(xí)流水線是指基于自動(dòng)機(jī)器學(xué)習(xí)(AutoML)完成模型的優(yōu)化過(guò)程。
輸入: 模型要部署的目標(biāo)硬件設(shè)備。約束條件(Latency,Energy Consumption,Model Size,Memory,FLOPs等)。
輸出: 部署的模型。
中間過(guò)程:
AutoML搜索最適宜的模型架構(gòu),最大化精度。
對(duì)這個(gè)模型進(jìn)行壓縮,減少參數(shù)量。
對(duì)壓縮后的模型進(jìn)行量化,進(jìn)一步減少內(nèi)存占用。
2.2 第1步:ProxyLessNAS:搜索最適宜的模型架構(gòu)
MIT: ProxyLessNAS: Direct Neural Architecture Search on Target Task and Hardware
剛才講到,當(dāng)把模型部署在手機(jī),頭盔,智能手表,手環(huán)等移動(dòng)端設(shè)備的時(shí)候,我們不僅希望模型的準(zhǔn)確度高,還希望它具有低的延遲和低的耗電量。以往的做法是將相同的模型不加改進(jìn)而直接部署在多種設(shè)備上面,比如下圖:
圖3:相同的模型不加改進(jìn)而直接部署在多種設(shè)備上這種做法的優(yōu)點(diǎn)是簡(jiǎn)單快捷,不需要任何額外的設(shè)計(jì)成本;但是這種做法的缺點(diǎn)是沒(méi)有考慮到不同硬件設(shè)備之間的差異性:比如GPU的并行度 (Degree of Parallelism)比CPU要高,cache size更大,內(nèi)存帶寬 (Memory bandwidth,單位時(shí)間里存儲(chǔ)器所存取的信息量,也稱為存儲(chǔ)器在單位時(shí)間內(nèi)讀出/寫入的位數(shù)或字節(jié)數(shù))性能也有不同。因此使用同樣的模型得到的結(jié)果往往是次優(yōu)的。
ProxyLessNAS解決的就是這個(gè)問(wèn)題,即希望針對(duì)不同的硬件設(shè)備專業(yè)化神經(jīng)網(wǎng)絡(luò)模型,以在目標(biāo)硬件設(shè)備上面獲得更好的準(zhǔn)確率和較高的硬件效率。
圖4:針對(duì)不同的硬件設(shè)備專業(yè)化神經(jīng)網(wǎng)絡(luò)模型為每個(gè)硬件設(shè)計(jì)專門的深度學(xué)習(xí)模型代價(jià)是十分高昂的,往往需要請(qǐng)一個(gè)組的深度學(xué)習(xí)專家來(lái)進(jìn)行模型設(shè)計(jì)和調(diào)參,顯然是無(wú)法承受的。于是我們考慮使用AutoML的方法,自動(dòng)化地設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的模型,來(lái)替代人類專家進(jìn)行神經(jīng)網(wǎng)絡(luò)架構(gòu)的設(shè)計(jì),一定程度上能夠解決人力資源不足的問(wèn)題。
但是,神經(jīng)架構(gòu)搜索的成本是十分高昂的,谷歌提出的NASNet在小規(guī)模數(shù)據(jù)集CIFAR-10上面搜索一次所需要的時(shí)間,換算成單塊GPU大約需要5年。所以,考慮到這樣巨大的計(jì)算資源的要求,之前的神經(jīng)架構(gòu)搜索算法大多采用基于代理 (Proxy)的方法。
代理任務(wù) (Proxy Task)相比于目標(biāo)任務(wù) (Target Task),一般具有:
更小的數(shù)據(jù)集 (e.g. CIFAR→ImageNet)
訓(xùn)練更少的epochs
更小的搜索空間
使用更淺的模型。
總之,代理任務(wù)相當(dāng)于是目標(biāo)任務(wù)的縮小簡(jiǎn)化版。之后,把代理任務(wù)搜索得到的結(jié)果遷移到目標(biāo)任務(wù)上面,如下圖所示:
圖5:代理任務(wù)相當(dāng)于是目標(biāo)任務(wù)的縮小簡(jiǎn)化版這樣做的問(wèn)題有3點(diǎn):
在代理任務(wù)上搜索得到的最優(yōu)結(jié)果在目標(biāo)任務(wù)上是次優(yōu)的,尤其是當(dāng)考慮Latency時(shí)。
需要堆疊重復(fù)的單元,限制了塊的多樣性,從而降低了性能。
不能根據(jù)目標(biāo)任務(wù)的實(shí)際硬件要求進(jìn)行優(yōu)化。
ProxyLessNAS提出的動(dòng)機(jī)就是為了解決以上的3點(diǎn)限制,作者希望能直接在目標(biāo)任務(wù)和硬件 ( target task and hardware)上搜索出最優(yōu)模型的架構(gòu),而避免使用代理Proxy,這解決了上面的第1個(gè)問(wèn)題。同時(shí),ProxyLessNAS不去堆疊重復(fù)的單元,每個(gè)block都可以被搜索,這解決了上面的第2個(gè)問(wèn)題。最后,ProxyLessNAS還能考慮目標(biāo)硬件的Latency,這解決了上面的第3個(gè)問(wèn)題。ProxyLessNAS實(shí)現(xiàn)的結(jié)果如下圖:
圖6:ProxyLessNAS首先簡(jiǎn)述ProxyLessNAS的做法:
把NAS的過(guò)程視為路徑級(jí)剪枝的過(guò)程 (Path-level Pruning)。首先訓(xùn)練一個(gè)包含所有的操作的超網(wǎng)絡(luò) (over-parameterized network)。每個(gè)操作有自己的二值化架構(gòu)參數(shù)和權(quán)重參數(shù),并采樣梯度下降的方法訓(xùn)練二值化的架構(gòu)參數(shù),那些架構(gòu)參數(shù)比較低的操作到最后將會(huì)被剪掉。
在訓(xùn)練這個(gè)超網(wǎng)絡(luò)的時(shí)候,由于操作數(shù)量很多,會(huì)導(dǎo)致GPU顯存不足 (GPU memory explosion),這個(gè)問(wèn)題很常見(jiàn),因?yàn)镚PU顯存會(huì)隨著候選操作的數(shù)量呈線性增長(zhǎng)。解決的辦法是每次只激活一條路徑進(jìn)行訓(xùn)練,即:每個(gè)操作的架構(gòu)參數(shù)是二值化的。每次更新參數(shù)時(shí),只允許一個(gè)操作處于激活狀態(tài)。這樣一來(lái),GPU的顯存的需求的復(fù)雜度就會(huì)從?變?yōu)?。
在One-Shot NAS方法中:
在DARTS方法中:
二值化就是每次只激活一條路徑,表達(dá)式是:
圖7:同時(shí)學(xué)習(xí)權(quán)重參數(shù)和二值化的架構(gòu)參數(shù)圖7所表達(dá)的含義就是每次只激活一條路徑進(jìn)行更新參數(shù)。具體怎么更新呢?
首先取一個(gè)batch的數(shù)據(jù),根據(jù)?式采樣出一個(gè)?,這時(shí)候就相當(dāng)于只激活了一條路徑,其他未被激活的路徑的參數(shù)被freeze了。
使用training set 來(lái)update采樣的這條路徑的參數(shù),如上圖左所示。
再根據(jù)?式采樣出一個(gè)?,使用validation set 來(lái)update架構(gòu)參數(shù),如上圖右所示。
上述3步迭代執(zhí)行。
更新架構(gòu)參數(shù)時(shí),首先要明確這里的架構(gòu)參數(shù)是什么?答案是:?,這些?通過(guò)?的操作得到?,再通過(guò)采樣得到?,最后,?再參與計(jì)算圖。所以,在反向傳播時(shí),我們手里有的只是???晌覀円?jì)算的是?。
那么具體的方法是:
在反向傳播時(shí),以上所有的參數(shù)都已知了,于是可以求出?。
但這樣做也存在一個(gè)問(wèn)題,即你需要保存所有的?,使得GPU memory變成了?,即顯存使用量依然與?相關(guān)。
為了解決這個(gè)問(wèn)題,作者采取的做法是:
首先根據(jù)(3)式sample出2條路徑,屏蔽其他的路徑,這樣強(qiáng)制使得?。
采樣之后,?和?將會(huì)被重置。
根據(jù)(4)式更新這2條路徑的架構(gòu)參數(shù)?,更新完后,乘上一個(gè)系數(shù),保持二者之和不變,即始終保持未被采樣的路徑的架構(gòu)參數(shù)之和不變。
一個(gè)采樣路徑被增強(qiáng)(路徑權(quán)重增加),另一個(gè)采樣路徑被衰減(路徑權(quán)重降低),而所有其他路徑保持不變。以這種方式,不管?的值如何,在架構(gòu)參數(shù)的每個(gè)更新步驟中只涉及兩條路徑,從而將存儲(chǔ)器需求降低到訓(xùn)練緊湊模型的相同水平。
說(shuō)白了,就是我更新架構(gòu)參數(shù)的時(shí)候不更新所有的架構(gòu)參數(shù),只采樣2條路徑,更新這2條路徑的架構(gòu)參數(shù),同時(shí)保持未被采樣的路徑的架構(gòu)參數(shù)之和不變。
除此之外,為了解決第3個(gè)問(wèn)題,就必須把延遲Latency作為目標(biāo)函數(shù)要考慮的部分。但是,Latency這個(gè)指標(biāo)是不可微分的 (non-differentiable),因此,得想個(gè)辦法把Latency這東西變得可微分。
做法是:首先在目標(biāo)硬件上收集各種候選操作的延遲Latency,構(gòu)成一個(gè)數(shù)據(jù)集,去搭建一個(gè)延遲預(yù)測(cè)的模型。這樣一來(lái),基于這個(gè)模型就可以獲得網(wǎng)絡(luò)的延遲預(yù)測(cè)期望值。這個(gè)期望值就可以作為一個(gè)正則項(xiàng),整合到損失函數(shù)當(dāng)中,通過(guò)梯度進(jìn)行直接的優(yōu)化。
假設(shè)網(wǎng)絡(luò)一共有?個(gè)Block,對(duì)于第?個(gè)Block來(lái)講,我們求出它的Latency的期望值:
式中的?表示第?個(gè)候選操作。?表示這個(gè)predictor的預(yù)測(cè)值。
在反向傳播求微分時(shí),表達(dá)式就變?yōu)榱?#xff1a;
而式中的?是已知的。
最后,總的網(wǎng)絡(luò)的Latency可以寫成:
這一流程可以表示為圖8:
圖8:把Latency變得可微分損失函數(shù)為:
通過(guò)調(diào)節(jié)超參數(shù)?就能根據(jù)目標(biāo)任務(wù)的實(shí)際硬件調(diào)整模型的復(fù)雜度。
實(shí)驗(yàn)結(jié)果:
實(shí)驗(yàn)1: 首先在CIFAR上進(jìn)行驗(yàn)證,只使用?的參數(shù)就能達(dá)到之前的準(zhǔn)確率的效果。
圖9:在CIFAR上進(jìn)行驗(yàn)證實(shí)驗(yàn)2: 接著在ImageNet上進(jìn)行搜索,在實(shí)驗(yàn)中作者使用了3種硬件平臺(tái),分別是mobile phone, GPU 和 CPU。Latency的測(cè)試,分別使用:
V100 (GPU,batch size=8)
Intel(R) Xeon(R) CPU E5-2640 v4 (CPU,batch size=1)
Google Pixel 1 phone (mobile phone,batch size=1)
通過(guò)下圖10 (mobile phone測(cè)試) 可以清晰地看出ProxyLessNAS在延遲和精度方面的提升:
圖10:在ImageNet上進(jìn)行搜索通過(guò)下圖11 (GPU測(cè)試) 可以清晰地看出ProxyLessNAS在延遲和精度方面的提升:
圖11:在ImageNet上進(jìn)行搜索因?yàn)閷?duì)比的網(wǎng)絡(luò)都是為mobile phone設(shè)計(jì)的,所以在GPU上ProxyLessNAS的優(yōu)勢(shì)更加明顯。
實(shí)驗(yàn)3: 對(duì)比ProxyLessNAS在不同硬件設(shè)備上的結(jié)果:
一個(gè)有趣的發(fā)現(xiàn)是:GPU上搜到的模型只在GPU上高效;CPU上搜到的模型只在CPU上高效;mobile phone上搜到的模型只在mobile phone上高效,這就表明了我們一開(kāi)始的結(jié)論:為不同硬件設(shè)計(jì)專門化的神經(jīng)網(wǎng)絡(luò)的正確性和必要性。
圖12:為不同硬件設(shè)計(jì)專門化的神經(jīng)網(wǎng)絡(luò)圖13:適合不同硬件設(shè)備 (GPU,CPU,mobile phone)的專門化的網(wǎng)絡(luò)圖13展示了搜索出的適合不同硬件設(shè)備 (GPU,CPU,mobile phone)的專門化的網(wǎng)絡(luò)。不同硬件平臺(tái)在搜索過(guò)程中,模型會(huì)逐漸表現(xiàn)出不同的特性。
搜索空間的設(shè)計(jì)方面,為了使網(wǎng)絡(luò)可深可淺,候選操作中加入?即可。
比如最上方的代表GPU端最適宜的模型,它傾向于選擇更淺的模型和更大的塊 (shallow and wide model with early pooling)。
比如最中間的代表CPU端最適宜的模型,它傾向于選擇更深的模型和更小的塊 (deep and narrow model with late pooling)。
這是因?yàn)镚PU比CPU具有高得多的并行性,因此它可以利用大的MBConv操作。
至此,我們完成了AutoML Pipeline的第1步:搜索出適宜該硬件的最佳模型,接下來(lái)進(jìn)入壓縮過(guò)程。
2.3:第2步:AMC:壓縮模型,減少參數(shù)量
MIT: AMC: AutoML for Model Compression and Acceleration on Mobile Devices
在神經(jīng)網(wǎng)絡(luò)的壓縮過(guò)程中,每一層的壓縮比可以是由有經(jīng)驗(yàn)的工程師來(lái)決定。所以,人力資源成為了這項(xiàng)任務(wù)的瓶頸。手工壓縮方法需要相關(guān)領(lǐng)域的專家知識(shí),需要人工在推理速度,大小與準(zhǔn)確率之間權(quán)衡,因此人工給出的壓縮比往往是次優(yōu)的。因此,我們希望借助AutoML技術(shù),找到一種自動(dòng)給出神經(jīng)網(wǎng)絡(luò)每層壓縮比的方法,用AI來(lái)優(yōu)化AI,以減少人力資源的消耗。這就是AMC (AutoML for Model Compression and Acceleration on Mobile Devices)方法的初衷。
在之前的工作中有許多基于規(guī)則的模型壓縮方法,比如在神經(jīng)網(wǎng)絡(luò)的第一層剪枝量小;在FC層中剪枝量大;在對(duì)剪枝量比較敏感的層中剪枝量小等等。然而,這樣的剪枝方法是次優(yōu)的。所以我們希望AutoML自動(dòng)地給出每一層剪枝量的數(shù)值。
AMC通過(guò)使用強(qiáng)化學(xué)習(xí)的方法,設(shè)置一個(gè)DDPG的agent。壓縮模型的精度對(duì)于每一層的稀疏度非常敏感,要求一個(gè)細(xì)粒度的動(dòng)作空間。所以,把每一層的剪枝率建模為連續(xù)的數(shù)值 (continuous compression ratio) ,并在強(qiáng)化學(xué)習(xí)的獎(jiǎng)勵(lì)信息時(shí),綜合考慮模型的精確度和模型復(fù)雜度。在agent運(yùn)行時(shí),為agent輸入某一個(gè)Layer?的相關(guān)信息,它可以自動(dòng)輸出這個(gè)Layer的剪枝率?。之后,再為agent輸入下一個(gè)Layer?的相關(guān)信息,這樣不斷循環(huán)完整個(gè)網(wǎng)絡(luò)。
AMC針對(duì)不同的場(chǎng)景提出了2種compression policy:
對(duì)于延遲關(guān)鍵型 (Latency-critical) 的AI應(yīng)用 (手機(jī)應(yīng)用,自動(dòng)駕駛,廣告排名等),目標(biāo)是在給定硬件設(shè)備資源限制 (FLOPs, latency, and model size)的條件下獲得最高精度。此時(shí)作者限制了搜索空間,其動(dòng)作空間(修剪比例)被限制,從而使代理下的壓縮模型總是在資源預(yù)算下。
對(duì)于質(zhì)量關(guān)鍵型 (Quality-critical) 的AI應(yīng)用 (Google Photo等),目標(biāo)是在不損失精度的前提下得到最小的模型。此時(shí)作者定義了一個(gè)關(guān)于精度和硬件資源的獎(jiǎng)勵(lì)函數(shù),在不傷害模型精度的情況下能夠探索壓縮限制。
圖14:AMC針對(duì)不同的場(chǎng)景提出:不同的方案剪枝的方法分為2類:fine-grained pruning (細(xì)粒度剪枝)和structured pruning (粗粒度結(jié)構(gòu)化剪枝)。
Fine-grained pruning [5]就是剪掉權(quán)值矩陣 (weight tensor)中的不重要的某個(gè)元素,這種方法可以在不損失精度的前提下得到高精度。但是這種細(xì)粒度的方法會(huì)導(dǎo)致不規(guī)則的稀疏矩陣,且往往需要專門設(shè)計(jì)的硬件 [6]。一般用于減小模型大小。
Coarse-grained pruning 旨在剪去權(quán)重張量中的整個(gè)規(guī)則區(qū)域,比如說(shuō)整個(gè)channel,block等等。這里我們研究結(jié)構(gòu)化修剪方法,剪枝每個(gè)卷積層和全連接層的輸入通道。這種方法不需要專門設(shè)計(jì)的硬件。
比如,對(duì)于一個(gè)卷積層?,細(xì)粒度剪枝的稀疏度定義為:?,即0元素的個(gè)數(shù)除以總的元素個(gè)數(shù)。對(duì)于結(jié)構(gòu)化剪枝,壓縮channel數(shù)之后為?稀疏度定義為:?。一般用于模型加速。
圖15:粗粒度剪枝和細(xì)粒度剪枝如圖16所示為AMC的整體流程,主要有2部分組成,左側(cè)是一個(gè)DDPG的強(qiáng)化學(xué)習(xí)Agent,右側(cè)是一個(gè)神經(jīng)網(wǎng)絡(luò)壓縮的環(huán)境,以channel pruning為例。我們將神經(jīng)網(wǎng)絡(luò)的壓縮建模為一個(gè)自底向上,逐層進(jìn)行的過(guò)程。
圖16:AMC:自動(dòng)給出神經(jīng)網(wǎng)絡(luò)每層壓縮比的方法狀態(tài)空間:
其中:
該層的kernel的維度為:?。
該層的輸入為?。
是第幾個(gè)Layer。
是該層的計(jì)算量。
Reduced是先前層減少的計(jì)算量。
Rest是下面層的剩余的總數(shù)量。
狀態(tài)空間里的每一維都會(huì)歸一化到[0, 1]。
動(dòng)作空間:
作者提出使用連續(xù)的動(dòng)作空間?,支持更細(xì)粒度的和更精確的壓縮。
環(huán)境 Environment:
硬件設(shè)備就相當(dāng)于是強(qiáng)化學(xué)習(xí)的Environment,給RL Agent反饋,使之滿足資源約束。
搜索協(xié)議:
資源受限型壓縮: 通過(guò)限制動(dòng)作空間(每層的稀疏比),我們可以精確地到達(dá)目標(biāo)壓縮比。我們使用以下的獎(jiǎng)勵(lì):
這個(gè)獎(jiǎng)勵(lì)并沒(méi)有提供model size reduction的激勵(lì),因此我們可以通過(guò)限制動(dòng)作空間來(lái)達(dá)到目標(biāo)壓縮比。下面的算法描述了該過(guò)程:在最開(kāi)始幾層作者允許任意的壓縮比?。用最大的壓縮比壓縮完接下來(lái)所有的層后,如果網(wǎng)絡(luò)的壓縮比滿足給定的硬件限制,則使用?對(duì)這一層進(jìn)行壓縮。否則就增大?。
圖17:資源受限型壓縮算法精度保證型壓縮: 通過(guò)調(diào)整獎(jiǎng)勵(lì)函數(shù),我們可以精確地發(fā)現(xiàn)壓縮的極限而無(wú)精度損失。
這個(gè)獎(jiǎng)勵(lì)函數(shù)對(duì)誤差更敏感,與此同時(shí),它提供了一個(gè)對(duì)于減少運(yùn)算量或模型大小的激勵(lì)。agent可以自動(dòng)化地找到壓縮的極限。
AMC的具體算法是:
圖18:AMC的具體算法實(shí)驗(yàn)結(jié)果:
實(shí)驗(yàn)1:CIFAR-10:
作者在 CIFAR-10 上對(duì) AMC 進(jìn)行了全面分析,以驗(yàn)證 2 種搜索策略的有效性。 CIFAR 數(shù)據(jù)集包括 50k 訓(xùn)練和 10k 測(cè)試 10 個(gè)類別的 32×32 微小圖像。 作者將訓(xùn)練圖像分成 45k / 5k 訓(xùn)練/驗(yàn)證。 在驗(yàn)證圖像上獲得準(zhǔn)確性獎(jiǎng)勵(lì)。 作者的方法具有很高的計(jì)算效率:RL 可以在 1 小時(shí)內(nèi)在單個(gè) GeForce GTX TITAN Xp GPU 上完成搜索。
圖19:CIFAR-10實(shí)驗(yàn)結(jié)果AMC 得到的最佳裁剪方式如上圖19所示為在 CIFAR-10 上進(jìn)行的FLOPs-Constrained Compression的實(shí)驗(yàn)。對(duì)比了三個(gè)經(jīng)驗(yàn)策略:uniform 為均勻設(shè)置壓縮比,deep,shallow 分別表示大尺度裁剪深層或淺層參數(shù)。使用獎(jiǎng)勵(lì)?準(zhǔn)確地找到稀疏度,并裁剪 Plain-20 和 ResNet-56的 50%參數(shù),并將其與經(jīng)驗(yàn)剪枝方法進(jìn)行比較。 結(jié)果是AMC 得到的最佳裁剪方式不同于人工設(shè)定的裁剪它學(xué)習(xí)了瓶頸結(jié)構(gòu)。
如上圖20所示為在 CIFAR-10 上進(jìn)行的Accuracy-Guaranteed Compression的實(shí)驗(yàn)。使用獎(jiǎng)勵(lì)?。AMC在壓縮60%的參數(shù)量的前提下基本沒(méi)有精確度上的損失。
圖20:AMC大幅超過(guò)了手工設(shè)計(jì)的剪枝方式實(shí)驗(yàn)2:ImageNet:
為了得到滿意的性能,作者采用:剪枝-finetune迭代的方法,一共迭代4次。在這4次中整個(gè)模型的總密度設(shè)置為[50%,35%,25%和 20%]。。對(duì)于每個(gè)階段,在給定整體稀疏度條件下, AMC確定每個(gè)層的稀疏度。 然后根據(jù)某個(gè)策略對(duì)模型進(jìn)行剪枝和finetune 30個(gè)epoch。
根據(jù)這個(gè)思路,作者將 ImageNet 上 ResNet-50 壓縮率增加到5倍(人工調(diào)參得到的模型壓縮率為 3.4,如下圖所示)而不會(huì)損失模型精度(原始 ResNet50 的[top-1,top-5] 準(zhǔn)確度= [76.13%,92.86%]; AMC 壓縮后模型的準(zhǔn)確度= [76.11%,92.89%])。下圖21為每個(gè)塊的密度信息,我們可以發(fā)現(xiàn) AMC 的密度分布與手工設(shè)定模型壓縮的結(jié)果完全不同,這表明 AMC 可以充分探索設(shè)計(jì)空間并分配稀疏度。
圖21:ImageNet 上 ResNet-50 壓縮率增加到5倍每個(gè)階段每層的密度如下圖22所示。峰顯示出不同層的剪枝率的大小,3×3 卷積層的剪枝率較大,因?yàn)槠渚哂休^高的冗余度。而對(duì)于 1×1 卷積,結(jié)構(gòu)更緊,稀疏度較低。
圖22:每個(gè)階段每層的密度下圖為AMC與其他SOTA剪枝方法 (FP,RNP,SPP,CP)的對(duì)比:AMC超過(guò)了基于規(guī)則的剪枝方法。
圖23:AMC超過(guò)了基于規(guī)則的剪枝方法至此,我們完成了AutoML Pipeline的第2步:對(duì)搜索得到的模型進(jìn)行壓縮,下面是量化過(guò)程。
2.4:HAQ:進(jìn)一步量化模型,減小內(nèi)存占用
MIT: HAQ: Hardware-Aware Automated Quantization with Mixed Precision
在傳統(tǒng)的方法中,我們采樣單一精度的量化,即使用相同的比特?cái)?shù)(比如8 bit)對(duì)所有層的參數(shù)進(jìn)行量化。如下圖所示:
圖24:使用相同的比特?cái)?shù)(比如8 bit)對(duì)所有層的參數(shù)進(jìn)行量化但這會(huì)帶來(lái)一個(gè)問(wèn)題:即是否使用相同的比特?cái)?shù)對(duì)于每一層來(lái)講都是最優(yōu)的呢?
這個(gè)問(wèn)題的解決方案與AMC十分相似,就是進(jìn)行Layer-wise的量化過(guò)程,即依然使用DDPG的方法來(lái)決定每一層的量化精度。
問(wèn): 如何確定不同硬件加速器上每一層的權(quán)重和輸出值的位寬?
如下圖所示,對(duì)于第1層,我們用4 bit表示weight,用5 bit表示activation;對(duì)于第2層,我們用6 bit表示weight,用7 bit表示activation;對(duì)于第3層,我們用5 bit表示weight,用4 bit表示activation。如果能夠合理地安排每一層的bit數(shù),就可以取得很好的準(zhǔn)確率。
圖25:不同的層使用不同的精度而且,最近已經(jīng)有許多硬件設(shè)備開(kāi)始支持混合精度的計(jì)算,比如說(shuō):
NVIDIA最近推出了支持1位、4位、8位和16位算術(shù)運(yùn)算的圖靈GPU架構(gòu):Tensor Core。
Apple的A12 Bionic。
所以有了硬件的支持,下一個(gè)問(wèn)題是如何提供軟件的支持。
圖26:許多硬件設(shè)備開(kāi)始支持混合精度的計(jì)算我們回到上面的問(wèn)題:如何確定不同硬件加速器上每一層的權(quán)重和輸出值的位寬?
注意這個(gè)問(wèn)題有3個(gè)關(guān)鍵詞:
方法要針對(duì)不同的硬件設(shè)備:hardware-specialized。
方法要是Layer-wise的。
方法要能決定weight和activation的位寬。
首先混合精度要解決的第一個(gè)問(wèn)題是會(huì)帶來(lái)一個(gè)較大的設(shè)計(jì)空間:我們來(lái)計(jì)算下這個(gè)空間的具體大小:
比如說(shuō):每一層的weight參數(shù)有1 bit-8 bit這8種情況。同理,每一層的activation參數(shù)也有1 bit-8 bit這8種情況。那么每一層的參數(shù)有64種情況。假設(shè)神經(jīng)網(wǎng)絡(luò)有?層,那么一共就有?種情況。
狀態(tài)空間:
再對(duì)比一下AMC的狀態(tài)空間:
前8項(xiàng)和最后一項(xiàng)是相同的,只是換了說(shuō)法,它們分別代表:
第?層的索引。
輸入channel數(shù)。
輸出channel數(shù)。
卷積核尺寸?。
卷積核stride?。
feature map的大小?。
該層的參數(shù):?。
上一層的動(dòng)作:?。
除此以外,?代表的是這一層是否是Depthwise Convolution。?代表量化的是weight還是activation。與AMC一樣,狀態(tài)空間里的每一維都會(huì)歸一化到[0, 1]。
如果這一層是FC層,那么:
動(dòng)作空間:
與AMC一樣,動(dòng)作空間也采用連續(xù)值的設(shè)計(jì),因?yàn)殡x散值會(huì)失去順序信息。從輸出的動(dòng)作值?到離散的量化精度?的轉(zhuǎn)化公式為:
式中,?。
量化操作:
假設(shè)第?層的某個(gè)權(quán)值?,量化精度是?bits,我們首先將它truncate到?的范圍內(nèi)。scale factor?。
那么量化結(jié)果可以表示為:
比如下圖所示:?,圖中沒(méi)有畫出符號(hào)位,所以數(shù)值位只剩下了3位。scale factor代表每一個(gè)離散值 (比如101)包含的連續(xù)值的寬度。注意為了保證量化結(jié)果的正確性,000和111代表的連續(xù)值的范圍區(qū)間與其他值不同。
圖27:量化過(guò)程而?的選擇主要是根據(jù)下式,即使得量化后的權(quán)值與未量化的權(quán)重的分布盡量接近。
為了限制模型的資源消耗,作者模仿AMC中的做法,即:RL agent給出每一層的量化精度?,如果超過(guò)了限制,就從頭sequentially減小量化位寬,直到滿足資源限制為止。
獎(jiǎng)勵(lì)函數(shù):
式中,?是量化以后finetune的模型的精度,?是full-precision模型的精度。
實(shí)驗(yàn)結(jié)果:
整體的實(shí)驗(yàn)是基于MobileNet-v1和MobileNet-v2。
實(shí)驗(yàn)1:Latency-Constrained Quantization
下圖為HAQ在MobileNet-v1上的結(jié)果:
圖28:MobileNet-v1上的結(jié)果下圖為HAQ在MobileNet-v2上的結(jié)果:
圖29:MobileNet-v2上的結(jié)果
我們可以發(fā)現(xiàn)在端側(cè)設(shè)備 (Edge:Xilinx Zynq-7020 FPGA) 上和在云(Cloud:Xilinx VU9P) 上搜索得到的結(jié)構(gòu)是非常不同的。在端側(cè)設(shè)備上HAQ會(huì)給depthwise卷積層賦予更低的量化精度,給pointwise卷積層賦予更高的量化精度。而云上前若干層的現(xiàn)象很相似,但是最后幾層恰恰相反,HAQ會(huì)給depthwise卷積層賦予更高的量化精度,給pointwise卷積層賦予更低的量化精度。這也鼓勵(lì)我們要根據(jù)不同的硬件給出specialized的解決方案,因?yàn)樗鼈兊奶匦允遣灰粯拥?#xff0c;具體體現(xiàn)在batch size,memory bandwidth,peak FLOPs等許多方面。
量化的結(jié)果如下圖所示:
圖30:ImageNet的量化結(jié)果與baseline PACT相比,HAQ獲得了精度和Latency的提升。
實(shí)驗(yàn)2:Energy-Constrained Quantization
圖30:Energy-Constrained Quantization可以清楚地看到,HAQ優(yōu)于基于規(guī)則的量化baseline:它在消耗相似的Energy的同時(shí)獲得了
更好的性能。HAQ的能量消耗接近原始的MobileNet-V1模型的一半而幾乎沒(méi)有精度損失,證明混合精度在專門化的硬件設(shè)備上的有效性。
實(shí)驗(yàn)3:Model Size-Constrained Quantization
這次, 作者用k-means算法將值量化為k個(gè)不同的質(zhì)心,而不是使用線性量化進(jìn)行壓縮,因?yàn)閗-means量化可以更有效地減小模型大小。
與韓松老師的Deep Compression的結(jié)果對(duì)比如下:
圖31:Model Size-Constrained Quantization可以發(fā)現(xiàn)比HAQ比Deep Compression性能好得多:它在相同的模型大小下實(shí)現(xiàn)了更高的精度。對(duì)于像MobileNets這樣的緊湊模型,Deep Compression會(huì)顯著降低性能,尤其是在大幅度量化的情況下,而HAQ可以更好地保持精度。
例如,當(dāng)Deep Compression將MobileNet-v1的權(quán)重量化為2 bit時(shí),精確度從70.90顯著下降到37.62;而HAQ在相同的模型大小下仍然可以達(dá)到57.14的精確度。這是因?yàn)镠AQ通過(guò)系統(tǒng)地搜索最優(yōu)量化策略來(lái)充分利用混合精度。
圖32:Model Size-Constrained Quantization的量化可視化結(jié)果如圖32為Model Size-Constrained Quantization的量化可視化結(jié)果。HAQ給depthwise convolution 分配了更多的量化位數(shù),給pointwise convolution 分配了更少的量化位數(shù)。
直觀來(lái)說(shuō),這是因?yàn)榍罢叩膮?shù)個(gè)數(shù)比后者少很多。比較圖29和圖32,在不同的優(yōu)化目標(biāo)下,策略有很大的不同(在延遲優(yōu)化下,depthwise convolution的位數(shù)較少,在模型大小優(yōu)化下,depthwise convolution的位數(shù)較多)。
表明HAQ可以做到針對(duì)不用的硬件設(shè)備 (云,端側(cè)),不同的約束條件 (Latency,Energy,Model size),不同的模型給出最適宜的量化策略。
至此,我們完成了AutoML Pipeline的最后一步量化的工作??偨Y(jié)一下:
流水線的輸入是
模型要部署的目標(biāo)硬件設(shè)備。
約束條件(Latency,Energy Consumption,Model Size,Memory,FLOPs等)。
1 我們先利用AutoML設(shè)計(jì)為給定的硬件,在給定的條件下設(shè)計(jì)最適宜的架構(gòu)。
2 再使用AMC為給定的硬件,在給定的條件下搜索最適宜剪枝的策略,以保持高精度。
3 最后使用HAQ為給定的硬件,在給定的條件下搜索最適宜量化的策略,以保持高精度。
至此,一個(gè)AutoML Pipeline完成,輸出最終的模型,縱觀整個(gè)過(guò)程,每一步都使用了AutoML技術(shù)。
自動(dòng)機(jī)器學(xué)習(xí)流水線的演進(jìn)
MIT: APQ: Joint Search for Network Architecture, Pruning and Quantization Policy
在上面介紹的自動(dòng)機(jī)器學(xué)習(xí)流水線中,給定目標(biāo)硬件設(shè)備? 和目標(biāo)資源約束? ,我們依次對(duì)模型進(jìn)行了架構(gòu)搜索,結(jié)構(gòu)化剪枝,混合精度量化的過(guò)程。這一系列過(guò)程進(jìn)行完后,我們得到了適用于?的最優(yōu)模型,且它的資源消耗滿足?的限制。
自動(dòng)機(jī)器學(xué)習(xí)流水線的中間過(guò)程:
AutoML搜索最適宜的模型架構(gòu),最大化精度。
對(duì)這個(gè)模型進(jìn)行壓縮,減少參數(shù)量。
對(duì)壓縮后的模型進(jìn)行量化,進(jìn)一步減少內(nèi)存占用。
不足是:
這一過(guò)程分3步進(jìn)行略微繁瑣。
需要調(diào)節(jié)大量的hyper-parameters,超過(guò)了可接受的人力范圍。
那么,接下來(lái)的想法是:這3步可否合并為一步進(jìn)行呢?即:聯(lián)合搜索網(wǎng)絡(luò)架構(gòu),剪枝和量化策略?
我們希望的中間過(guò)程:
但是,直接使用NAS聯(lián)合搜索這3個(gè)維度會(huì)帶來(lái)以下的問(wèn)題:
搜索空間變得很大,使搜索過(guò)程很難進(jìn)行。因?yàn)榧糁土炕^(guò)程需要finetune的過(guò)程,極大增加了搜索的成本,如下圖所示。
每一步都有不同的目標(biāo)函數(shù),使得流水線最終的策略是次優(yōu)的。浮點(diǎn)模型的最佳神經(jīng)架構(gòu)對(duì)于量化模型可能不是最佳的。
所以,我們可以采用APQ的策略,把架構(gòu)搜索,剪枝,量化這3步可否合并為一步進(jìn)行。
問(wèn):面對(duì)這樣巨大的聯(lián)合搜索空間,如何加快搜索過(guò)程?
答:核心思想是訓(xùn)練一個(gè)quantization-aware accuracy predictor加速搜索過(guò)程。
圖34:quantization-aware accuracy predictor加速搜索過(guò)程但是,訓(xùn)練一個(gè)quantization-aware accuracy predictor并不容易,因?yàn)槲覀冃枰罅康?(模型,精度) 數(shù)據(jù)集,而每得到這樣的一個(gè)樣本,就需要做以下2件事情:
訓(xùn)練這個(gè)模型,得到初始的fp32 weights。
量化并fine-tune得到int8 weights,并驗(yàn)證Accuracy。
做完這2步 (hundreds of GPU hours),才算得到一組數(shù)據(jù)。而我們要構(gòu)建這樣一個(gè)數(shù)據(jù)集,無(wú)疑會(huì)花費(fèi)巨大的成本。
訓(xùn)練Quantization-Aware的Accuracy Predictor:
所以,為了減少第1步的計(jì)算量,這里借鑒One-Shot NAS的方法:訓(xùn)練一個(gè)supernet,其中包含許多個(gè)subnet,這些subnet直接繼承supernet的權(quán)重,不做任何fine-tune,在驗(yàn)證集上評(píng)估精確度,即可得到一組數(shù)據(jù) (fp32 model, fp32 accuracy)。這樣一來(lái),將計(jì)算成本降低至?。利用這些大量的低成本 的數(shù)據(jù)集 (fp32 model, fp32 accuracy), 我們可以訓(xùn)練出一個(gè)Accuracy Predictor (fp32),它的輸入是模型架構(gòu),輸出是預(yù)測(cè)精度。
為了減少第2步的計(jì)算量,需要獲得(quantized model, quantized accuracy)的數(shù)據(jù)。這里不能借鑒One-Shot NAS的方法,因?yàn)榱炕哪P?#xff0c;如果不做fine-tune,精度會(huì)很差。所以我們使用上一步得到的Accuracy Predictor (fp32),使用少量的高成本 的數(shù)據(jù)集 (int8 model, int8 accuracy) 對(duì)它進(jìn)行fine-tune,類似于遷移到量化數(shù)據(jù)上。
fine-tune結(jié)束后,即得到Quantization-Aware的Accuracy Predictor (int8),它的輸入是模型,量化精度,輸出是預(yù)測(cè)的精確度。整個(gè)過(guò)程如下圖35所示:
圖35:訓(xùn)練Quantization-Aware的Accuracy Predictor使用上述的方法,就可以不用去費(fèi)力地獲得數(shù)據(jù)點(diǎn):(NN architecture, quantization
policy, quantized accuracy),而省去了復(fù)雜的訓(xùn)練過(guò)程。
我們得到了Quantization-Aware Accuracy Predictor以后,就可以利用它,輸入模型的架構(gòu),即可得到模型的accuracy,這一過(guò)程可以表示為:
下一步要做的就是把這三個(gè)自變量進(jìn)行編碼,對(duì)搜索空間進(jìn)行建模:
搜索空間: once-for-all network
Backbone設(shè)置為MobileNetV2,kernel size={3, 5, 7},channel number={4B, 6B, 8B}
depth={2 stages, 3 stages, 4 stages},once-for-all network的性質(zhì)有:
對(duì)于每個(gè)提取的子網(wǎng)絡(luò),可以直接評(píng)估性能,而無(wú)需重新訓(xùn)練,因此訓(xùn)練成本只需支付一次。
支持operator,channel的搜索。
由于once-for-all network的網(wǎng)絡(luò)訓(xùn)練的性質(zhì),很難同時(shí)實(shí)現(xiàn)這兩個(gè)目標(biāo):因?yàn)槿绻阉骺臻g變得太大,精度近似將是不準(zhǔn)確的。
為了解決這個(gè)問(wèn)題,我們采用Progressive Shrinking (PS) 算法來(lái)訓(xùn)練一次性網(wǎng)絡(luò)。具體來(lái)說(shuō),我們首先在once-for-all network的網(wǎng)絡(luò)中訓(xùn)練一個(gè)具有最大kernel大小、channel數(shù)量和depth的完整子網(wǎng)絡(luò),并將其用作teacher,從once-for-all network的網(wǎng)絡(luò)中逐步發(fā)展更小的子網(wǎng)絡(luò)樣本。在蒸餾過(guò)程中,經(jīng)過(guò)訓(xùn)練的子網(wǎng)絡(luò)仍然會(huì)更新權(quán)重,以防止精度損失。Progressive Shrinking (PS)算法有效降低了一次性網(wǎng)絡(luò)訓(xùn)練過(guò)程中的方差。通過(guò)這樣做,我們可以確保從一勞永逸的網(wǎng)絡(luò)中提取的子網(wǎng)絡(luò)保持競(jìng)爭(zhēng)精度,而無(wú)需重新訓(xùn)練。
有了搜索空間的定義,具體的編碼方式是:
將depthwise convolution和pointwise convolution的kernel size,channel number,quantization bits進(jìn)行編碼成one-hot vector,再concate在一起。作為這個(gè)block的encoding。
例如: 一個(gè)block有3個(gè)選擇的kernel size大小 (3,5,7)和4個(gè)選擇的channel number (16,24,32,40),如果我們選擇kernel size = 3,channel number = 32,那么我們得到兩個(gè)向量[1,0,0]和[0,0,1,0],我們將它們concate在一起,并使用[1,0,0,0,1,0]來(lái)表示這個(gè)塊的體系結(jié)構(gòu)。 假設(shè)pointwise/depthwise層的weights/activations 的位寬選擇是4或8,我們使用[1,0,0,1,0,1,1,0]來(lái)表示量化策略的選擇(4,8,8,4)。 那么對(duì)于一個(gè)5層網(wǎng)絡(luò),我們可以用一個(gè)75-dim (5×(3+4+2×4)=75)的向量來(lái)表示這樣的編碼。
在我們的設(shè)置中,kernel size的選擇是[3,5,7],channel number的選擇取決于每個(gè)塊的基本通道號(hào),位寬的選擇是[4,6,8],總共有21個(gè)塊要設(shè)計(jì)。
Quantization-Aware Accuracy Predictor的結(jié)構(gòu)如下圖所示:隱藏層為400個(gè)神經(jīng)元。
左側(cè)為Full-precision accuracy predictor,右側(cè)為Quantization-Aware Accuracy Predictor。輸入層添加了量化的編碼,利用左側(cè)網(wǎng)絡(luò)的預(yù)訓(xùn)練權(quán)重,加上(int8 model, int8 accuracy)的數(shù)據(jù)集,進(jìn)行fine-tune后得到。值得注意的是不需要很多(int8 model, int8 accuracy)的數(shù)據(jù)集,這極大地縮小了訓(xùn)練的成本。
圖36:Quantization-Aware Accuracy Predictor這樣,得到了Quantization-Aware Accuracy Predictor以后,也建模了編碼方式,我們就能根據(jù)遺傳算法在三個(gè)維度上聯(lián)合搜索最適宜的架構(gòu)。為了衡量Latency和Energy的信息,作者仿照ProxyLessNAS,首先構(gòu)建一個(gè)查找表,其中包含不同架構(gòu)配置和位寬下每層的Latency和Energy。需要這些信息時(shí)直接查表即可。在遺傳算法迭代的過(guò)程中,Latency和Energy超過(guò)限制的個(gè)體將會(huì)被直接排除掉。遺傳算法具體如下:
圖37:APQ算法APQ的具體流程如下圖38所示:
圖38:APQ方法流程1 首先訓(xùn)練好一個(gè)once-for-all network?。
2 利用?生成用于訓(xùn)練Full-precision accuracy predictor的數(shù)據(jù)集?和生成用于訓(xùn)練Quantization-Aware Accuracy Predictor的數(shù)據(jù)集?。
3 使用數(shù)據(jù)集?訓(xùn)練Full-precision accuracy predictor?。
4 使用Full-precision accuracy predictor在數(shù)據(jù)集?上finetune得到Quantization-Aware Accuracy Predictor?。
5 根據(jù)遺傳算法首先初始化一代,共?個(gè)樣本。
6 使用?選出這一代的精英Topk。
7 變異出?個(gè)下一代新個(gè)體,雜交出?個(gè)下一代新個(gè)體。
8 循環(huán)進(jìn)入第6步,循環(huán)?次。
9 從精英Topk中選出最優(yōu)個(gè)體作為結(jié)果輸出。
量化方案:
與HAQ一致,設(shè)權(quán)值為?,量化精度為?,則量化之后的權(quán)值在?為:
實(shí)驗(yàn)結(jié)果:
整體的實(shí)驗(yàn)是基于ImageNet,BitFusion的硬件平臺(tái)。
實(shí)驗(yàn)1:與MobileNetV2+HAQ的對(duì)比:
圖39:與MobileNetV2+HAQ的對(duì)比實(shí)驗(yàn)2: 與Multi-Stage Optimized Model的對(duì)比:
圖40:與Multi-Stage Optimized Model的對(duì)比實(shí)驗(yàn)3: Predictor-Transfer的對(duì)比實(shí)驗(yàn)
圖41:Predictor-Transfer的對(duì)比實(shí)驗(yàn)作者嘗試了使用Predictor-Transfer技術(shù)與不使用的對(duì)比,當(dāng)使用Predictor-Transfer時(shí),左圖顯示可以獲得更快和更高的收斂速度,而右圖顯示需要更少的數(shù)據(jù)量。使用Predictor-Transfer時(shí),我們可以使用少于3000個(gè)數(shù)據(jù)點(diǎn)實(shí)現(xiàn)85%的pair-wise accuracy (從候選數(shù)據(jù)集隨機(jī)選擇2個(gè)樣本,Predictor能夠正確識(shí)別哪一個(gè)更好的比例),而如果沒(méi)有這種技術(shù),至少需要4000個(gè)數(shù)據(jù)。
圖42:APQ在精確度上超過(guò)了SOTA可以發(fā)現(xiàn),APQ在精確度上超過(guò)了SOTA,且極大地減少了?排放和云計(jì)算的邊際成本。
至此,我們完成了對(duì)AutoML Pipeline的優(yōu)化過(guò)程。
總結(jié):
本文介紹了自動(dòng)機(jī)器學(xué)習(xí)流水線 (AutoML Pipeline),它的輸入是給定的硬件條件和資源限制,輸出是最優(yōu)的模型,主要分為架構(gòu)搜索,剪枝,混合精度量化三個(gè)部分。還介紹了它的改進(jìn),即聯(lián)合搜索三個(gè)部分的最優(yōu)策略。
參考文獻(xiàn):
[1] ProxyLessNAS: Direct Neural Architecture Search on Target Task and Hardware
[2] AMC: AutoML for Model Compression and Acceleration on Mobile Devices
[3] HAQ: Hardware-Aware Automated Quantization with Mixed Precision
[4] APQ: Joint Search for Network Architecture, Pruning and Quantization Policy
[5] EIE: efficient inference engine on compressed deep neural network
[6] Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding
作者:科技猛獸
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯 獲取本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi): https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請(qǐng)掃碼:總結(jié)
以上是生活随笔為你收集整理的【机器学习】模型压缩大杀器!详解高效模型设计的自动机器学习流水线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【学术相关】以前写过水论文怎么办?
- 下一篇: 强烈推荐几个我常置顶阅读清华、哈工大的平