毫無懸念地,神經網絡和人工智能是目前最炙手可熱的科技辭藻,它們應用廣泛,在各種你喜歡或者不喜歡的社交平臺上助力識別圖像,在智能音箱上實現語音識別, 在智能手機里擔任數字語音助理,神經網絡比人類有更好的識別模式能力,這意味著它們現在可以幫助醫生識別癌癥,幫助農民提升產量,并在人流中識別特定人物,不久,它們會很快應用到注入安全攝像頭這樣的嵌入式設備中,并且通過臉部識別來解鎖手機,這樣的手機未來會越來越多。
然而訓練神經網絡需要強大的硬件,同時耗費大量的時間。此外在云端強大的服務器上運行的應用不能簡單的就移植到移動設備上來,因為它們在計算能力和電池方面有限制。
幸運的是,在訓練一個神經網絡,“離線的”和可以實時識別新對象的訓練模型(稱為“推理”)之間是有區別的,例如,如果一個神經網絡設計成用來識別過往的圖片,例如一只貓,那么就需要從數千張貓的圖像數據庫中了解到貓是什么樣的。 經過適當的訓練,當你給一個有神經網絡的設備展示貓先生的圖片時,它就能夠認出貓,即使它以前沒有見過貓,這就是推理。
在PowerVR Series2NX NNA平臺上運行的實時推理Demo
因此當電力和電池壽命受限時就如同移動設備,任何創建神經網絡應用的工程師都想以這種方式來訓練它,盡可能地優化推理階段,這主要是通過降低計算復雜度和帶寬來實現的,同時也可以大大節省功耗。
在今年年初舉辦的嵌入式視覺會議上,Imagination公司視覺和AI部門的首席研究工程師Paul Brasnett發表了演講,你可以在EVA網站上查看完整內容,但你可能需要完成注冊流程。
那這是如何實現的呢?從本質上講,優化神經網絡其實就是不斷剔除冗余,讓神經網絡簡單、易于執行。這與數字圖片從未壓縮狀態轉變為格式化如JPG圖片一樣,在概念上是相似的,如果壓縮算法好,那么在圖片質量上幾乎沒有明顯區別。從神經網絡角度來看,圖片的質量等同于推理精度,經過合適的訓練,優化后的神經網絡在尺寸和復雜度方面都會大大的降低,與此同時還能保證推理操作有較高的精度。
當然并不是所有的網絡都是相同的,第一步則是選擇應用適合的最好的神經網絡模型,畢竟如果不是最合適的,即使再怎么優化也不會幫助我們獲得正確結果。
消除,然后減少
假設你有適合自己類型最佳的神經網絡模型,優化過程包括兩個關鍵階段——消除,然后減少。
首先你想降低神經網絡操作的次數,然后你想進一步減少各種操作的計算成本。
在任何給定的網絡中都有兩種類型的數據貫穿整個網絡,權重(系數)和“激活”數據在任何時刻都可能被處理,因此我們需要的就是盡可能的消除權重和相關數據的依賴。權重系數表示神經網絡在網絡中識別特征的重要性,它將一張圖片劃分為不同的分層。因此如果權重系數被設置為零,那么這條數據通路就可以從卷積網絡中去掉,因此神經網絡系統就可以運行得更快。類比我們進行的數字圖像壓縮其實就是刪除圖像中的冗余信息。
這個消除的處理過程需要使用兩項技術:裁剪和正規化,然后降低剩下的計算成本,這也是需要量化操作來實現的。
網絡裁剪
裁剪網絡的目的是增加權重系數的稀疏程度,我們可以將其看作是移除連接數或者將權重設置為零——最終的效果都是一樣的。
為了成功的進行的裁剪,我們有必要從核心功能的角度出來移除對提升精度不顯著的權重參數。有兩種方法可以解決這個問題,雖然都可以實現相同的效果但是實現方法略有不同。第一種是如果權重的值低于某個閾值那么它將自動被設置為零,從而消除掉。第二種方法是將一小部分權重值設置為零。
這個階段的關鍵好處是一旦權重值被設置為零,那么就相當于永遠消失了。
然而盡管裁剪是一個好的開始,但是它最終的影響也意味著降低你的任務系統的性能,我們需要做些什么來恢復性能,因此我們增加了額外的訓練階段。
提煉和規范化
把知識從一個網絡轉移到另一個網絡,這是通過“提煉”來完成的,我們有原始的“未壓縮的”浮點網絡,它已經被訓練成用于一個給定任務,我們將它與我們的裁剪的網絡進行比較 – 目的是讓裁剪網絡的“softmax”輸出更精準,與原網絡想匹配,通過不斷的裁剪和訓練,提升網絡的精度。
我們也可以實現規范化,它可以說是深度神經網絡(DNN)訓練過程中一項關鍵工具,它是增加一項約束,是訓練后的網絡遞歸到零。
如下圖所示,我們可以看到原始的權重參數值,經過L1級規范化和進一步裁剪操作后,在觀察下兩者之間的對比。
在消除數據和數據相關操作之后,我們如何才能降低這些數據的相關成本呢?
這主要是通過降低每種權重參數的位數來解決的,我們開始采用的是32位全精度浮點數,我們可以自定義設置目標位寬,并重新進行訓練,量化處理后會隨機返回選擇的權重子集。這意味著隨著時間的推移,我們將權重值不斷的進行量化,使得網絡不斷的適應這種情形,最終,我們會將權重值固定在最接近的量化值。
我們選擇的目標位寬比32位要少,這樣會明顯降低每個推理操作的功耗,尤其如果你降低到4位,那么選擇的硬件平臺都會支持。
例如,我們最近推出了PowerVR Series2NX NNA,支持這種精簡的位寬,可以設置為4位甚至是不規則的5位,這區別于傳統的DSP和神經網絡加速器。我們要注意到在神經網絡加速器系統中數據是被打包和優化后存儲在內存中的,雖然內部管道是高精度的,但是在每個處理分層上它也是支持可變的數據位寬,因此你可以真正的進行優化訓練實現最大的效率和精確度。
進行網絡訓練時,開發者可以選擇量化到與權重相同的位寬深度,也可以高于或者低于權重的活躍精度,激活數據相比權重有更大的位寬明顯會帶來更好的效果。
從上圖我們可以看出當將稀疏度提升到90%時,在進行訓練是非常有效的,能夠確保保持前5的分類精度。
然后我們在觀察下權重從32位降低到5位的變化過程,下降到8位時雖然沒有進行重新訓練也并沒有帶來較多的性能損失,當再繼續降低時,如果我們想在嵌入式設備中使用時,那么進行重新訓練給帶來很大的好處。
總結
從上文我們可以看出,優化神經網絡實現高效的推理并不是一件輕松的事情,但從降低帶寬和功耗角度來看,它會給我們帶來很多好處。PowerVR Series2NX NNA提供的流程工具將復雜的任務進行了精簡,提供一步處理過程快速構建神經網絡應用原型,然而借助本文提到的優化方法會讓我們充分利用選擇的硬件平臺,這對于移動和嵌入式平臺至關重要。
雖然我們可以使用GPU,但是專用的加速器比如Series2NX將能夠提供更高數量級性能,這也使其成為目前市場上僅有的神經網絡加速器IP。它能夠滿足未來下一代AI和視覺應用強大的性能需求,而且還可以移植到嵌入式平臺完全可以應用到便攜設備上。
評論