為了解釋深度學(xué)習(xí),有必要了解神經(jīng)網(wǎng)絡(luò)。
神經(jīng)網(wǎng)絡(luò)是一種模擬人腦的神經(jīng)元和神經(jīng)網(wǎng)絡(luò)的計(jì)算模型。
神經(jīng)元和神經(jīng)網(wǎng)絡(luò)
作為具體示例,讓我們考慮一個(gè)輸入圖像并識(shí)別圖像中對(duì)象類別的示例。這個(gè)例子對(duì)應(yīng)機(jī)器學(xué)習(xí)中的分類任務(wù)。
首先,我們以一張“貓的圖像”作為輸入,教它輸入和輸出的對(duì)應(yīng)關(guān)系,這樣神經(jīng)網(wǎng)絡(luò)的輸出就是“這張圖像是一只貓”。這個(gè)階段稱為學(xué)習(xí)。
在完成一定量的學(xué)習(xí)后,當(dāng)一張新的貓圖像輸入到訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)中時(shí),就可以輸出“This image is a cat”等圖像識(shí)別結(jié)果。推理是使用經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)從未知輸入中猜測(cè)輸出的階段。
神經(jīng)網(wǎng)絡(luò)內(nèi)部有很多參數(shù)。具體來(lái)說(shuō),上圖中連接節(jié)點(diǎn)的邊被賦予了一個(gè)參數(shù),稱為“權(quán)重”,代表連接的強(qiáng)度。學(xué)習(xí)是通過(guò)逐漸改變這個(gè)參數(shù)來(lái)進(jìn)行的。分配給某個(gè)神經(jīng)網(wǎng)絡(luò)的一組特定參數(shù)稱為模型。
給定模型的一些輸入,我們可以根據(jù)內(nèi)部參數(shù)得到一些輸出,但我們需要一些跡象表明這有多合理。此指標(biāo)有多種類型,但經(jīng)常使用稱為準(zhǔn)確性的一種。假設(shè)將 10 張貓的圖像輸入到預(yù)訓(xùn)練模型中,其中 9 張被確定為“貓”。在這一點(diǎn)上,該模型可以說(shuō)具有 90% 的準(zhǔn)確率。
一般來(lái)說(shuō),你可以通過(guò)學(xué)習(xí)大量的輸入輸出對(duì)來(lái)獲得更準(zhǔn)確的模型。
有了上述機(jī)制,現(xiàn)在可以通過(guò)讓神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)各種問(wèn)題來(lái)自動(dòng)解決問(wèn)題,創(chuàng)建高精度模型,并對(duì)新數(shù)據(jù)進(jìn)行推理。
然而,由于單個(gè)神經(jīng)網(wǎng)絡(luò)只能解決簡(jiǎn)單的問(wèn)題,人們嘗試通過(guò)構(gòu)建深度神經(jīng)網(wǎng)絡(luò) (DNN) 來(lái)解決更復(fù)雜的問(wèn)題,深度神經(jīng)網(wǎng)絡(luò)是一種將這些問(wèn)題多層連接起來(lái)的更深層網(wǎng)絡(luò)。這稱為深度學(xué)習(xí)。
深度學(xué)習(xí)的簡(jiǎn)單機(jī)制
目前,深度學(xué)習(xí)被用于現(xiàn)實(shí)世界中的各種場(chǎng)景,例如圖像和語(yǔ)音識(shí)別、自然語(yǔ)言處理和異常檢測(cè),并且在某些情況下,它的記錄精度超過(guò)了人類。這些是通過(guò)卷積神經(jīng)網(wǎng)絡(luò) (CNN) 和遞歸神經(jīng)網(wǎng)絡(luò) (RNN) 實(shí)現(xiàn)的,它們是在結(jié)構(gòu)上進(jìn)一步設(shè)計(jì)普通神經(jīng)網(wǎng)絡(luò)或其變體和組合的計(jì)算模型。
特別是,CNN 在圖像識(shí)別領(lǐng)域表現(xiàn)非常出色,除了上述分類之外,還被用于多項(xiàng)任務(wù)(下面顯示了四個(gè)示例)。
?
許多使用深度學(xué)習(xí)的技術(shù)、服務(wù)和業(yè)務(wù)已經(jīng)出現(xiàn),預(yù)計(jì)未來(lái)還會(huì)繼續(xù)增加。
有許多關(guān)于深度學(xué)習(xí)主題的通俗易懂的書(shū)籍、網(wǎng)絡(luò)文章和視頻內(nèi)容。
在 FPGA 上進(jìn)行深度學(xué)習(xí)的好處
我們已經(jīng)提到,許多服務(wù)和技術(shù)都使用深度學(xué)習(xí),而 GPU 大量用于這些計(jì)算。這是因?yàn)榫仃嚦朔ㄗ鳛樯疃葘W(xué)習(xí)中的主要運(yùn)算,其特點(diǎn)是計(jì)算所需數(shù)據(jù)的局部性和可重用性高,通過(guò)GPU計(jì)算很容易達(dá)到性能。
特別是當(dāng)只需要推理時(shí),由于不需要將神經(jīng)元之間的運(yùn)算結(jié)果保存在內(nèi)存中,因此所需的數(shù)據(jù)量會(huì)減少?;谶@一特性,也開(kāi)始嘗試使用FPGA進(jìn)行深度學(xué)習(xí)推理。
事實(shí)上,微軟的“ Project Brainwave ”在云端使用 FPGA 進(jìn)行推理,并宣布將搜索引擎中 RNN 計(jì)算的延遲和吞吐量提高了 10 倍以上。
然而,深度學(xué)習(xí)仍然主要使用 GPU 和 CPU 完成。因此,在這里我們將仔細(xì)研究使用 FPGA 進(jìn)行深度學(xué)習(xí)推理的好處。
可構(gòu)建低功耗、節(jié)省空間的系統(tǒng)
FPGA 的計(jì)算并行度不如 GPU,但在很多計(jì)算上可以達(dá)到比 CPU 更高的并行度。此外,單位時(shí)間的功耗往往低于 GPU,因此在功率受限系統(tǒng)中,F(xiàn)PGA 實(shí)現(xiàn)可能比 GPU 更適合 DNN 推理。然而,計(jì)算性能和功耗之間存在折衷(Operations / Watt),因此需要根據(jù)系統(tǒng)要求進(jìn)行仔細(xì)評(píng)估。
FPGA 還具有能夠?qū)⒄麄€(gè)系統(tǒng)安裝在單個(gè)芯片上的優(yōu)勢(shì)。例如,將連接到FPGA的相機(jī)輸入連接到深度學(xué)習(xí)計(jì)算電路,并根據(jù)計(jì)算結(jié)果改變系統(tǒng)的控制等應(yīng)用可以在單個(gè)芯片上完成。與 GPU 不同,它可以在沒(méi)有 CPU 的情況下運(yùn)行,因此可以構(gòu)建一個(gè)比 CPU 使用更少功率和空間的系統(tǒng)。
實(shí)現(xiàn)超低延遲、節(jié)省空間的推理
FPGA的優(yōu)勢(shì)之一是低延遲,這對(duì)深度學(xué)習(xí)推理也很有效。
上述圖像識(shí)別的深度學(xué)習(xí)有望應(yīng)用于自動(dòng)駕駛等對(duì)精度要求較高的系統(tǒng)中。然而,由于它也是一個(gè)具有嚴(yán)格延遲約束的系統(tǒng),因此可能難以通過(guò) CPU 和 GPU 實(shí)現(xiàn),它們?nèi)菀资艿?DRAM 的響應(yīng)速度和與外圍設(shè)備的 IO 性能的影響。
使用低位寬數(shù)據(jù)可以減少延遲
FPGA可以使用任意位寬的數(shù)據(jù),因此通過(guò)采用4位、2位等CPU和GPU難以獲得的位寬,可以降低延遲,節(jié)省計(jì)算資源。
眾所周知,即使使用具有一定低位寬的數(shù)據(jù),深度學(xué)習(xí)推理也不會(huì)降低最終精度。目前據(jù)說(shuō)8位左右可以提供穩(wěn)定的準(zhǔn)確率,但最新的研究表明,已經(jīng)出現(xiàn)了即使降低到4位或2位也能獲得很好準(zhǔn)確率的模型和學(xué)習(xí)方法,越來(lái)越多的正在FPGA實(shí)現(xiàn)。
易于適應(yīng)新的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
深度學(xué)習(xí)是一個(gè)非常活躍的研究領(lǐng)域,每天都在設(shè)計(jì)新的 DNN。其中許多結(jié)合了現(xiàn)有的標(biāo)準(zhǔn)計(jì)算,但有些需要全新的計(jì)算方法。特別是在具有特殊結(jié)構(gòu)的網(wǎng)絡(luò)難以在 GPU 上實(shí)現(xiàn)高效的情況下,計(jì)算成為瓶頸并減慢整個(gè)深度學(xué)習(xí)過(guò)程。由于 FPGA 是可重構(gòu)的,因此它們可能能夠靈活地應(yīng)對(duì)這種不規(guī)則的計(jì)算。
到目前為止,我們重點(diǎn)介紹了 FPGA 深度學(xué)習(xí)推理的優(yōu)點(diǎn),但也存在缺點(diǎn)。
運(yùn)行頻率低于 CPU 和 GPU,除非設(shè)計(jì)實(shí)現(xiàn),否則性能往往較差。
與 CPU 和 GPU 相比實(shí)施成本高,F(xiàn)PGA 上支持深度學(xué)習(xí)的軟件較少
很多DNN參數(shù)量大,很難在FPGA上簡(jiǎn)單實(shí)現(xiàn)
需要高數(shù)據(jù)精度的 DNN,例如單精度浮點(diǎn)數(shù),往往會(huì)出現(xiàn)性能下降
需要高級(jí)專業(yè)知識(shí)來(lái)創(chuàng)建具有高推理準(zhǔn)確性和低數(shù)據(jù)準(zhǔn)確性的模型
有很多情況學(xué)習(xí)成為處理時(shí)間的瓶頸而不是推理,但用FPGA很難解決(幾乎連研究水平都沒(méi)有)
近年來(lái),許多為深度學(xué)習(xí)計(jì)算而優(yōu)化的 ASIC 被推向市場(chǎng),GPU 配備了專門用于深度學(xué)習(xí)的電路。
基于這些,不得不說(shuō)用FPGA做深度學(xué)習(xí)的好處并不多。然而,與 DNN 權(quán)重降低相關(guān)的技術(shù),如參數(shù)量化(或精度降低)和網(wǎng)絡(luò)修剪,正在積極研究中,這些方法與 FPGA 非常兼容。
也有FPGA供應(yīng)商發(fā)布高速深度學(xué)習(xí)IP,以及配備適合深度學(xué)習(xí)計(jì)算的硬件的SoC型FPGA等利好因素。深度學(xué)習(xí)與FPGA的實(shí)際應(yīng)用還有很長(zhǎng)的路要走,但我認(rèn)為它在未來(lái)有很大的潛力。
總結(jié)
在這篇文章中,解釋了兩點(diǎn):“什么是深度學(xué)習(xí)?”和“深度學(xué)習(xí)在FPGA上的優(yōu)缺點(diǎn)”。
在后續(xù)文章中,我們將為簡(jiǎn)單的圖像分類任務(wù)在 FPGA 上創(chuàng)建推理設(shè)計(jì)。本教程中創(chuàng)建的設(shè)計(jì)不會(huì)是利用上述 FPGA 優(yōu)勢(shì)的優(yōu)秀設(shè)計(jì),而是非常簡(jiǎn)單的設(shè)計(jì)。我將在后面的文章中展示之后的優(yōu)化策略,但我希望能看出,如果不考慮復(fù)雜的優(yōu)化,F(xiàn)PGA 上的開(kāi)發(fā)非常簡(jiǎn)單。
審核編輯:劉清
評(píng)論
查看更多