計(jì)算機(jī)具有高儲(chǔ)量的硬盤(pán)和強(qiáng)大的CPU和GPU。但是智能手機(jī)卻沒(méi)有,為了彌補(bǔ)這個(gè)缺陷,我們需要技巧來(lái)讓智能手機(jī)高效地運(yùn)行深度學(xué)習(xí)應(yīng)用程序。
介紹
深度學(xué)習(xí)是一個(gè)令人難以置信的靈活且強(qiáng)大的技術(shù),但運(yùn)行的神經(jīng)網(wǎng)絡(luò)可以在計(jì)算方面需要非常大的電力,且對(duì)磁盤(pán)空間也有要求。這通常不是云空間能夠解決的問(wèn)題,一般都需要大硬盤(pán)服務(wù)器上運(yùn)行驅(qū)動(dòng)器和多個(gè)GPU模塊。
不幸的是,在移動(dòng)設(shè)備上運(yùn)行神經(jīng)網(wǎng)絡(luò)并不容易。事實(shí)上,即使智能手機(jī)變得越來(lái)越強(qiáng)大,它們?nèi)匀痪哂杏邢薜挠?jì)算能力、電池壽命和可用磁盤(pán)空間,尤其是對(duì)于我們希望保持盡可能輕的應(yīng)用程序。這樣做可以實(shí)現(xiàn)更快的下載速度、更小的更新時(shí)間和更長(zhǎng)的電池使用時(shí)間,這些都是用戶所欣賞的。
為了執(zhí)行圖像分類、人像模式攝影、文本預(yù)測(cè)以及其他幾十項(xiàng)任務(wù),智能手機(jī)需要使用技巧來(lái)快速,準(zhǔn)確地運(yùn)行神經(jīng)網(wǎng)絡(luò),而無(wú)需使用太多的磁盤(pán)空間。
在這篇文章中,我們將看到一些最強(qiáng)大的技術(shù),使神經(jīng)網(wǎng)絡(luò)能夠在手機(jī)上實(shí)時(shí)運(yùn)行。
使神經(jīng)網(wǎng)絡(luò)變得更小更快的技術(shù)
基本上,我們對(duì)三個(gè)指標(biāo)感興趣:模型的準(zhǔn)確性、速度以及它在手機(jī)上占用的空間量。由于沒(méi)有免費(fèi)午餐這樣的好事,所以我們必須做出妥協(xié)。
對(duì)于大多數(shù)技術(shù),我們會(huì)密切關(guān)注我們的指標(biāo)并尋找我們稱之為飽和點(diǎn)的東西。這是一個(gè)指標(biāo)的收益停止而其他指標(biāo)損失的時(shí)刻。通過(guò)在飽和點(diǎn)之前保持優(yōu)化值,我們可以獲得最佳值。
在這個(gè)例子中,我們可以在不增加錯(cuò)誤的情況下顯著減少昂貴的操作次數(shù)。但是,在飽和點(diǎn)附近,錯(cuò)誤變得太高而無(wú)法接受。
1. 避免完全連接的層
完全連接的層是神經(jīng)網(wǎng)絡(luò)最常見(jiàn)的組成部分之一,它們?cè)?jīng)創(chuàng)造奇跡。然而,由于每個(gè)神經(jīng)元都連接到前一層的所有神經(jīng)元,因此它們需要存儲(chǔ)和更新眾多參數(shù)。這對(duì)速度和磁盤(pán)空間是不利的。
卷積層是利用輸入中的局部一致性(通常是圖像)的層。每個(gè)神經(jīng)元不再連接到前一層的所有神經(jīng)元。這有助于在保持高精度的同時(shí)減少連接/重量的數(shù)量。
完全連接層中的連接/權(quán)重比卷積層中多得多。
使用很少或沒(méi)有完全連接的層可以減少模型的大小,同時(shí)保持高精度。這可以提高速度和磁盤(pán)使用率。
在上面的配置中,具有1024個(gè)輸入和512個(gè)輸出的完全連接層,這個(gè)完全連接層大約有500k個(gè)參數(shù)。如果是具有相同特征和32個(gè)卷積層特征映射,那么它將只具有50K參數(shù),這是一個(gè)10倍的改進(jìn)!
2. 減少通道數(shù)量和內(nèi)核大小
這一步代表了模型復(fù)雜性和速度之間的一個(gè)非常直接的折衷。卷積層中有許多通道允許網(wǎng)絡(luò)提取相關(guān)信息,但需付出代價(jià)。刪除一些這樣的功能是節(jié)省空間并使模型變得更快的簡(jiǎn)單方法。
我們可以用卷積運(yùn)算的接受域來(lái)做同樣的事情。通過(guò)減小內(nèi)核大小,卷積對(duì)本地模式的了解較少,但涉及的參數(shù)較少。
較小的接受區(qū)域/內(nèi)核大小計(jì)算起來(lái)更便宜,但傳達(dá)的信息較少。
在這兩種情況下,通過(guò)查找飽和點(diǎn)來(lái)選擇地圖/內(nèi)核大小的數(shù)量,以便精度不會(huì)降低太多。
3. 優(yōu)化縮減采樣(Optimizing the downsampling)
對(duì)于固定數(shù)量的層和固定數(shù)量的池操作,神經(jīng)網(wǎng)絡(luò)可以表現(xiàn)得非常不同。這來(lái)自于一個(gè)事實(shí),即表示該數(shù)據(jù)以及計(jì)算量的依賴于在池操作完成:
當(dāng)池化操作提早完成時(shí),數(shù)據(jù)的維度會(huì)降低。越小的維度意味著網(wǎng)絡(luò)處理速度越快,但意味著信息量越少,準(zhǔn)確性越差。
當(dāng)聯(lián)網(wǎng)操作在網(wǎng)絡(luò)后期完成時(shí),大部分信息都會(huì)保留下來(lái),從而具有很高的準(zhǔn)確性。然而,這也意味著計(jì)算是在具有許多維度的對(duì)象上進(jìn)行的,并且在計(jì)算上更昂貴。
在整個(gè)神經(jīng)網(wǎng)絡(luò)中均勻分布下采樣作為一個(gè)經(jīng)驗(yàn)有效的架構(gòu),并在準(zhǔn)確性和速度之間提供了一個(gè)很好的平衡。
早期的池化速度很快,晚期的池化是準(zhǔn)確的,均勻間隔的池化是有點(diǎn)兩者。
4. 修剪重量(Pruning the weights)
在訓(xùn)練完成的神經(jīng)網(wǎng)絡(luò)中,一些權(quán)重對(duì)神經(jīng)元的激活起著強(qiáng)烈作用,而另一些權(quán)重幾乎不影響結(jié)果。盡管如此,我們?nèi)匀粚?duì)這些弱權(quán)重做一些計(jì)算。
修剪是完全去除最小量級(jí)連接的過(guò)程,以便我們可以跳過(guò)計(jì)算。這可能會(huì)降低了準(zhǔn)確性,但使網(wǎng)絡(luò)更輕、更快。我們需要找到飽和點(diǎn),以便盡可能多地刪除連接,而不會(huì)過(guò)多地?fù)p害準(zhǔn)確性。
除去最薄弱的連接以節(jié)省計(jì)算時(shí)間和空間。
5. 量化權(quán)重(Quantizing the weights)
為了將網(wǎng)絡(luò)保存在磁盤(pán)上,我們需要記錄網(wǎng)絡(luò)中每個(gè)單一權(quán)重的值。這意味著為每個(gè)參數(shù)保存一個(gè)浮點(diǎn)數(shù),這代表了磁盤(pán)上占用的大量空間。作為參考,在C中,一個(gè)浮點(diǎn)占用4個(gè)字節(jié),即32個(gè)比特。一個(gè)參數(shù)在數(shù)億的網(wǎng)絡(luò)(例如GoogLe-Net或VGG-16)可以輕松達(dá)到數(shù)百兆,這在移動(dòng)設(shè)備上是不可接受的。
為了保持網(wǎng)絡(luò)足跡盡可能小,一種方法是通過(guò)量化它們來(lái)降低權(quán)重的分辨率。在這個(gè)過(guò)程中,我們改變了數(shù)字的表示形式,使其不再能夠取得任何價(jià)值,但相當(dāng)受限于一部分?jǐn)?shù)值。這使我們只能存儲(chǔ)一次量化值,然后參考網(wǎng)絡(luò)的權(quán)重。
量化權(quán)重存儲(chǔ)鍵而不是浮動(dòng)。
我們將再次通過(guò)查找飽和點(diǎn)來(lái)確定要使用多少個(gè)值。更多的值意味著更高的準(zhǔn)確性,但也是更大的儲(chǔ)存空間。例如,通過(guò)使用256個(gè)量化值,每個(gè)權(quán)重可以僅使用1個(gè)字節(jié) 即 8個(gè)比特來(lái)引用。與之前(32位)相比,我們已將大小除以4!
6. 編碼模型的表示
我們已經(jīng)處理了關(guān)于權(quán)重的一些事情,但是我們可以進(jìn)一步改進(jìn)網(wǎng)絡(luò)!這個(gè)技巧依賴于權(quán)重不均勻分布的事實(shí)。一旦量化,我們就沒(méi)有相同數(shù)量的權(quán)值來(lái)承載每個(gè)量化值。這意味著在我們的模型表示中,一些引用會(huì)比其他引用更頻繁地出現(xiàn),我們可以利用它!
霍夫曼編碼是這個(gè)問(wèn)題的完美解決方案。它通過(guò)將最小占用空間的密鑰歸屬到最常用的值以及最小占用空間的值來(lái)實(shí)現(xiàn)。這有助于減小設(shè)備上模型的誤差,最好的結(jié)果是精度沒(méi)有損失。
最頻繁的符號(hào)僅使用1 位的空間,而最不頻繁的使用3 位。這是由后者很少出現(xiàn)在表示中的事實(shí)所平衡的。
這個(gè)簡(jiǎn)單的技巧使我們能夠進(jìn)一步縮小神經(jīng)網(wǎng)絡(luò)占用的空間,通常約為30%。
注意:量化和編碼對(duì)于網(wǎng)絡(luò)中的每一層都是不同的,從而提供更大的靈活性
7. 糾正準(zhǔn)確度損失(Correctiong the accuracy loss)
使用我們的技巧,我們的神經(jīng)網(wǎng)絡(luò)已經(jīng)變得非常粗糙了。我們刪除了弱連接(修剪),甚至改變了一些權(quán)重(量化)。雖然這使得網(wǎng)絡(luò)超級(jí)輕巧,而且速度非???,但其準(zhǔn)確度并非如此。
為了解決這個(gè)問(wèn)題,我們需要在每一步迭代地重新訓(xùn)練網(wǎng)絡(luò)。這只是意味著在修剪或量化權(quán)重后,我們需要再次訓(xùn)練網(wǎng)絡(luò),以便它能夠適應(yīng)變化并重復(fù)這個(gè)過(guò)程,直到權(quán)重停止變化太多。
結(jié)論
雖然智能手機(jī)不具備老式桌面計(jì)算機(jī)的磁盤(pán)空間、計(jì)算能力或電池壽命,但它們?nèi)匀皇巧疃葘W(xué)習(xí)應(yīng)用程序非常好的目標(biāo)。借助少數(shù)技巧,并以幾個(gè)百分點(diǎn)的精度為代價(jià),現(xiàn)在可以在這些多功能手持設(shè)備上運(yùn)行強(qiáng)大的神經(jīng)網(wǎng)絡(luò)。這為數(shù)以千計(jì)的激動(dòng)人心的應(yīng)用打開(kāi)了大門(mén)。
責(zé)任編輯:lq6
-
智能手機(jī)
+關(guān)注
關(guān)注
66文章
18618瀏覽量
183695 -
cpu
+關(guān)注
關(guān)注
68文章
11073瀏覽量
216835 -
gpu
+關(guān)注
關(guān)注
28文章
4937瀏覽量
131139 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7655瀏覽量
90663
發(fā)布評(píng)論請(qǐng)先 登錄
BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

卷積神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言處理中的應(yīng)用
卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較
RNN模型與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的區(qū)別
LSTM神經(jīng)網(wǎng)絡(luò)在語(yǔ)音識(shí)別中的應(yīng)用實(shí)例
探索智能手機(jī)上的生成式AI
Moku人工神經(jīng)網(wǎng)絡(luò)101

關(guān)于卷積神經(jīng)網(wǎng)絡(luò),這些概念你厘清了么~
【飛凌嵌入式OK3576-C開(kāi)發(fā)板體驗(yàn)】RKNN神經(jīng)網(wǎng)絡(luò)-車(chē)牌識(shí)別
FPGA在深度神經(jīng)網(wǎng)絡(luò)中的應(yīng)用
防爆智能手機(jī)如何助力電氣行業(yè)保駕護(hù)航?

評(píng)論