自壓縮神經網路

2022-12-28
作者 Szabolcs Cséfalvay,Imagination

過去十年來,人工智慧研究主要集中於探索深度神經網路的潛力,而近年來的進步至少可以部分歸功於網路規模的不斷擴大…

過去十年來,人工智慧研究主要集中於探索深度神經網路的潛力,而近年來的進步至少可以部分歸功於網路規模的不斷擴大,從使用GPT-3 [1]的文本生成到使用Imagen [2]的影像生成,研究人員付出相當大的努力來創造出更大、更複雜的架構,以實現越來越令人印象深刻的壯舉。此外,現代神經網路的成功使其能佈署於各種應用中,例如寫文章時,神經網路會試圖預測下一個單詞,儘管它尚不夠準確而無法取代人工輸入!

另一方面,性能最佳化在該領域受到的關注相對較少,這是神經網路更廣泛的一個重大障礙,造成這種情況的可能原因是能夠同時在數千個GPU或其他硬體上的資料中心訓練大型神經網路,這與電腦圖形領域形成鮮明對比,例如,必須在單台電腦上即時運作的限制,驅使了在不犧牲品質的情況下優化演算法的強大動力。

神經網路容量的研究說明,發現高精度解決方案所需的網路容量大於代表這些解決方案所需的容量,在Frankle和Carbin [3]的論文《彩票假設:尋找稀疏、可訓練的神經網路》中發現,只需要網路中權重的一小部分即可代表一個良好的解決方案,但直接訓練容量減少的網路並不能達到相同的精度。同樣,Hinton et al. [4]發現,將「知識」從高精度網路轉移到低容量網路可以產生比使用、相同損失函數的高容量網路更準確的網路。

在本文中,我們探討是否可以在訓練時動態減少網路參數,雖然這是具挑戰性的做法,但由於建置複雜性(PyTorch不是為處理動態網路架構而設計的,例如,在訓練期間移除整個通道),我們希望實現以下優點:

  • 減少最終網路中的權重數量;
  • 減少剩餘權重的位元深度;
  • 減少最終網路的運行時間;
  • 減少訓練時間;
  • 降低設計網路架構時選擇層寬度的複雜性;
  • 不需要特殊的硬體來最佳化(例如,不需要稀疏矩陣乘法)。

在這項工作中,透過導入一種新穎的量化感知訓練(QAT)方案來實現這些目標,該方案平衡了最大化網路精度,和最小化網路規模的要求,同時大幅提高精度,並最大限度地減少權重位元深度,從而消除不太重要或不必要的通道,以現有硬體可以輕鬆利用的方式降低運算及頻寬需求。

可微量化

這是透過可微量化實現的,正如之前的文章[5]中介紹。簡而言之,可微量化讓您同時學習數位格式的參數及權重,這也以和網路中的權重完全相同的方式學習量化,並啟用諸如自壓縮網路之類的新技術。

量化函數化為可變比特率有符號定點格式:

這可以描述為以下步驟順序:

使用指數縮放輸入值:

使用位元深度鉗位值:

四捨五入到最接近的整數:

反轉步驟1中引入的縮放:

其中b是位元深度,e是指數,x是被量化的值(或一組值),為確保連續可微性,在訓練期間使用實值位元深度參數。

上述函數使用捨入運算,透過其傳播可用梯度的常用方法,是將四捨五入操作的梯度定義為1而不是0,這類似於「直通估計器」[6],要了解其工作原理,請參考圖1。

 

圖1:類似直通估計器的工作原理。

 

當從函數中「縮小」時,可以看到其實現方法;捨入函數似乎接近 y=x線,將取整函數的後向傳遞(梯度)替換為函數y = x的梯度,即常數1。

透過可微量化進行自壓縮

在這項工作中,使用可微量化(1)來減少訓練期間網路參數位元深度(即壓縮),以及(2)發現哪些參數可以用0位元表示,當神經網路中的參數可以用0位元表示而不影響網路精度時,就不需使用該參數;當發現權重張量中的通道可以用0位元表示時,在訓練期間將其從網路中刪除,這麼做的附加優點是訓練會隨著時間的推移而加速。

該過程可以描述如下:

  • 將網路的參數拆分為通道;
  • 用位元深度和指數的單個量化參數對每個通道進行量化;
  • 為原始任務訓練網路,同時最小化所有位元深度參數;
  • 當位元深度參數達到0時,從網路中移除該參數編碼的網路權重通道。由於消除了整個輸出通道,這可減少相應卷積的大小及消耗輸出張量的任何後續操作,而不會更改網路輸出。

透過在訓練期間從網路中移除空(即0位元)通道,可以大幅加速訓練而不改變訓練結果:訓練結果與我們在最後只移除空通道時得到的網路相同。

儘管本文描述的方法是壓縮和消除通道,但仍可延伸到其他硬體可利用的學習稀疏模式。

網路架構

選擇的網路架構是David Page的DAWNbench entry for CIFAR-10 [7],這是一個可以快速訓練的淺ResNet。

使用快速訓練網路有幾個優點,包括:

  • 使演算法設計演化更快;
  • 縮短除錯週期;
  • 合理的時間內在單個GPU上執行實驗變得容易;
  • 協助重現這項工作的結果。

該網路由兩種主要類型的模塊組成:卷積塊(卷積→批量歸一化→啟動→池化)和殘差塊(殘差分支由兩個卷積塊組成)。以下描述如何對這些模組應用可微量化以使其可壓縮。

最佳化目標

這項工作的目標是減少神經網路的推理和訓練時間,為實現此點,應該在損失函數中體現推理時間,以便將其最小化,從而產生更快的網路。在這種情況下使用的指標是網路規模,其定義為用於表示網路中權重的總位元數。作為網路性能的體現,運算層輸出所需的啟動張量大小或操作數也可最小化。

單個權重張量的大小可以用四個張量維度的乘積表示:輸出通道、輸入通道、濾波器高度和濾波器寬度(0、I、H、W)。由於我們使用一個單獨的數位格式量化每個輸出通道,並為層提供一個可學習的位元數,因此用於表示張量的總位元數如下公式:

為0時ith通道變得不必要,減少了權重張量中的輸出通道總數,以及下一個卷積的權重張量中相應的輸入通道數,因此最小化透過最小化輸出通道的數量,可最小化權重張量中的元素數量,這可有效最小化權重張量的輸出維度。

認識到一層的輸入通道數等於前一層的輸出通道數,可以使壓縮損失適切地反映網路的大小,如此一個權重張量的輸入維度也可以最小化:

一旦通道可以被壓縮到0位元,就可能在訓練期間被刪除。然而,需要克服的實際問題是從卷積層中移除一個輸出通道,不一定代表可從下一層輸入中安全地移除相應的輸入通道,因為可以將偏差添加到層的輸出0中,在這種情況下刪除它可能會顯著改變網路的輸出,為了處理這個問題,可識別達到0位元的加權通道(過濾器)並對其輸出應用L1損耗,以將其推至0位元,只有當偏差減少到0時,這些篩檢程式才會被移除,因為此時移除這樣的通道不會改變網路的輸出。

整個網路的大小是所有層大小的總和:

為了平衡網路的準確性和規模,我們簡單地使用兩項的線性組合:

其中L0是網路的原始損失,Y是壓縮因數,較大的Y會生成較小但不太準確的網路。

分支處理

壓縮網路時出現的另一個問題是網路分支的處理,例如,在殘差塊(residual blocks)中,解決這個問題最簡單的方法是單獨地考慮這兩個分支。

更新優化器

實現細節涉及使優化器隨著網路的變化而更新的問題,優化器追蹤網路中每個參數的資訊(元參數),當網路參數被動態刪除時,相應的 元參數也必須從優化器中刪除。

結果

自壓縮網路允許在規模和精度之間進行權衡,可以在規模準確度圖中視象化(圖2),該圖中的每個點都表示一個神經網路的大小和精度,該神經網路經過隨機壓縮率,從覆蓋範圍的對數均勻分佈中採樣[10-3;10-5]。

 

圖2:當使用隨機壓縮率訓練網路時,用於表示網路權重的位元數與32位元權重基線之間的關係。

 

圖2顯示了在使用隨機壓縮率訓練網路時,用於表示網路權重的位元數與每權重基線32位元(對應於32位元浮點)之間的關係,這是透過保留權重的百分比乘以剩餘權重的平均位元深度來計算的,網路的基線精度(未壓縮精度)為95.69±0.22。

圖3僅顯示了網路中使用的權重數量的減少,在不影響精度的情況下,可以移除大約75%的權重。

 

圖3:顯示了使用隨機壓縮率訓練網路時,網路中保留的權重百分比與精度之間的關係。

 

圖4顯示了透過在訓練期間移除權重對該時間的影響,一個時期(Epoch)的訓練時間不僅取決於網路的大小,還取決於系統的其他部分,例如輸入數據通道。為了確定基線訓練開銷,對於同一網路進行訓練,每個層僅使用一個通道,每個訓練時期大約需要7.5秒。

 

圖4:隨著參數從網路中移除,神經網路訓練時間加快,訓練結束時移除了86%的權重。

 

圖5顯示了使用壓縮率訓練的網路架構,訓練將移除殘差層中的快捷分支。其餘9個通道在訓練結束時已經達到0位元,並且正在消除其偏差,預計它們會隨著更長的訓練而消失。第二個殘差層中的快捷分支與它相關的損失非常低(由於它對網路規模的貢獻最小),因此它的減少速度太慢,無法在訓練結束時消失。

 

圖5:訓練前後的層大小和每層平均位元深度的範例。這裡刪除了86%的權重和97.6%的位元,每個方塊代表一個卷積,方塊中的值表示卷積的輸出或輸入(in)通道的總數,其中需要此類資訊(在分支處)。

 

圖6顯示了整個訓練過程中的網路規格,它在早期迅速收縮,然後逐漸減少。

 

圖6:網路規模在訓練早期快速縮小,之後逐漸減小。

 

最佳化您的網路

本文分享透過通用架構來最佳化神經網路的典型固定特徵——通道數和位元深度——以使網路在訓練過程中學會自我壓縮,這主要優點是更快的執行時間及生成網路訓練。以前的許多工作都集中在透過創造稀疏層來減少網路規模,這需要軟體和硬體的特殊支援才能更有效運作。簡單地減少層寬度不需要特別支援,透過減少DRAM頻寬,支援可變位元深度亦可提高多種架構的性能。

 

參考資料

[1] T. B. Brown and al, “Language Models are Few-Shot Learners,” 2020.
[2] C. Saharia and al, “Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding,” 2022.
[3] J. Frankle and M. Carbin, “The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks,” 2018.
[4] G. Hinton, O. Vinyals and J. Dean, “Distilling the Knowledge in a Neural Network,” 2015.
[5] Cséfalvay, S, “High-Fidelity Conversion of Floating-Point Networks for Low-Precision Inference using Distillation,” 25 May 2021. [Online]. Available: https://blog.imaginationtech.com/low-precision-inference-using-distillat….
[6] G. Hinton, “Lecture 9.3 — Using noise as a regularizer [Neural Networks for Machine Learning],” 2012. [Online]. Available: https://www.youtube.com/watch?v=LN0xtUuJsEI&list=PLoRl3Ht4JOcdU872GhiYWf….
[7] Page, D, “How to Train Your ResNet 8: Bag of Tricks,” 19 Aug 2019. [Online]. Available: https://myrtle.ai/how-to-train-your-resnet-8-bag-of-tricks/.

本文同步刊登於《電子工程專輯》雜誌2022年12月號

 

 

 

 

 

活動簡介

從無線連接、更快的處理和運算、網路安全機制、更複雜的虛擬實境(VR)到人工智慧(AI)等技術,都將在未來的每一個嵌入式系統中發揮更關鍵功能。「嵌入式系統設計研討會」將全面涵蓋在電子產業最受熱議的「智慧」、「互連」、「安全」與「運算」等系統之相關硬體和軟體設計。

會中將邀請來自嵌入式設計相關領域的研究人員、代表廠商以及專家,透過專題演講、產品展示與互動交流,從元件、模組到系統,從概念設計到開發工具,深入介紹嵌入式系統設計領域的最新趨勢、創新和關注重點,並深入分享關於嵌入式系統設計的經驗、成果以及遇到的實際挑戰及其解決方案。

贊助廠商

發表評論

訂閱EETT電子報
論壇動態