隨著時下智能時代的發(fā)展,機器學習已成為不少專業(yè)人士的“必備技能”。盡管如此,可它在實用性上仍然存在一些問題。因而設計師們采取了架構精簡、壓縮、以及硬件加速等三種途徑。都有啥特點呢?請往下看~
精簡架構設計,輸入/輸出的極致簡化
設計師減少層數(shù)或網(wǎng)絡中各層之間連接數(shù)量的任何努力,都會直接降低推理的內(nèi)存要求和計算量。因此,我們很難預測指定網(wǎng)絡設計在指定問題和訓練集上的作用,除非有經(jīng)驗可供參考。確定您是否需要特定深度學習網(wǎng)絡設計中全部 16 層的唯一方法,是以網(wǎng)絡的數(shù)層為樣本對其進行訓練和測試。但由于此類探索工作的費用較高,設計師往往更傾向于使用他們熟悉的網(wǎng)絡架構;當然,探索也可能有助于節(jié)省大量成本。
讓我們以 ImageNet 當前面臨的眾所周知的靜態(tài)圖像分類挑戰(zhàn)為例。深度學習網(wǎng)絡一般從上一層的每個節(jié)點為自身的每個節(jié)點獲取加權輸入,而圖像分類研究人員有了重大發(fā)現(xiàn),即使用卷積神經(jīng)網(wǎng)絡 (CNN) 可以化繁為簡(圖 3)。
在其初層中,CNN 使用較少的卷積引擎替代完全連接的節(jié)點。卷積引擎并不為每項輸入提供權重,僅具有小型卷積核心。它可使用輸入圖像對核心進行卷積處理,生成特征圖—一種 2D 數(shù)組,表示圖像和圖像各點處核心之間的相似度。然后,特征圖可收到非線性化信息。卷積層的輸出是一個三維數(shù)組:該層中每個節(jié)點的 2D 特征圖。然后,該數(shù)組將經(jīng)過池化運算降低分辨率,從而縮減 2D 特征圖的大小。
圖 3. 遞歸神經(jīng)網(wǎng)絡通常只是將其部分中間狀態(tài)或輸出饋送回輸入的簡單神經(jīng)網(wǎng)絡
現(xiàn)代 CNN 可能具有許多卷積層,每個卷積層跟著一個池化層。在靠近網(wǎng)絡輸出端的位置,卷積和池化層終止,其余層是完全連接的。因此,網(wǎng)絡從輸入端到輸出端逐漸變細,最終形成一個完全連接的層,其寬度剛好足以為每個所需的標記生成一個輸出。與具有相似深度的完全連接的深度學習網(wǎng)絡相比,該網(wǎng)絡能夠大幅減少權重、連接數(shù)和節(jié)點數(shù)。
“壓縮”技術,突破推理的上限
機器學習社區(qū)使用壓縮表示與卷積數(shù)據(jù)壓縮截然不同的概念。該語境下的壓縮包含一系列技術,用于減少生成推理所需的計算數(shù)量并降低其難度,修剪便是此類技術之一。在進行修剪時,深度學習網(wǎng)絡訓練通常會在權重矩陣中產(chǎn)生多個零或非常小的數(shù)值。實際上,這意味著無需計算將乘以權重的輸入。因此,表示推理計算的數(shù)據(jù)流圖表可被剪下一整個分支。經(jīng)驗表明,如果一個網(wǎng)絡被修剪后再重新訓練,其精度實際上可以提高。
另一種壓縮方法是減少權重中的位數(shù)。雖然數(shù)據(jù)中心服務器可能將所有值保持在單精度浮點中,但研究人員發(fā)現(xiàn),更低的權重精度和幾個位足以實現(xiàn)與 32 位浮點幾乎相同的精度。同樣,在應用非線性之后,節(jié)點的輸出可能只需要幾個位。如果推理模型將在服務器上執(zhí)行,這幾乎沒有幫助。然而,該方法在一個 MCU 上非常有用,一個能夠非常有效地實施 2 位或 3 位乘法器的 FPGA 加速器可以充分利用這種壓縮形式。
總之,在某些情況下,修剪技術、大幅減少位數(shù)和相關技術已經(jīng)被證明可以減少 20 到 50 倍的推理工作。這些技術可以把經(jīng)過訓練的網(wǎng)絡的推理工作控制在一些邊緣計算平臺的范圍內(nèi)。當壓縮不足以達成目的時,設計師可以轉(zhuǎn)向硬件加速,而且硬件加速有越來越多的替代方案。
硬件加速的新風標!
推理所需的計算既不多樣也不復雜,主要包括許多乘積和 — 乘積累加 (MAC) — 運算,用于將輸入乘以權重和在每個節(jié)點將結果相加。該計算任務還包括所謂的修正線性單元 (ReLU) — 用于將所有負值設置為零 — 等非線性函數(shù)、雙曲正切或 sigmoid 函數(shù) — 用于注入非線性 — 以及用于池化的最大值函數(shù)。總之,該計算任務看起來很像一個典型的線性代數(shù)工作負載。
應用超級計算領域的硬件思想。最簡單的方法是將輸入、權重和輸出作為向量進行組織,并使用內(nèi)置到大型 CPU 中的向量 SIMD 單元。為了提高速度,設計師在 GPU 中使用了大量著色引擎。通過在 GPU 的內(nèi)存層次結構中安排輸入、權重和輸出數(shù)據(jù)避免抖動或高缺失率,(絕非無足輕重的小問題,)但這并沒有阻止 GPU 成為數(shù)據(jù)中心深度學習領域使用最廣泛的非 CPU 硬件。最近幾代的 GPU 取得了長足進步,增加了更小的數(shù)據(jù)類型和矩陣數(shù)學塊來補充浮點著色單元,能夠更好地適應該應用。
這些調(diào)整說明了加速硬件設計師使用的基本策略:減少或消除指令獲取和解碼,減少數(shù)據(jù)移動,盡可能多地使用并行性,以及利用壓縮。難點在于確保這些操作在實施時不會互相干擾。
使用這些策略有幾種架構方法:
1、在芯片上對大量的乘法器、加法器和小型 SRAM 塊進行實例化,并通過片上網(wǎng)絡將它們鏈接起來。這為執(zhí)行推理提供了原始資源,但存在一個關鍵挑戰(zhàn),即從計算元件中高效獲取數(shù)據(jù),以及將數(shù)據(jù)傳輸至計算元件及程序員。這些設計是過去許多大規(guī)模并行計算芯片的后繼者,所有這些芯片都遭遇了難以攻克的編程挑戰(zhàn)。
2、Google 張量處理單元(TPU)等芯片采用了進一步依托應用的方法,按照深層學習網(wǎng)絡的固有結構組織計算元件。這類架構將網(wǎng)絡的輸入權重乘法視為非常大的矩陣乘法,并創(chuàng)建硬件矩陣乘法器來執(zhí)行它們。在 TPU 中,乘法是在一個收縮乘法器數(shù)組中完成的,在這個數(shù)組中,操作數(shù)自然地從一個單元流到另一個單元。數(shù)組被緩沖區(qū)包圍,以饋入激活和權重值,后面是激活函數(shù)和池化硬件。
通過對芯片進行特定的組織在一定程度上自動實施矩陣運算,TPU 可讓程序員免于通過計算元件和 SRAM 對數(shù)據(jù)移動進行精細安排。編程變得非常簡單,基本就包括將輸入和權重分組成矩陣并按下按鈕,但存在一個問題。如上所述,修剪會產(chǎn)生非常稀疏的矩陣,簡單地將這些矩陣饋入像 TPU 一樣的設備會導致大量毫無意義的乘法和加法。在模型開發(fā)的壓縮階段,可能需要將這些稀疏矩陣重新排列為更小的密集矩陣,以便充分利用硬件。
3、將推理任務作為一系列矩陣乘法建模,而非作為數(shù)據(jù)流圖表建模。加速器被設計成一個數(shù)據(jù)流引擎,數(shù)據(jù)從一側(cè)進入,通過可配置的鏈接流經(jīng)一個類似于圖表的處理元件網(wǎng)絡,然后進行輸出。這種加速器可以配置為僅執(zhí)行所修剪網(wǎng)絡需要的操作。
一旦選擇了架構,接下來的問題就是實施。在開發(fā)過程中,許多架構源于 FPGA,以滿足成本和調(diào)度要求。在一些情況下,一些架構將留在 FPGA 中——例如,當深度學習網(wǎng)絡模型預計會發(fā)生一個加速器設計無法完全處理的過多改變。但是,如果模型的改變很小,例如層排列有所不同和權重發(fā)生改變,ASIC 或 CPU 集成加速器可能是首選項。
這又回到了邊緣計算及其限制的話題。如果機器學習網(wǎng)絡要在一組服務器上執(zhí)行,那么在服務器 CPU、GPU、FPGA 或大型 ASIC 加速器芯片上執(zhí)行都是可行的選擇。但是,如果必須在一個更為有限的環(huán)境中執(zhí)行,例如車間機器、無人機或攝像頭,則需要一個小型的 FPGA 或 ASIC。
對于極其有限環(huán)境中的小型深度學習模型,例如手機,內(nèi)置于應用處理器 SOC 中的低功耗 ASIC 或加速器塊可能是唯一的選擇。盡管到目前為止,這些限制往往會促使設計師努力設計簡單的乘法器數(shù)組,但神經(jīng)形態(tài)設計的卓越能效可能會使它們對下一代深度嵌入式加速器非常重要。
無論如何,機器學習都不再局限于數(shù)據(jù)中心范疇,推理正邁向邊緣。隨著研究人員不再聚焦當前的傳統(tǒng)深度學習網(wǎng)絡,將視線投向更多概念,邊緣的機器學習問題有望成為架構開發(fā)的前沿課題。
審核編輯:湯梓紅
-
cpu
+關注
關注
68文章
10855瀏覽量
211602 -
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4771瀏覽量
100720 -
sram
+關注
關注
6文章
767瀏覽量
114677 -
機器學習
+關注
關注
66文章
8408瀏覽量
132572 -
cnn
+關注
關注
3文章
352瀏覽量
22204
原文標題:如何打通機器學習的“三大玄關”,你該這樣Get新技能!
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論