智能手機跑大規模神經網路的主要策略

來源:互聯網
上載者:User

標籤:oss   大小   映像   提取   簡單的   分布   解決方案   相關資訊   最好   

電腦具有高儲量的硬碟和強大的CPU和GPU。但是智能手機卻沒有,為了彌補這個缺陷,我們需要技巧來讓智能手機高效地運行深度學習應用程式。

 

介紹

深度學習是一個令人難以置信的靈活且強大的技術,但啟動並執行神經網路可以在計算方面需要非常大的電力,且對磁碟空間也有要求。這通常不是雲空間能夠解決的問題,一般都需要大硬碟伺服器上運行磁碟機和多個GPU模組。

不幸的是,在行動裝置上運行神經網路並不容易。事實上,即使智能手機變得越來越強大,它們仍然具有有限的計算能力、電池壽命和可用磁碟空間,尤其是對於我們希望保持儘可能輕的應用程式。這樣做可以實現更快的下載速度、更小的更新時間和更長的電池使用時間,這些都是使用者所欣賞的。

為了執行映像分類、人像模式攝影、文字預測以及其他幾十項任務,智能手機需要提示來快速,準確地運行神經網路,而無需使用太多的磁碟空間。

在這篇文章中,我們將看到一些最強大的技術,使神經網路能夠在手機上即時運行。

使神經網路變得更小更快的技術

基本上,我們對三個指標感興趣:模型的準確性、速度以及它在手機上佔用的空間量。由於沒有免費午餐這樣的好事,所以我們必須做出妥協。

對於大多數技術,我們會密切關注我們的指標並尋找我們稱之為飽和點的東西。這是一個指標的收益停止而其他指標損失的時刻。通過在飽和點之前保持最佳化值,我們可以獲得最佳值。

在這個例子中,我們可以在不增加錯誤的情況下顯著減少昂貴的操作次數。但是,在飽和點附近,錯誤變得太高而無法接受。

1.避免完全串連的層

完全串連的層是神經網路最常見的組成部分之一,它們曾經創造奇蹟。然而,由於每個神經元都串連到前一層的所有神經元,因此它們需要儲存和更新眾多參數。這對速度和磁碟空間是不利的。

卷積層是利用輸入中的局部一致性(通常是映像)的層。每個神經元不再串連到前一層的所有神經元。這有助於在保持高精度的同時減少串連/重量的數量。

完全串連層中的串連/權重比卷積層中多得多。

使用很少或沒有完全串連的層可以減少模型的大小,同時保持高精度。這可以提高速度和磁碟使用率。

在上面的配置中,具有1024個輸入和512個輸出的完全串連層,這個完全串連層大約有500k個參數。如果是具有相同特徵和32個卷積層特徵映射,那麼它將只具有50K參數,這是一個10倍的改進!

2.減少通道數量和核心大小

這一步代表了模型複雜性和速度之間的一個非常直接的折衷。卷積層中有許多通道允許網路提取相關資訊,但需付出代價。刪除一些這樣的功能是節省空間的並使模型變得更快的簡單方法。

我們可以用卷積運算的接受域來做同樣的事情。通過減小核心大小,卷積對本地模式的瞭解較少,但涉及的參數較少。

較小的接受地區/核心大小計算起來更便宜,但傳達的資訊較少。

在這兩種情況下,通過尋找飽和點來選擇地圖/核心大小的數量,以便精度不會降低太多。

3.最佳化縮減採樣(Optimizing the downsampling)

對於固定數量的層和固定數量的池操作,神經網路可以表現得非常不同。這來自於一個事實,即表示該資料以及計算量的依賴於在池操作完成:

·       當池化操作提早完成時,資料的維度會降低。越小的維度意味著網路處理速度越快,但意味著資訊量越少,準確性越差。

·       當連網操作在網路後期完成時,大部分資訊都會保留下來,從而具有很高的準確性。然而,這也意味著計算是在具有許多維度對象上進行的,並且在計算上更昂貴。

·       在整個神經網路中均勻分布下採樣作為一個經驗有效架構,並在準確性和速度之間提供了一個很好的平衡。

早期的池化速度很快,晚期的池化是準確的,均勻間隔的池化是有點兩者。

4.修剪重量(Pruning the weights)

在訓練完成的神經網路中,一些權重對神經元的啟用起著強烈作用,而另一些權重幾乎不影響結果。儘管如此,我們仍然對這些弱權重做一些計算。

修剪是完全去除最小量級串連的過程,以便我們可以跳過計算。這可能會降低了準確性,但使網路更輕、更快。我們需要找到飽和點,以便儘可能多地刪除串連,而不會過多地損害準確性。

除去最薄弱的串連以節省計算時間和空間。

5.量化權重(Quantizing the weights)

為了將網路儲存在磁碟上,我們需要記錄網路中每個單一權重的值。這意味著為每個參數儲存一個浮點數,這代表了磁碟上佔用的大量空間。作為參考,在C中,一個浮點佔用4個位元組,即32個位元。一個參數在數億的網路(例如GoogLe-Net或VGG-16)可以輕鬆達到數百兆,這在行動裝置上是不可接受的。

為了保持網路足跡儘可能小,一種方法是通過量化它們來降低權重的解析度。在這個過程中,我們改變了數位表示形式,使其不再能夠取得任何價值,但相當受限於一部分數值。這使我們只能儲存一次量化值,然後參考網路的權重。

量化權重儲存鍵而不是浮動。

我們將再次通過尋找飽和點來確定要使用多少個值。更多的值意味著更高的準確性,但也是更大的儲存空間。例如,通過使用256個量化值,每個權重可以僅使用1個位元組 即 8個位元來引用。與之前(32位)相比,我們已將大小除以4!

6.編碼模型的表示

我們已經處理了關於權重的一些事情,但是我們可以進一步改進網路!這個技巧依賴於權重不均勻分布的事實。一旦量化,我們就沒有相同數量的權值來承載每個量化值。這意味著在我們的模型表示中,一些引用會比其他引用更頻繁地出現,我們可以利用它!

霍夫曼編碼是這個問題的完美解決方案。它通過將最小佔用空間的密鑰歸屬到最常用的值以及最小佔用空間的值來實現。這有助於減小裝置上模型的誤差,最好的結果是精度沒有損失。

最頻繁的符號僅使用1 位的空間,而最不頻繁的使用3 位。這是由後者很少出現在表示中的事實所平衡的。

這個簡單的技巧使我們能夠進一步縮小神經網路佔用的空間,通常約為30%。

注意:量化和編碼對於網路中的每一層都是不同的,從而提供更大的靈活性

7.糾正準確度損失(Correctiong the accuracy loss)

使用我們的技巧,我們的神經網路已經變得非常粗糙了。我們刪除了弱串連(修剪),甚至改變了一些權重(量化)。雖然這使得網路超級輕巧,而且速度非常快,但其準確度並非如此。

為瞭解決這個問題,我們需要在每一步迭代地重新訓練網路。這隻是意味著在修剪或量化權重後,我們需要再次訓練網路,以便它能夠適應變化並重複這個過程,直到權重停止變化太多。

結論

雖然智能手機不具備老式案頭電腦的磁碟空間、計算能力或電池壽命,但它們仍然是深度學習應用程式非常好的目標。藉助少數技巧,並以幾個百分點的精度為代價,現在可以在這些多功能手持功能上運行強大的神經網路。這為數以千計的激動人心的應用開啟了大門。

 

如果你仍然好奇,請查看一些最好的面向移動的神經網路,如SqueezeNet或MobileNets。

智能手機跑大規模神經網路的主要策略

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.