本文授權(quán)轉(zhuǎn)載自:AI公園
作者:James Le
編譯:ronghuaiyang
深度學習模型這么大,這么慢,如何在邊緣設(shè)備上部署使用?這里有5個算法,你可以試試。
隨著深度學習的發(fā)展,神經(jīng)網(wǎng)絡(luò)變得越來越大。例如,在ImageNet識別挑戰(zhàn)中,獲勝的模型在2012年到2015年間的大小增加了16倍。在短短一年的時間里,百度的深度語音模型的訓練操作數(shù)增加了10倍。
一般來說,在嵌入式系統(tǒng)中深度學習有三個主要的挑戰(zhàn):
隨著模型尺寸的增大,模型在手機上的部署變得更加困難。如果模型超過100 MB,(一般來說)只有連接到Wi-Fi才能下載。
訓練速度變得極其緩慢。例如,與ResNet101相比,原始的ResNet152的準確率提升不到1%,它需要在4個分布式gpu上進行1.5周的訓練。
如此龐大的模型也與能源效率斗爭。例如,AlphaGo在圍棋中擊敗李世石(Lee Sedol),需要訓練1,920個cpu和280個gpu,用電成本約為3,000美元。
在這種情況下,在資源受限的設(shè)備上運行神經(jīng)網(wǎng)絡(luò)需要來自數(shù)據(jù)工程和數(shù)據(jù)科學的聯(lián)合解決方案,這有時被稱為“算法和硬件協(xié)同設(shè)計”。
在本文中,我們只討論象限的左上角。最先進的推理算法是什么?
與你所想的相反,剪枝與砍樹無關(guān)。在機器學習中,為了得到一個更小、更快的網(wǎng)絡(luò),模型剪枝包括去除不重要的權(quán)重。
1989年,Yann Le Cun在他的論文“Optimal Brain Damage”中首次提出了模型剪枝。該思想是采取一個完全訓練的網(wǎng)絡(luò),刪除修剪權(quán)值將導致最小化的目標函數(shù)增加。各參數(shù)的貢獻可用海森矩陣近似表示。一旦去除了不重要的權(quán)值,較小的網(wǎng)絡(luò)就可以再次訓練,這個過程可以重復幾次,直到網(wǎng)絡(luò)有一個令人滿意的大小和一個合理的性能。
從那時起,大量的剪枝技術(shù)的變化發(fā)展起來。Han等人,2015年,在“Learning both Weights and Connections for Efficient Neural Networks”中,引入了一個三步方法,由神經(jīng)網(wǎng)絡(luò)的訓練,然后修剪低于選擇閾值的連接權(quán)值,最后再訓練稀疏網(wǎng)絡(luò)學習最后剩下的連接權(quán)重。
你可能想知道:如何確定剪枝閾值?好問題!卷積層和全連接層都可以修剪,然而,經(jīng)驗表明,卷積層比全連接層對剪枝更敏感。因此,需要根據(jù)各層的靈敏度選擇閾值,如下圖所示,該圖取自Han等人的研究論文。
根據(jù)研究報告,在NVIDIA Titan X GPU上重新訓練修剪過的AlexNet需要173個小時。但再訓練時間不是一個關(guān)鍵問題,因為最終目標是讓較小的模型在資源有限的設(shè)備上快速運行。
在ImageNet上,該方法將AlexNet的參數(shù)數(shù)量減少了9倍(從6100萬個參數(shù)減少到670萬個),將VGG-16的參數(shù)數(shù)量減少了13倍(從1.38億個參數(shù)減少到1030萬個)。經(jīng)過剪枝后,AlexNet和VGGNet的存儲需求大大降低,所有的權(quán)值都可以存儲在芯片上,而不是存儲在芯片外的DRAM上(訪問DRAM需要消耗大量的能量)。
神經(jīng)網(wǎng)絡(luò)既需要大量計算,又需要大量內(nèi)存,因此很難在硬件資源有限的嵌入式系統(tǒng)上部署它們。為了解決這個限制,“Deep Compression“論文,來自Han等,介紹了一個3步走的pipeline:剪枝,訓練好模型的量化,霍夫曼編碼,在共同努力下,減少神經(jīng)網(wǎng)絡(luò)的存儲需求35 - 49倍,但是不影響其準確性。
該方法首先通過只學習重要的連接來刪除網(wǎng)絡(luò)。接下來,該方法量化權(quán)重來執(zhí)行權(quán)重共享。最后,該方法使用霍夫曼編碼。在前兩個步驟之后,作者對網(wǎng)絡(luò)進行再訓練,以調(diào)整剩余的連接和量化中心。剪枝將連接的數(shù)量減少9到13倍。量化后將代表每個連接的比特數(shù)從32減少到5。
在ImageNet上,該方法將AlexNet所需的存儲空間減少了35倍(從240 MB減少到6.9 MB),并且沒有造成精度損失。該方法還將VGG-16預(yù)訓練模型的大小減少了49倍(從552 MB減少到11.3 MB),同時也沒有精度損失。
最后,這種深度壓縮算法有助于在移動應(yīng)用程序中使用復雜的神經(jīng)網(wǎng)絡(luò),而移動應(yīng)用程序的大小和下載帶寬都受到限制。在對CPU、GPU和移動GPU進行基準測試時,壓縮后的網(wǎng)絡(luò)具有3到4倍的分層加速和3到7倍的能效。
近年來,基于卷積神經(jīng)網(wǎng)絡(luò)的方法在大量的應(yīng)用中取得了巨大的成功,是計算機視覺中應(yīng)用最廣泛的架構(gòu)之一。然而,基于cnn的方法是計算密集型和資源消耗的,因此很難集成到嵌入式系統(tǒng)中,如智能手機、智能眼鏡和機器人。FGPA是一種很有前途的CNNs加速平臺,但是有限的帶寬和片上內(nèi)存大小限制了CNNs FPGA加速器的性能。
清華大學研究人員的論文'Going Deeper with Embedded FPGA Platform for CNN'提出了一種用于ImageNet大規(guī)模圖像分類的CNN嵌入式FPGA加速器設(shè)計方案。作者通過經(jīng)驗證明,在當前最先進的CNN模型的架構(gòu)中,卷積層是以計算為中心的,而全連接層是以內(nèi)存為中心的。因此,他們提出了一種動態(tài)精確數(shù)據(jù)量化方法(如下圖所示)來幫助提高帶寬和資源利用率。
在該數(shù)據(jù)量化流中,任意兩個定點數(shù)之間的分數(shù)長度對于不同的層和特征映射集是動態(tài)的,而對于同一層則是靜態(tài)的,以最小化每一層的截斷誤差。
權(quán)值量化階段的目標是找到一層權(quán)值的最優(yōu)分數(shù)長度。在此階段,首先分析各層權(quán)值的動態(tài)范圍。然后,初始化分數(shù)長度以避免數(shù)據(jù)溢出。
數(shù)據(jù)量化階段的目的是為兩層之間的一組特征映射找到最優(yōu)的分數(shù)長度。該階段采用貪心算法對定點CNN模型和浮點CNN模型的中間數(shù)據(jù)進行逐層比較,以減少精度損失。
他們的結(jié)果(在進一步分析了不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的不同策略之后)表明,動態(tài)精度量化比靜態(tài)精度量化更有利。使用動態(tài)精確量化,他們可以使用更短的操作表示,同時仍然可以達到相當?shù)木取?/p>
卷積神經(jīng)網(wǎng)絡(luò)的另一個問題是其昂貴的測試時間評估,這使得該模型在現(xiàn)實系統(tǒng)中不切實際。例如,一個云服務(wù)需要每秒處理數(shù)千個新請求,手機、平板電腦等移動設(shè)備大多只有cpu或低端gpu,一些識別任務(wù),如物體檢測,即使在高端GPU上,處理單個圖像仍然很耗時。因此,加快CNNs測試時間的計算具有重要的現(xiàn)實意義。
微軟亞洲研究院的'Efficient and Accurate Approximations of Nonlinear Convolutional Networks'論文提出了一種加速非線性卷積神經(jīng)網(wǎng)絡(luò)的方法。該方法以最小化非線性響應(yīng)的重構(gòu)誤差為基礎(chǔ),采用低秩約束來減少計算量。為了解決具有挑戰(zhàn)性的約束優(yōu)化問題,作者將其分解為兩個可行的子問題并迭代求解。然后,他們提出了最小化非對稱重構(gòu)誤差的方法,有效地減少了多個近似層的累積誤差。
從左看,作者用W'和P替換原來的層W。實際上是d '濾波器的大小是k×k×c 。
這些濾波器產(chǎn)生一個d '維的特征圖。在此特征圖中,d-by-d '矩陣P可以通過1×1×d '實現(xiàn)。因此,P對應(yīng)一個卷積層,它具有1×1的空間支持,將d '維特征映射到d維特征。
他們將這種低秩近似應(yīng)用于為ImageNet訓練的大型網(wǎng)絡(luò),并得出訓練加速比增加了4倍的結(jié)論。事實上,與AlexNet相比,他們的加速模型執(zhí)行的推斷相對較快,但準確性提高了4.7%。
另一種可以解決移動設(shè)備上有限功率預(yù)算下的大型神經(jīng)網(wǎng)絡(luò)模型部署問題的算法是訓練后三值量化,它可以將神經(jīng)網(wǎng)絡(luò)中的權(quán)值精度降低到三元值。該方法精度下降很小,甚至可以提高部分模型在CIFAR-10和ImageNet上的精度。在本文中,AlexNet模型是從零開始訓練的,這意味著它與訓練一個正常的、全精度的模型一樣容易。
訓練后的量化方法既可以學習三元的值,又可以學習三個值的分配,如上圖所示。首先,作者通過將每個權(quán)值除以最大權(quán)值,將全精度權(quán)值規(guī)范化為[-1,+1]范圍。
接下來,通過閾值化將中間全分辨率權(quán)重量化為{- 1,0,+1}。閾值因子t是一個超參數(shù),為了減少搜索空間,它在所有層中都是相同的。
最后,他們通過反向傳播兩個梯度(短線)進行訓練后量化:將gradient1傳播到全分辨率權(quán)值,將gradient2傳播到尺度系數(shù)。前者可以學習三元的值,后者可以學習三元值的分配。
他們在CIFAR-10上的實驗表明,用這種經(jīng)過訓練的量化方法得到的三元模型分別比全精度的ResNet32、ResNet44、ResNet56模型的性能好0.04%、0.16%和0.36%。在ImageNet上,他們的模型比全精度的AlexNet模型的精度高0.3%,比之前的三元模型的精度高3%。
我希望本文能幫助你認識到你正在使用的深度學習庫背后使用了多少優(yōu)化。這里介紹的這5種算法允許從業(yè)者和研究人員更有效地執(zhí)行模型推斷,從而在移動電話等小型邊緣設(shè)備上實現(xiàn)了越來越多的實際應(yīng)用。
英文原文:https://heartbeat.fritz.ai/the-5-algorithms-for-efficient-deep-learning-inference-on-small-devices-bcc2d18aa806
聯(lián)系客服