华为诺亚实验室:端侧AI模型的技术进展与未来|量子位·吃瓜社
主講人 | 王云鶴 華為諾亞實驗室
量子位編輯 | 公眾號 QbitAI
近兩年來,端側AI在技術和應用方面都取得了快速發展。相較于云側AI,端側AI具有低時延、保護數據隱私與安全、減少云端能耗、不依賴網絡穩定等顯著優勢。
但端側AI也面臨巨大的挑戰,比如計算需求量大、對實時性要求高,受限于運行環境、內存、存儲空間等。面對這些挑戰,端側AI取得了哪些技術進展?未來將如何落地應用?
5月13日,量子位·吃瓜社第9期線上活動中,華為諾亞方舟實驗室技術專家王云鶴直播分享了端側AI模型的最新技術進展。
主要分享內容包括:
端側AI模型的背景介紹
如何對神經網絡模型進行壓縮加速
如何對神經網絡進行架構搜索
如何保護用戶隱私等
文末附有直播回放鏈接、PPT獲取方式;以下為量子位·吃瓜社整理的云鶴老師分享的內容:
大家好,我是王云鶴,2018年博士畢業于北京大學,現在在華為諾亞方舟實驗室,我主要研究的方向是關于端側AI模型的優化和加速等。
今天晚上很榮幸參加量子位·吃瓜社的線上活動,有機會給大家做一些相關工作的分享。我今天講的內容主要是關于端側AI模型,包括我所在公司和學術界的一些新的進展。
今天的分享,我將首先介紹端側AI模型的相關背景;然后分三個框架介紹最新取得的一些技術進展,包括如何進行模型的壓縮和加速、如何進行架構的搜索、如何保護用戶的隱私數據;然后給大家展示一個案例,是華為在端側AI的算法與昇騰芯片的結合;最后是一點總結,包括我們用到的算法、未來的計劃。
端側AI模型背景介紹
提到端側AI,我們主要做的是深度神經網絡模型的架構優化,以使它可以在端側取得更好的表現。先來看一下深度神經網絡架構的發展情況。
上圖是LeCun在1998年提出的LeNet,是一個五六層的神經網絡,搭建出一系列手寫字體的數字識別。這是第一個可商用的神經網絡,僅有5個卷積層,51K參數量,速度也非常快,被用于很多手寫字體的識別場景。
上圖是深度神經網絡框架的演變。從1998年開始LeNet手寫字體識別之后,到現在大家討論的深度神經網絡,中間經過了非常漫長的沉寂期。
2012年, AlexNet在ImageNet大規模物體識別的競賽上得到冠軍。它當時的實驗結果遠超其他基于傳統的手工設計特征的精度,雖然AlexNet在我們現在看來是一個比較小的模型,但當時是在兩塊NVIDIA GPU上面訓了6天才訓完。
2014年提出了更多不同的模型,包括GoogleNet,VGG等非常深非常大的神經網絡。大家也逐漸把深度神經網絡應用到更廣泛的領域,如SR-CNN圖像超分辨率神經網絡,GAN圖像生成對抗模型等。
2015年進一步把這些深度神經網絡做了更深遠的高層語義的推廣。如Fast R-CNN目標檢測網絡,ResNet深度殘差神經網絡,都是在這個時間段集中的提出的。
2017年取得了突破性的進展。如AlphaGo利用強化學習深度神經網絡,超越了人類圍棋選手冠軍;MobileNet,NAS也是在這個時間提出的。
到2018年,更大規模的BERT預訓練模型在NLP任務上表現出非常好的性能,Capsule Net等相繼被提出。
現在大家仍在探索,到底什么樣的神經網絡是比較優的架構,產生更好的性能的同時,還能帶來更好的用戶體驗。
前面提到了多個深度神經網絡,雖然不斷取得了更好的表現,但是把模型從云端遷移到端側時,會面臨很多問題。
首先是隱私和安全的問題,對于訓練好的模型,用戶數據不可公開時,我們就無法使用這些AI模型。
第二是備受關注的時延問題,云上的AI模型都具有非常好的性質,但是它的計算量相應的也非常龐大。當把它遷移到計算能力較小的端側AI設備上面,時延是一個急需優化的問題。
第三點是可靠性,雖然端測設備可以把我們所需要的任務和數據傳到云上做推理,但有時候與云端互聯的網絡可能并不穩定。比如自動駕駛,在一些無人區或者地下車庫時,由于網絡不可靠,我們就需要在本地推理AI模型。
最后是能耗的問題,近兩年受到的關注也非常大。AI模型在推理過程中產生的計算量非常大,如果放到端側移動設備上面,將產生非常大的能耗。尤其是在AIoT應用下,很多端側處理器的電池容量比較小,這種大量的深度神經網絡的計算就會導致設備的使用周期打折扣。
如何對神經網絡模型進行壓縮加速
MIT的韓松老師在2015年提出了一些觀測:預先訓練好的AlexNet、VGGNet模型中,去掉大約90%的參數,它的精度還是無損的。因此韓松老師開始提出一些模型壓縮的技術。
如上圖,一個預先訓練好的神經網絡的模型,先識別出其中一些不重要的權值,然后對它進行FineTune以保證它的精度。接下來通過權重的量化、熵編碼,得到一個非常小的壓縮文件。當時最好的結果可以達到40倍以上的模型壓縮比例。
這種方法唯一的缺點是,雖然可以構建出非常稀疏的神經網絡,但它的計算是非結構化的,它的稀疏是需要我們一些特殊的技術去幫助實現的,很難在大規模的GPU運算單元上去做加速。接下來介紹下針對這個問題華為做了哪些工作。
CNNpack:在頻域上的模型壓縮技術(NIPS 2016)
第一個工作是我們在NIPS 2016上發表的,是在頻域上做模型壓縮的技術。如下圖,第一行是算法對模型的神經元參數做壓縮的過程。這個圖是對當時的卷積神經網絡的可視化。這些卷積核本質上還是要提取自然圖像里的一些重要信息,如斑點,條紋等。
所以我們提出利用DCT做模型壓縮。首先把卷積核通過DCT的變換產生頻域系數,然后在頻域上做K-Means聚類,挖掘卷積核與卷積核之間的冗余信息,最后利用如L1做通過權值最小的剪枝、量化、差分編碼,得到壓縮模型的文件。
第二行是模型加速。壓縮完成之后,我們不希望壓縮后的模型在線上推理的時候還要解壓縮。所以同時把輸入的數據,利用DCT的變化去產生一系列的在頻域上的DCT的積,這里面的每一個特征圖就可以理解成左側的輸入數據跟具體的相應的DCT的積去做卷積計算,產生中間的特征圖。然后跟上面我們在頻域做過稀疏的這些卷積核的系數,做一個加權的線性組合,就可以產生壓縮后的這一層的特征圖。
這里有一個有意思的現象,由于DCT變換是正交變換,所以我們在空域上用原來的卷積核跟原來的圖像去做卷積計算生成的特征圖,等價于在DCT頻域上做卷積計算,這樣就可以保證我們在頻域上也能實現模型壓縮和加速的技術。
上圖下方是當時的一些實驗結果。從容量上來看,這種模型壓縮的技術效果很顯著,包括AlexNet,VGGNet,ResNet都具有非常好的壓縮比和加速比。但是也有缺陷。雖然呈現出了內存的下降和理論上計算復雜度的下降,但是在實際使用過程中,很難把加速比換成線上推理速度的加速。
基于對抗學習的知識蒸餾方案(AAAI 2018)
除了上述對預訓練好的卷積神經網絡的卷積核做剪枝的技術,另外一個技術路線是用較大的教師神經網絡幫助較小的學生神經網絡去學習,希望小的學生神經網絡可以達到跟大的教師神經網絡同樣精度。
通常我們都會把學生神經網絡設計的比較小,所以如果它的精度可以跟教師神經網絡保持一致的話,學生神經網絡的推理速度就可以達到較好的水平。這種模型壓縮的思路最早是Hinton提出的,幫助我們更好的學習一些更小的、精度還有所保持的神經網絡。
華為提出了一種基于對抗學習的知識蒸餾方法,顧名思義,就是在上述教師和學生神經網絡知識蒸餾的過程中,引入了GAN技術。具體來說,在整個PipeLine里面,我們把需要做訓練的數據集同時輸入給教師和學生這兩個神經網絡,在得到他們的特征時,加了一個判別器。目的是同時把教師和學生神經網絡的特征喂到判別器里面,希望判別器學到最后分不出教師和學生的特征,就會把同一類的特征混到一起,幫助提升學生神經網絡的精度。
進行自動剪枝和量化(SIGKDD 2018)
第三個工作是對模型的冗余神經元做篩檢。我們提出了一種進化的自動剪枝和量化的策略,發表在SIGKDD 2018上面。前面講的都是通過人為的先驗知識去識別卷積神經網絡中有哪些是冗余信息,比如有一個神經元比較小,認為它對輸出的特征圖影響比較小,我們就把它去掉,這樣它的精度一般也不會有損失。這種方法的缺陷是,我們需要逐層去做神經網絡剪枝。
因此,我們提出了一個新的概念,把神經網絡的剪枝問題,當做成全局01規劃的問題。我們把預先訓練好的深度神經網絡的每一層每一個卷積核都做01編碼,得到一個長的01編碼字符串。在進化算法的過程中,就會產生一系列的種群。下圖展示了進化算法的實驗過程:
左側每一個紅點都代表了我們在搜索過程中所產生的一個神經網絡;橫坐標代表算法執行過程中所需要的迭代次數;縱坐標是適應值的函數,在這里面我們用到了個體網絡在評價過程中精度的值和剩余的神經網絡參數量的衡量指標。我們希望它的精度越高越好,希望網絡稀疏度越高越好。指標越高,我們就會得到一個更小、精度更高的網絡。
從可視化的結果看迭代過程,在前幾個迭代過程中,網絡的精度非常低,但是它的冗余度比較高。通過進化算法的逐漸迭代,中間的一些網絡會產生更好的表現,但是模型相對還是比較大。在最后的一個優化截止之后,我們得到了一個非常小的網絡模型,只有103kb,且最終的精度是99.2。這是一個在MNIST上的非常小的網絡,它的BaseLine是1.5G的模型,通過進化算法的優化,差不多可以達到15倍的壓縮比。
這種卷積核剪枝跟剛才講的那種權值剪枝又不一樣。由于我們在卷積核剪枝做完之后,有一些神經元直接被剪掉了,就可以直接梳理出比較好的緊致的神經網絡架構,我們用這種方式做出來的神經網絡可以直接拿到實際過程中,產生很好的加速效果。
實際應用中做一些項目和產品時會有更多的需求,比如說我們需要對神經網絡的權重和激活函數做一些量化操作,然后這里面我們也會引入一些遺傳算法做搜索。好處是我們可以把這種帕累托前沿在搜索過程中同時去輸出。用戶就可以根據自己的傾向,比如說模型體量更小但是精度略低,或者中等體量但是精度更高。
上圖是卷積核剪枝的結果,同時可以輸出帕累托前沿。這是一種比較簡單、好用的技術,在實際項目中我們經常用到。
針對生成模型的協同進化壓縮算法(ICCV 2019)
這個工作是自動剪枝和量化的延續。在此之前,大量深度神經網絡的模型壓縮算法都是在討論如何在ImageNet、圖像識別等任務上做壓縮和加速,很少討論到如何對生成模型做壓縮。
因此我們就提出了協同進化壓縮算法,幫助我們把預先訓練好的模型做優化,比如CycleGAN。我們把預先訓練好的生成器里的卷積核做01編碼,0是要保留的,1是要被去掉的。同時由于CycleGAN的原生結構同時要維護兩個生成器,所以我們的算法里同時維護了兩套種群。兩套種群的好處是,我們在整個CycleGAN的結構優化過程中,下一次迭代的生成器A就可以用到上一次迭代里面,找到最優的生成器B的結構,幫助我們做迭代和交互。經過不斷迭代直到算法收斂時,就會同時得到A、B兩個生成器,同時具有原來的網絡性質,并且整個網絡的計算量、計算代價都下降了。
在這個工作中,我們提出了用于壓縮GAN的一些指標。比如說這里會有一個關于判別器的 loss,就是我們期望壓縮后的GAN生成的一些圖像,放到原來的判別器里,跟原來的真實圖像還是不能區分的,就是說我們還是希望盡可能多的保持圖像生成能力。
右上角是一些可視化的結果,第一個是完成的馬到斑馬的結果,左側是輸入的圖像,右側是原生的CycleGAN輸出的斑馬圖像。如果我們用傳統的模型壓縮技術,去對這個生成器做剪枝的話,可以看到馬到斑馬的任務沒有辦法保持好的效果了,生成的圖像質量非常差。
右下角是CycleGAN在六個數據集上的壓縮和驗證結果。可以看到在實際上我們都可以獲得6.8s到2.1s的實測推理速度。這里大家要注意一個問題, CycleGAN的模型并不大,算上壓縮比之前的模型大小只有40G,但是FLOPs會非常大,而 FLOPs的計算跟輸入圖像和每一層的特征圖的尺寸是強相關的。這種圖像生成模型的特點是輸入的圖像是多大,輸出的圖像一般也是那么大,甚至會更大。中間特征圖的一些密集的計算就會把FLOPs帶的非常高。因此這樣的模型加速算法可以把CycleGAN的模型大小、FLOPs計算量都提升4-5倍。
我們還發現一些有意思的規律。由于CycleGAN的設計是兩個生成器具有同樣的結構、同樣的參數量,但是通過這種協同進化壓縮會產生不一樣的地方。最后一行的數據集是街景圖與語義分割圖的轉化,可以看到在A2B的任務上獲得了更大的壓縮比,但是在B2A上就達不到如此高的壓縮比。原因可能是從真實的街景圖到像素圖的任務是相對簡單的,所以它所需要的參數量和計算量都會相應減少。通過這個發現,希望對未來GAN的設計有一些啟發的意義。
高效的單元和結構設計
前面講的都是關于如何對預先訓練好的模型做優化裁剪、線上加速推理。除了怎樣去除原來的冗余信息,另外一個技術路線是如何設計高效的單元結構,我們做了很多嘗試。
華為在2018年提出了多用卷積核,發表在NeurlPS上。我們發現卷積核的參數量非常多,但是它產生的特征并不多,所以我們的思路是,如何利用預先設定好的卷積核參數產生盡可能多的特征。
在這個工作里,以5×5的卷積核為例,我們會做三次卷積計算,即5×5做一次,3×3做一次,1×1再做一次,那原來的5×5卷積核就可以產生三個特征。原來一個神經網絡需要三個特征,也就是說需要三個卷積核,現在只需要一個卷積核。通過這樣的參數共享,就可以減少原來神經網絡架構設計時所需的參數量和大量的神經計算。
同時我們再把空間上多用的卷積核做擴展,在通道上引入步長的概念,產生更多的特征。通過卷積核的復用,產生更高效的神經網絡設計。
右側是多用卷積核的擴展。我們把全精度的神經網絡卷積核,通過邊界Mask產生子卷積核,然后復用原來的全精度的參數。但是它是用更簡單的一比特的參數量產生的,它的計算也可以通過這樣的方式做一個篩檢。
這是華為在ICML2019上提出的樂高卷積核。具體做的事情跟樂高很像,如上圖,正常的卷積核就是上方這些不同顏色的長方體,通常都是通道數很長的卷積核。而在樂高卷積核里,我們會生成一些更小的卷積核,其通道數都遠遠小于原來構建時所需要的通道數。我們在深度神經網絡的學習的過程中,不學原來的那些較長的卷積核,而是學習比較小的卷積核和小卷積核在相應位置的排列組合。如圖所示,通過學習小卷積核的排序和權值,整個網絡的計算量和所需要的參數量就能得到一個非常大的優化。
下方是在實際計算中如何使用樂高卷積核,以幫助我們在線上做一些推理。根據樂高卷積核,我們把輸入數據x做一個拆分,逐一做出它的特征圖,最后我們再根據上面學到的排列組合以及拼接方式,把它們合到一起產生輸出。
這一部分我想分享的是,除了現有的一些神經網絡架構,其實還有更多的算子值得我們去探索。谷歌也在不斷的提出一些新的操作,比如說DepthWise等。雖然這些工作在現有的一些推理平臺上面很難達到實際的壓縮和加速,但是我認為這些探索對未來的神經網絡架構設計也有重要意義。
GhostNet:業界性能最好的端側AI架構(CVPR 2020)
沿著剛才講的路線,我們在不斷嘗試產生更好的神經網絡架構。在今年的CVPR上,華為提出了GhostNet。在沒有任何額外的訓練技巧,包括學習率、數據擴充等情況下,GhostNet的性能是比較不錯的。
我們前期通過對ResNet、VGG以及常見的神經網絡架構等大量的觀測發現,同一個數據輸進去,特征和特征之間的冗余度非常高,經常會出現一些很相似的特征。那么這些很相似的特征能否不通過如此大量的卷積計算去產生,而是通過更簡單的變化去產生?
GhostNet的思路是,假如輸入的通道是c,正常的神經網絡它需要的輸出通道數是n,但我們把卷積核的通道數通過一個更小的m表示,在具體的實現里面m=n/2。這里產生的特征圖直接喂到輸出層之后,剩下的這些特征也是通過這m個通道通過一些簡單的變換產生。具體實現時,由于我們主要的目標還是在CPU上產生更好的結果,所以這里用到了DepthWise來代替大量的計算,就構建出了這樣的架構。
左下角是一個具體的實驗結果,當時GhostNet高于MoblieNetv3。在同樣的FLPOS的情況下,精度提高差不多0.5-1個點。實驗中我們把這些模型放到端側設備上,這里我們取了一個Kirin980CPU的測速,可以看到雖然增加了很多DepthWise的操作,但是這個操作在CPU上是非常友好的,在堆積了一些GhostNet模塊之后,取得了非常好的加速效果。藍線也是我們自己復現和測試的MobileNet,可以看到在同樣精度下,GhostNet加快10-15%的實測效果。右側是把GhostNet用于目標檢測上,也產生了更好的結果。
AdderNet:用加法替代乘法的深度神經網絡(CVPR 2020)
大量的模型壓縮算法中,壓縮的都是卷積神經網絡里所必須的乘法計算。我們的想法是,如果能把乘法替換成加法,它所帶來的意義以及能耗下降的指標,是我們現在所想不到的。
在這個paper里,我們提出卷積的本質也是一種度量的函數,它度量的是特征與卷積核之間的余弦相似度。通過把最后的神經元約束到兩個的時候,可以做出很好的特征可視化,左側的是加法的,右側的是乘法的。可以看到乘法的特征都是成放射狀的,分類器就會根據不同特征的角度做對比,做出每一類的區分。加法的分類器會根據輸入數據的類別中心來做區分。
用公式表示這個觀測,原來是輸入的數據x跟卷積核數據逐位做點乘,然后求和;而在加法神經網絡里它就變成另外一種形式,是輸入數據x跟卷積核的數據逐位相減,取絕對值,然后再取負數(取負數的目的是為了跟卷積一樣,卷積時當x完全等于f的時候,這樣的東西是最相似的)。同時我們也配套給這些特征做了BN、ReLU等操作,來保證整個神經網絡的訓練,另外還運用了學習率調整、梯度clip等訓練技巧。
右側是在圖像分類上的驗證,性能基本上跟原來的神經網絡一致。在ImageNet上面,結果是我們在ResNet50上跟Baseline的乘法神經網絡相比,它的精度損失Top5有1.2左右的差距。在我們最新的結果里,我們通過一些額外的訓練技巧優化,這種加法神經網絡的精度是要比乘法神經網絡的精度高一些的。
這里也跟BN做過對比,因為這樣的加法計算,其實等價于權重是1比特,激活函數是32比特的計算。這時就會產生另外一個問題,32比特的加法的能耗會比較高。我們最近在做的工作是,把這里面所有的加法的參數、激活函數都換成8比特,得到的精度基本上跟之前保持一致,而且降低了能耗。
我們希望通過加法替代乘法的思路和結果,去改變現有的AI體系框架,實現能耗更低、性能更好的目標。彈幕有同學問開源,我們已經把一些推理的代碼、簡單的訓練技巧公開了,整個的訓練技巧我們爭取兩個月內把開源都做好。
如何對模型架構進行搜索
接下來要分享的是近兩年比較熱的模型架構搜索。神經網絡架構搜索(NAS)概念是谷歌在2016年提出來的,也是用進化算法做種群的概念。把大量的神經網絡block和常用單元做了一個堆疊,然后通過進化算法的概念做種群的繁衍和演進。
前面是一些非常簡單的網絡,精度也比較低。通過進化算法,針對精度很高的大的網絡做出搜索。由于谷歌的計算資源還有相關的人力投入,現在我們看來谷歌的NAS技術、AutoML技術是比較領先的,以及谷歌EfficientNet、EfficientDet等在不同任務上搜索出來的神經網絡框架都比較好。
基于連續進化的神經網絡架構搜索算法(CVPR 2020)
先分享一個不一樣的概念,在大多數的論文里大家report主要還是以FLOPs、mAP為主,但是這種理論的計算復雜度跟在公司實際應用中模型的實測速度相差甚遠。舉個簡單的例子,如果我們搞了一個DenseNet,把DenseNet所有的卷積核都去掉,但是把Concat,Short-cut等保留,然后測試它的實際的速度還是很慢的。
因此我們提出了這個概念,第一步先做一個硬件在環,作為壓縮的模型搜索的工具,搜索指標不再是用理論上的計算復雜度,而是實際的模型下發到手機上的推理速度,然后把這個指標返回來,去做模型優化的指標。通過這樣的端云協同,就可以把最適合我們當下硬件的模型搜出來。這里面也有一些技術細節,這個算法可以繼承我們在上一次搜索中得到的架構的一些參數,每次都更新帕累托前沿上的一些架構和參數,通過這個方式可以在一個GPU上都搜索出來。
跟其他的模型相比,這個結果還是不錯的。同樣的搜索空間下,我們搜索得到的模型會比相同精度用DARTS算法搜索出來的模型快上一倍(這里不是指訓練的速度,而是搜出的模型的推理速度)。通過硬件在環的思路,我們就可以把搜索得到這個模型部署到具體的設備里面,從而達到一個更好的效果。這也反映了,理論上的算法都跟實際的推理速度相差較大。所以在實際的工程項目里,我們都會把AI模型的實測速度當成一個比較重要的指標去做。
輕量的超分辨模型架構搜索(AAAI 2020)
現有的大量NAS算法都是在分類的任務上去跑的,關注底層視覺的模型并不多。
因此提到用AutoML的思路來產生一些更好的模型,這里面對比的CARN算法是當前比較好的超分模型。這里面我們提出了幾個比較適用于SR模型的block,然后通過block的組合、連接、設計等做算法的搜索,產生了更好的適用于超分網絡的模型。
在標準數據集上的驗證結果是,比SOTA超分模型的PSNR高0.5個db左右,推理速度快0.2秒。這200毫秒在用戶實際拍照時是能感知到的,推理時間越長,用戶的體驗就會越差。
底下是一些具體的可視化結果,原圖是一張標準的高清圖,在同樣FLOPs、模型大小等約束下,通過上述算法搜索得到的效果可視化要好于其他的算法。這個論文發表在今年的AAAI上,大家可以去看里面的細節,我們也會在5月底開源。
二值神經網絡的等價性問題(ICCVw 2019 Neural Architects)
我們對AutoML還做了更多探索。這個工作是對二值神經網絡的等價性做了一個搜索。
大家都知道,1比特神經網絡的精度不是很好,但是具有非常好的能耗、速度、模型大小。我們可以把大量的全精度神經網絡的密集計算轉化成一種1比特的比較簡單的計算。那如何開發具有很高精度的1比特神經網絡,是大家一直很關注的問題,在這個方向的論文也比較多。
這個工作前置的觀測就是,如果我們把1比特神經網絡的寬度做出調整,從1倍調整到2倍、4倍、8倍,發現到4倍的時候,1比特神經網絡精度,也就是它在ImageNet上的accuracy可以逼近甚至超越原來的全精度32比特的神經網絡。繼續擴展,它還會產生更好的結果。
我們在這個方向上做了一個嘗試,把1比特神經網絡的寬度作為一個編碼信息,然后用進化算法做搜索,右上角是搜索得到的結果。我們可以調整1比特神經網絡的寬度,去產生精度更高、計算復雜度可控的實驗的結果和現象。這個工作的實用性和意義還蠻大的,現在也有一些人關注,也在華為的一些實際項目中用到了。
如何保護用戶隱私
接下來要分享的是,我們在做這些模型壓縮、加速、搜索的時候,如何去保護用戶的隱私。學術界可能不是很關心這個問題,因為很多訓好的神經網絡都是采用了一些公開的數據集。但在實際應用中,涉及到隱私的端側App就會非常多,包括人臉解鎖、語音助手、指紋識別、一些娛樂APP的應用,基本上都需要用戶實時的采集一些自己的隱私數據去完成訓練。如果我們想要獲取這些隱私數據,用戶很可能會感到焦慮。比如之前比較火的一鍵換臉的軟件,面臨的隱私問題也受到很大的關注度。
但是如果用戶在本地訓出的模型,比如人臉識別解鎖,體驗不好、或者人臉解鎖比較慢,想讓我們把他的AI模型做一個速度優化的時候,但他不想給我們人臉,只想把他自己的訓好的AI應用給我們,這種情況下怎么去做一些模型壓縮和加速?我們提出兩個解決方案。
第一個方案是左下角的Data-Free方案,是不需要任何訓練數據集的模型壓縮技術。我們把用戶給到的網絡放在這里,網絡的結構、權值信息是未知的,我們只知道網絡的輸入接口和輸出特征是什么。在這個方案里,我們有了這樣的一個Teacher Network模型,就會有一個想要的Student Network模型,可以根據我們預先需求的速度、大小、能耗等設計好。然后在前面接上一個生成器,把輸入的隨機信號喂到生成器里面,把生成的圖像給到Teacher Network做出信息的提取,并且希望生成的數據在Teacher Network里表示出非常好的性質,這樣的話我們就認為它是比較符合原始的Teacher Network所需要的訓練數據集的樣子。
有了這個生成器和生成的圖像,它的label就是Teacher Network所標記出來的,這樣的話就可以構建出一個我們想要的數據集。通過這樣的方式,再結合Teacher-Student的蒸餾方式,去幫助我們學習小的學生神經網絡,就可以產生很好的壓縮結果。
第二個方案是上圖右下角的PU方案。如果用戶只愿意給我們一點點數據,比如說5%的數據,這時我們怎么更好的完成壓縮任務呢?這里提出了PU Learning的方式,幫助我們在云上找到我們想要的數據。因為云上通常都有大量的未標注數據,在云上加上一個PU分類器,結合用戶給到的一小部分數據,我們就可以獲取到對這個任務有用的一些數據。再用原來的Pre-trained Network在這些數據集上做模型的壓縮和加速,結合知識蒸餾等,就可以獲得一個很好的壓縮結果。
無需訓練數據的壓縮方(ICCV 2019)
首先我們來看無訓練數據壓縮方法的可視化結果。右上角是手寫字體數據集,我們有一個訓好的神經網絡,通過Data-Free learning就可以把它每一類的數據做一個模擬。由于這個數據集其實比較簡單,所以會產生一些圖像的紋理信息。右下角是我們在一些人臉數據集上的結果,由于機器識別時關注的不是整張圖,而是人的眉毛、眼睛等特征,所以生成時就產生了一些不一樣的紋理。
實驗結果說明,用這種方案去學習Student Network在CIFAR-10和CIFAR-100上都達到了比較好的結果。比如原來的Teacher Network在CIFAR-10是94.85,但是如果我們用正態分布的噪聲作為原來數據的替代,它的精度是非常差的,因為它可能就會直接被陷入到某一類的識別,Student只能學不好了。
我們這里提到了alternative,把CIFAR-10和CIFAR-100做交換,用CIFAR-100的去代替原來CIFAR-10的數據,然后學出來的精度是90.65。雖然這兩個數據集基本上是同源的,并且很像,但由于沒有原來的標注信息還是學得不夠好。Data-Free的思路可以把Student Network學到92.2的精度,它跟Baseline神經網絡精度差兩個點左右,差距也是比較大的。這個工作也是希望給做模型壓縮、加速的同學提了一個新的思路,如何在做一個端側AI框架時更好的保護用戶隱私。
在云上的PU壓縮方案(NeurlPS)
PU是指根據給定的數據,去識別無標簽的數據集里哪些是正樣本,哪些是負樣本,在大量的未標注的數據集里挑出我們想要的、對我們任務有用的數據。
云上PU壓縮大概的算法執行過程是:首先通過PU的方法挑選出與用戶給定的數據集相關的圖像,同時也會排除一些不重要、看起來不相關的數據,由于這里利用了一小部分數據和大量的未標注的數據,得到的結果是非常好的。比如說在CIFAR-10上面,我們只用了原來的2%的數據集,就可以達到93.75的效果。如果我們只有10%的ImageNet訓練數據集,然后在更大的數據集上做一些挑選的話,也可以把Student Network的精度訓練得很好。這是用一個ResNet50教ResNet18的任務,Teacher是91.26,如果用全量的數據集,Student是88.76;然后用PU的方法,Student可以達到86.0。
這個思路也是很有意義的,我們也在持續不斷的投入研究,從完全無訓練數據集到有一點訓練數據集,兩種方向都給出了相應的解決方案,也都獲得了比較好的結果。
端側AI與華為昇騰芯片
上述分享的都是算法層面的論文之類的研究工作,這部分講一個實際的應用。
這是今年在華為的開發者大會上,做的一個實時的視頻風格遷移。比如我們輸入一個電影的圖像,通過GAN的技術,可以實時產生一些電影。
但這些模型的計算代價其實是比較大的。在華為Atlas200上,它原來的推理速度是630ms,遠遠超過視頻攝像頭對實時數據的抓取所需要的速度。
我們通過一系列的模型優化技術,最后把模型的推理速度優化到40ms,15倍以上的差距。如果我一秒想抓20幀圖像的話,那40毫秒就足夠去完成這樣的實時推理的要求了。
在這個項目里面,我們用到了這些技術:
模型蒸餾:去掉原始模型中的光流模塊,幫助我們解決穩定性的問題
神經元剪枝:降低視頻生成器的計算復雜度
算子優化:在不同的硬件上會有不同的最優算子和最優架構,我們用了AutoML的技術自動地選擇最適合Atlas200的AI算子
模型適配:包括多種風格遷移,例如梵高、畢加索等
由于今年疫情的原因,華為的開發者大會也將轉為線上。這里是一個風格遷移的現場展示,感興趣的同學也可以看一看,(鏈接:https://developer.huaweicloud.com/exhibition/Atlas_neural_style.html)
未來的展望
從數據高效的角度來講,我們會用到GAN、PU learning、遷移學習、小樣本學習等,來幫助我們收集更好的數據。
往上一層,端側AI模型的優化涉及到一些技術算法,也是上面講到的權值修剪、模型量化、知識蒸餾等。
計算機視覺里需要做端側AI模型優化的地方非常多,主要是高層視覺和底層視覺兩個方向,這里面有大量的研究、工程的空間都是可以做的。
最后,這些東西在華為內部應用場景也比較低,包括自動駕駛、智能終端、平安城市、華為云等。
我今天分享的所有內容,在Github的開源連接(上圖二維碼)都能獲取。我們近期還會開源諾亞實驗室的一個AutoML的平臺—Pipeline,里面會集成我們更多同事的一些更好的東西,以及很多成功的案例,來幫助大家做AutoML的技術,謝謝大家。
傳送門
本期直播回放鏈接:https://www.bilibili.com/video/BV1xT4y1u7Re
PPT獲取鏈接:https://pan.baidu.com/s/18x2kJWZeYltu2WSMgi9NVg
提取碼: x49q
最后,云鶴老師經常會在知乎上分享他們的研究成果,包括最新的Paper、開源鏈接等,歡迎大家關注云鶴老師的知乎專欄:
— 完 —
在線教育、直播電商等直播場景越來越廣泛,這背后離不開實時音視頻技術的支持。騰訊云在音視頻領域有多年技術積累,其直播系統如何實現低延時、大規模直播架構?
5.31號(本周日)晚7點,騰訊云資深架構師何書照老師將直播分享,歡迎識別下圖報名:
直播報名 | 騰訊云音視頻解決方案技術專場
量子位?QbitAI · 頭條號簽約作者
?'?' ? 追蹤AI技術和產品新動態
喜歡就點「在看」吧 !
總結
以上是生活随笔為你收集整理的华为诺亚实验室:端侧AI模型的技术进展与未来|量子位·吃瓜社的全部內容,希望文章能夠幫你解決所遇到的問題。