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


























