XNOR-NET技術詳解:AI技術落地移動端新時代即將崛起
在這個時代,人類生活離不開智能設備。無論是隨身攜帶的手機,還是腕上的智能手表,都與人工智能息息相關。同時,人類的生活方式也在不斷化繁為簡,現(xiàn)代人出行只需帶上一只手機,便可以有效解決社交溝通、交易支付、出行交通等一系列問題。隨著社會便攜化、智能化的發(fā)展需求,在移動端實現(xiàn)人工智能也已經(jīng)成為大勢所趨。然而,人工智能的實現(xiàn)可能不僅需要在硬件配備方面進行大量投入,還需要大型數(shù)據(jù)中心的支撐。那么,如何在移動端建立可以遍布人類生活的 AI 技術力量呢?
2017 年 2 月 2 日,位于美國西雅圖的 AI 創(chuàng)業(yè)公司 xnor.ai 宣布獲得來自麥德羅納風險投資集團(Madrona Venture Group)和艾倫人工智能研究所(Allen Institute for Artificial Intelligence)的 260 萬美元的種子融資。這個平臺致力于開發(fā)不依賴于數(shù)據(jù)中心或互聯(lián)網(wǎng)連接的,可以直接有效地在移動端或嵌入式設備(例如手機、無人駕駛車輛等)上運行的深度學習模型。
Xnor.ai 平臺的這項針對移動端部署深度學習研發(fā)技術,無論是從響應性、速度還是可靠性上來說,都可以達到***的水平。而且,由于數(shù)據(jù)全部存儲于移動端設備上,個人隱私可以得到高水平保障。例如,就物體檢測的性能而言,業(yè)界完全可以把這項技術應用于手機上,實現(xiàn)物體的實時檢測。
事實上,xnor.ai 團隊就曾將 XNOR-Net 部署在價值 5 美元的 Raspberry Pi Zero 上,通過連接一個攝像頭實現(xiàn)了實時視頻分析,這段網(wǎng)站上的 demo 展示出的實時檢測分析效果十分引人注意,給人很強的視覺沖擊力。如果在類似于 Raspberry Pi Zero 這樣的移動設備上都能進行對槍支和刀具的實時監(jiān)測并及時報警,那么人們完全可以利用這項技術針對性地開發(fā)出更多 AI 安防產(chǎn)品,拓展 AI 安防領域,更不用說這項技術在其他領域中潛在的巨大商業(yè)價值。
眾所周知,深度學習模型大量的矩陣運算使 GPU 加速成了必不可少的硬件支持,這使得深度網(wǎng)絡難以在運算資源有限的移動設備上面實現(xiàn)。那么,xnor.ai 又是如何將深度網(wǎng)絡部署于移動端的呢?在這里,不得不提到二值神經(jīng)網(wǎng)絡這個概念。
隨著對神經(jīng)網(wǎng)絡研究深度不斷推進,學界研究人員發(fā)現(xiàn)傳統(tǒng)的神經(jīng)網(wǎng)絡對計算成本和內(nèi)存容量要求較高,而二值化則可以有效地改善這些問題。二值化網(wǎng)絡不僅有助于減小模型的存儲大小,節(jié)省存儲容量,而且能加快運算速度,降低計算成本。
2015 年 11 月,來自于 Yoshua Bengio 教授帶領的加拿大蒙特利爾大學實驗室團隊的 Matthie Courbariaux 發(fā)表了關于二值神經(jīng)網(wǎng)絡 BinaryConnect 的相關論文(BinaryConnect:Training Deep Learing Neural Networks with binary weight during propagations),引起了廣泛關注,開啟了嶄新的二值化網(wǎng)絡時代。論文中提出了 BinaryConnect 算法的關鍵在于僅在前向傳播和反向傳播中對權重進行二值化 1 或-1,而在參數(shù)更新過程保持權重的全精度(即仍為浮點數(shù)),這樣的做法可以省去接近三分之二的矩陣運算,訓練時間和內(nèi)存空間都得到了大幅度優(yōu)化,同時,BinaryConnect 在 MNISIST,CIFAR-10 和 SVHN 圖像分類數(shù)據(jù)集上的實驗效果可以達到當時***水平。
在此基礎上,Matthieu 和 Itay 隨后聯(lián)合發(fā)表的論文(Binarized Neural Networks:Training Networks with Weights and Activations Constrained to +1 or -1)提出了更完善的網(wǎng)絡模型——BinaryNet,將權值和隱藏層激活值同時進行二值化,并利用 xnorcount 和 popcount 運算操作代替網(wǎng)絡中傳統(tǒng)的算術運算。這個算法在常用圖像數(shù)據(jù)集上的模型二值化實驗也比較成功,可以減少約 60% 的計算復雜度,甚至可以在保證分類準確率的情況下,減少七倍的 GPU 運行時間。同時,實驗團隊也公開了在 CUDA、Theano 以及 Torch 上的代碼,不過很可惜的是,這個算法并沒有在如 ImageNet 的大數(shù)據(jù)集上證明精度是否可以維持。在盡可能減小模型準確率損失的情況下,BinaryNet 的出現(xiàn)通過縮減模型大小,簡化運算難度對算法進行加速。這使得深度網(wǎng)絡部署于移動端的前景初見曙光。
值得一提的是,隨著神經(jīng)網(wǎng)絡技術的蓬勃發(fā)展,許多教授、學者投身工業(yè)界,像 Matthie Courbariaux 現(xiàn)已投身 Google,并負責在 TensorFlow 框架中實現(xiàn)對深度模型的量化任務。不同于 Matthie 在論文中的二值化概念 (即不丟失模型準確率,只壓縮模型大小), 實際投入應用的量化更適合被理解為離散化。一般來說,在訓練神經(jīng)網(wǎng)絡的時候,要對權重做一些微小的調整,而這些微小的調整需要浮點精度才能正常工作,而低精度計算會被網(wǎng)絡當做一種噪聲。深度網(wǎng)絡的一個奇妙之處就在于它可以很好地應對輸入噪音,因為網(wǎng)絡可以把低精度計算當做一種噪聲,這使得量化后的網(wǎng)絡在具備較少信息的數(shù)值格式下,仍能產(chǎn)生精確的結果。
量化網(wǎng)絡有兩個動機,一是縮小尺寸,這是通過存儲每層的***和最小值,然后把每一個浮點值壓縮成 8-bit 整數(shù)來表示。二是降低資源需求,這需要整個計算都用 8-bit 輸入和輸出來實現(xiàn)。量化壓縮是存在風險的,目前的版本似乎還不是很成熟,Github 上面有很多開發(fā)人員認為利用這種方法量化后的模型效率較低。
2016 年 3 月,Mohammad Rastegari 等人在論文 (XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks) 中***提出了 XNOR-Net 的概念。這篇論文旨在利用二值化操作尋找到***的簡化網(wǎng)絡,并分別介紹了兩種有效的網(wǎng)絡:Binary-Weight-Networks 和 XNOR-Networks。Binary-Weight-Networks 是對 CNN 中所有的權重做近似二值化,可以節(jié)省 32 倍的存儲空間。而且,由于權重被二值化,卷積過程只剩加減算法,不再包括乘法運算,可以提高約兩倍的運算速度,這促使 CNN 可以在不犧牲準確率的情況下在小存儲設備上使用,包括便攜式設備。Binary-Weight-Networks 區(qū)別于 BinaryNet 的地方在于它進行二值化的方法和網(wǎng)絡結構。
XNOR-Networks 算法則是對 CNN 中所有的權重和輸入同時做近似二值化,如果卷積運算中的所有操作數(shù)都是二進制的,那么兩個二進制向量的點乘就可以等同于同或運算和位運算。作者在這篇文章里主要有兩個貢獻:一是引入比例因子,大幅度提升精度;二是對典型常規(guī)的 CNN 構成進行改動。
XNOR-Net 算法的基本思路如下:
Step1:定義一個 L 層的 CNN 結構,使用三個元素 I,W,* 來表示,I 表示卷積輸入,W 表示濾波器,*表示卷積算子;利用比例因子α幫助二值化濾波器去近似全精度濾波器權重,利用比例因子β幫助二值化的輸入去近似全精度輸入值。這有點類似于批規(guī)范化(Batch Normalization)中的仿射參數(shù)(Affine Parameters),但不同的是,這里不是通過為網(wǎng)絡學習獲得的,而是通過計算平均值得到的。在探索計算比例因子β的時候,要對每一次卷積產(chǎn)生的子張量都計算一個β,這一步驟會產(chǎn)生很多冗余的計算。為了降低計算量,作者把輸入的所有 channels 計算一個絕對值的平均值矩陣 A,然后通過一個二維的濾波器 k 和 A 的卷積生成 K,那么 K 就包含了針對輸入 I 在所有子張量上的比例因子。通過這樣一系列數(shù)學推導,輸入 I 與權重 W 的二值化卷積可以被近似為:
具體過程如下圖:
圖 1:XNOR-Net 近似二值化卷積過程(Mohammad Rastegari et al.)
Step2:一個典型的 CNN 具有卷積、批規(guī)范化、激活、池化這樣的四層結構,其中,池化層可以對輸入運用任何種類的池化方式。但在二值化的輸入(-1,1)進入到池化過程時,會產(chǎn)生大量的信息丟失。例如,對二值化輸入進行 max-pooling 時,會導致大部分輸入只剩+1,使得消息消減,精度降低。為了解決這個問題,作者改善了網(wǎng)絡結構,改變這幾層的順序,首先實行批規(guī)范化,保證 0 均值,然后進行二值化激活,使數(shù)據(jù)都是+1 和-1,再做二值化卷積,此時由于比例因子的作用輸出的不再是-1 和+1,這會相對減少信息丟失。在這里,作者建議在二值化卷積后加一個非二值化激活步驟(如 ReLU),這可以幫助訓練比較復雜的網(wǎng)絡。
具體過程如下圖:
圖 2:典型的 CNN 與 XNOR-Net 結構(Mohammad Rastegari et al.)
XNOR-Net 團隊在自主搭建的輕型神經(jīng)網(wǎng)絡框架 DarkNet 中實現(xiàn)了在 CPU 上 58 倍速度的提升,這意味著 XNOR-Net 可以在小內(nèi)存設備上完成實時任務。事實上,在 2016 計算機視覺大會上,XNOR-Net 團隊把 yolo object detection 算法的 xnor 版本在 iphone 上面做到了實時探測就成了一大亮點。XNOR-Net 的出現(xiàn)彌補了 BinaryNet 文章的缺失,***讓二值神經(jīng)網(wǎng)絡在 ImageNet 上面完了實驗。
有趣的是,XNOR-Net 團隊曾在 Github 上公開代碼,甚至包括讓其名聲大噪的 Yolo network,但在公開發(fā)表的論文中卻并沒有公開 C/C++源代碼而只是做了 Torch 的版本公開,曾經(jīng)發(fā)布在 Github 的版本也曇花一下,不久便被撤回了?,F(xiàn)在看來,這些舉動都無疑都是為之后 XNOR-Net 的商業(yè)化做準備。
Xnor.ai 的一系列舉措不禁讓人聯(lián)想到去年大火的 Prisma APP 離線版的上架以及新一代智能手表操作系統(tǒng) Andriod Wear 2.0 的發(fā)布。這些都是在移動端實現(xiàn)深度學習的經(jīng)典產(chǎn)品實例,而這些技術成果與研發(fā)產(chǎn)品都驗證了 Facebook 對未來十年的重點研發(fā)戰(zhàn)略領域的遠見卓識——連接世界、普及網(wǎng)絡;人工智能;虛擬現(xiàn)實和增強現(xiàn)實。
除此之外,去年年底 Facebook 發(fā)布的 Caffe2Go 也是可以嵌入、部署于移動設備的深度學習框架,具有規(guī)模小、訓練速度快、對計算機性能要求低等性能。其精華在于 Facebook 硬件優(yōu)化工程師和算法專家(以賈揚清為代表)做了大量的針對性能上的優(yōu)化,才使 Caffe2Go 可以順利部署于手機上。類似的還有 Google 發(fā)布于 Github 上的 TensorFlow android camera demo,在這里,Google 將較為復雜的 inception v3 圖片分類網(wǎng)絡模型進行量化壓縮減小 4 倍左右,然后部署于安卓手機上,也可以完成手機端的物體識別、行人檢測等任務。雖然這些優(yōu)化似乎更多是工程意義上的,而不是算法本身具備創(chuàng)新性,但是這些互聯(lián)網(wǎng)巨頭公司的行動無疑會帶給我們一些啟示:將深度學習框架部署于移動端是未來的一個主流發(fā)展趨勢。
目前,深度學習框架的開發(fā)及優(yōu)化發(fā)展迅速,種類也不少,不過,可以支持移動端的框架還是相對少數(shù)的,到底哪種框架是部署于移動端的***選擇,這還有待于考證。相較于 TensorFlow 這種比較復雜的主流深度學習框架,MXNET 作為一種十分靈活、對內(nèi)存要求較少的深度開源框架也被業(yè)界看好,而且它本身就提供了對多種移動端的支持。
去年 6 月,國內(nèi) Face++推出了關于 DoReFa-Net 算法的文章 ( DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients)。DoReLa-Net 對比例因子的設計更為簡單,這里并沒有針對卷積層輸出的每一個過濾映射計算比例因子,而是對卷積層的整體輸出計算一個均值常量作為比例因子。這樣的做法可以簡化反向運算,因為在他們反向計算時也要實現(xiàn)量化。DoReLa-Net 的貢獻在于提供了不同量化因子的實驗結果,即 2,4,8,16,32 bit 的權重、激活函數(shù)量化,同時在后向反饋中也實現(xiàn)了梯度的量化。對于梯度二值化問題,XNOR-Net 中只提出了理論的計算方法,未實現(xiàn) 4~16 bit 的量化實驗,也沒有在反向梯度計算中使用二值運算。在 SVHN 和 ImageNet 上的實驗都可以說明 DoReFa-Net 在有效地應用于 CPU,FPGA,ASIC 和 GPU 上,具有很大的潛力和可行性。但是 DoReLa-Net 并沒有使用 xnor 和 popcount 運算,因此實驗結果只具備精度參考價值,沒有任何加速的效果。
人工智能現(xiàn)如今已滲透在醫(yī)療、安防、車輛交通、教育等方方面面的領域,將 AI 技術移植到普羅大眾的便攜式生活中成為必然,未來更多致力于實現(xiàn)神經(jīng)網(wǎng)絡嵌入于移動端的產(chǎn)品將會應運而生,例如,車輛上的導航設施、游戲的手機客戶端以及各種各樣的手機 APP。這一方面是源于,在移動端實現(xiàn)人工智能十分方便、便攜,它可以隨時隨地滿足人們的各種需求;另一方面,在離線的情況下,數(shù)據(jù)無需上傳下傳,降低了信息傳遞時間,同時還能增強用戶隱私空間。人們有意愿、有需求直接把 AI 掌控在自己手中,從而達到進一步改善生活品質,甚至于改變生活方式的目的。
同時,從工業(yè)發(fā)展的角度,人工智能移動端的推行也勢在必行。工業(yè)機器人、家居機器人等工業(yè)化產(chǎn)品也需要依托于具有可移植功能的嵌入式芯片。在硬件條件的發(fā)展限制了深度學習運行速度的時候,軟件算法技術改進將會不斷革新,在這個革新過程中,終端設備智能化已經(jīng)初見曙光。
然而,在此過程中,還有一些有待于攻克的瓶頸和存在的問題。比如,如何改善二值神經(jīng)網(wǎng)絡模型在大規(guī)模數(shù)據(jù)庫上的表現(xiàn)存在不足的問題;如何對現(xiàn)有的二值化網(wǎng)絡算法進行精度和速度上的優(yōu)化;而進行二值化的網(wǎng)絡模型相比于全精度的網(wǎng)絡,存在的信息損失這個缺陷,是否可以被三值網(wǎng)絡來彌補;還有一個在工業(yè)領域十分重要的問題,如何將理論算法高效地落地,甚至是否可以開發(fā)出具備落地性的網(wǎng)絡模型或是框架。這些問題都將是未來研發(fā)人員的關注焦點和研究方向。
到底 xnor.ai 是否會在人工智能領域掀起一場腥風血雨,我們讓時間來解答這個問題。