來源:AI前線算法
做者:Matthew Stewart安全
譯者:蓋磊服務器
策劃:陳思網絡
人工智能的一個趨勢是正快速從「雲端」走向「邊緣」。TinyML 是在海量的物聯網設備端微控制器上實現的人工智能,有望在將來幾年內,成爲人工智能在工業領域的重要新應用。邊緣設備每每計算資源和電量受限,對功耗極爲敏感。在此類設備上實現人工智能模型,面臨着新的挑戰,也提出了新的應用。本文是 TinyML 系列文章中的第一篇,介紹了 TinyML 概念、技術及將來潛力。數據結構
由 NASA 引領的小型化風潮已經席捲了整個消費電子產品產業。如今,一個領針中便可保存所有貝多芬做品,並可以使用耳機聆聽。———天體物理學家、科學評論員 Neil deGrasse Tyson架構
……超低功耗嵌入式設備的普及,以及用於微控制器的 TensorFlow Lite 等嵌入式機器學習框架的推出,意味着人工智能驅動的 IoT 設備將獲得大規模普及。———哈佛大學副教授 Vijay Janapa Reddi框架
圖 1 嵌入設備上的 TinyML 概覽圖機器學習
模型並不是越大越好。ide
本文是 TinyML 系列文章中的第一篇,目的是向讀者介紹 TinyML 概念及其將來潛力。本系列的後續文章中,將深刻介紹一些特定的應用、具體實現和教程。性能
引 言
過去的十年中,因爲處理器速度的提升和大數據的出現,咱們見證了機器學習算法的規模呈指數級增加。最初,模型的規模並不大,在本地計算機中運行,使用 CPU 的一或多個內核。
此後不久,GPU 計算令人們能夠處理更大規模的數據集,而且經過基於雲的服務,例如 Google Colaboratory 等 SaaS 平臺,Amazon EC2 Instances 等 IaaS,GPU 技術變得更易於獲取。與此同時,算法仍可在單機上運行。
最近,專用的 ASIC 和 TPU 已可提供大約 8 個 GPU 的處理能力。這些設備的發展,加強了將學習算法分佈到多個系統中的能力,知足了規模不斷增大的模型需求。
2020 年 5 月發佈的 GPT-3 算法,推進模型的規模達到登峯造極的水平。在 GPT-3 的網絡架構中,包含了數量驚人的 1750 億個神經元,是人腦中約 850 億個神經元的兩倍多,也是 Turing-NLG 神經元數量的 10 倍以上。Turing-NLG 發佈於 2020 年 2 月,是有史以來的第二大神經網絡,其中包含約 175 億個參數。有人估計,GPT-3 模型的訓練成本約爲 1000 萬美圓,使用約 3GWh 的電力,是三個核電站一小時的輸出。
儘管 GPT-3 和 Turing-NLG 的成就值得稱讚,但它們天然也引起了一些業內人士對人工智能行業日益增加碳足跡的批評。另外一方面,它們也激發了人工智能領域對更爲節能計算的興趣。過去數年中,更高效的算法、數據表示和計算等理念,一直是機器學習微型化(TinyML)這一看似毫無關聯領域的關注點。
TinyML 是機器學習和嵌入式 IoT 設備的交叉領域,是一門新興的工程學科,具備革新許多行業的潛力。
TinyML 的主要受益者,是邊緣計算和節能計算領域。TinyML 源自物聯網 IoT 的概念。物聯網的傳統作法,是將數據從本地設備發送到雲端處理。一些人對這一方式在隱私、延遲、存儲和能源效率等方面存在疑慮。
能源效率。不管經過有線仍是無線方式,數據傳輸都很是耗能,比使用乘積累加運算單元(multiply-accumulate units,MAU)的本機計算高出約一個數量級。最節能的作法,是研發具有本地數據處理能力的物聯網系統。相對於「以計算爲中心」的雲模型,「以數據爲中心」的計算思想已獲得了人工智能先驅者的一些先期探討,並已在當前獲得了應用。
隱私。數據傳輸中存在侵犯隱私的隱患。數據可能被惡意行爲者攔截,而且存儲在雲等單個位置中時,數據固有的安全性也會下降。經過將數據大部保留在設備上,可最大程度地減小通訊需求,進而提升安全性和隱私性。
存儲。許多物聯網設備所獲取的大部分數據是毫無用處的。想象一下,一臺安防攝像機天天 24 小時不間斷地記錄着建築物的入口狀況。在一天的大部分時間中,該攝像機並無發揮任何做用,由於並無什麼異常狀況發生。採用僅在必要時激活的更智能的系統,可下降對存儲容量的需求,進而下降需傳輸到雲端的數據量。
延遲。標準的物聯網設備,例如 Amazon Alexa,需將數據傳輸到雲來處理,而後由算法的輸出給出響應。從這個意義上講,設備只是雲模型的一個便捷網關,相似於和 Amazon 服務器之間的信鴿。設備自己並不是智能的,響應速度徹底取決於互聯網性能。若是網速很慢,那麼 Amazon Alexa 的響應也會變慢。自帶自動語音識別功能的智能 IoT 設備,因爲下降甚至是徹底消除了對外部通訊的依賴,所以下降了延遲。
上述問題推進着邊緣計算的發展。邊緣計算的理念就是在部署在雲「邊緣」的設備上實現數據處理功能。這些邊緣設備在內存、計算和功能方面都高度受限於設備自身的資源,進而須要研發更爲高效的算法、數據結構和計算方法。
此類改進一樣適用於規模較大的模型,在不下降模型準確率(accuracy)的同時,實現機器學習模型效率數個數量級的提升。例如,Microsoft 開發的 Bonsai 算法 可小到 2 KB,但比一般 40MB 的 kNN 算法或是 4MB 的神經網絡具備更好的性能。這個結果聽上去可能無感,但若是換句話說——在規模縮小了一萬倍的模型上取得一樣的準確率,這就十分使人印象深入了。規模如此小的模型,能夠運行在 2KB 內存的 Arduino Uno 上。簡而言之,如今能夠在售價 5 美圓的微控制器上構建此類機器學習模型。
機器學習正處於一個交叉路口,兩種計算範式齊頭並進,即以計算爲中心的計算,和以數據爲中心的計算。在以計算爲中心的計算範式下,數據是在數據中心的實例上存儲和分析的;而在以數據爲中心的計算範式下,處理是在數據的原始位置執行的。儘管在目前,以計算爲中心的計算範式彷佛很快會達到上限,可是以數據爲中心的計算範式纔剛剛起步。
當前,物聯網設備和嵌入式機器學習模型日益普及。預計到 2020 年末,將有超過 200 億臺活躍設備。人們可能並未注意到其中許多設備,例如智能門鈴、智能恆溫器,以及只要用戶說話甚至拿起就能夠「喚醒」的智能手機。本文下面將深刻介紹 TinyML 的工做機制,以及在當前和未來的應用狀況。
圖 2 雲的層級結構圖。
TinyML 示例
之前,設備執行的各類操做必需基於複雜的集成電路。如今,機器學習的硬件「智能」正逐漸抽象爲軟件,使得嵌入式設備更加簡單、輕量級和靈活。
使用嵌入式設備實現機器學習,需解決巨大的挑戰,但在該領域也取得了長足的進步。在微控制器上部署神經網絡,關鍵挑戰在於低內存佔用、功率受限和計算受限。
智能手機是最典型的 TinyML 例子。手機一直處於主動聆聽「喚醒詞」的狀態,例如 Android 智能手機的「你好,谷歌」,以及 iPhone 的「你好,Siri」。若是經過智能手機的 CPU(主流 iPhone 的 CPU 已達 1.85 GHz)運行語音喚醒服務,那麼電池電量會在短短几個小時內耗盡。這樣的電量消耗是不可接受的,而語音喚醒服務大多數人天天最多使用幾回。
爲了解決這個問題,開發人員建立了能夠用小型電池(例如 CR2032 鈕釦電池)供電的專用低功耗硬件。即便 CPU 未運行(一般表現爲屏幕並未點亮),集成電路也能保持活躍狀態。
這樣的集成電路消耗功率僅爲 1mW,若是使用標準的 CR2032 電池,可供電長達一年。
雖然有些人不以爲這有什麼了不得的,但這是很是重要的進步。許多電子設備的瓶頸就是能源。任何須要市電供應的設備,其使用都受電力佈線位置的限制。若是同一位置部署了十幾臺設備,可能電源會很快不堪重負。市電的效率並不高,且代價昂貴。將電源電壓(例如美國使用的 120V)轉換爲典型的電路電壓範圍(一般約爲 5V),會浪費掉大量的能量。筆記本電腦用戶在拔充電器時,對此都深有體會吧。充電器的內部變壓器所產生的熱量,就是在電壓轉換過程當中被浪費掉的能量。
即便設備自帶電池,電池續航也是有限的,須要頻繁充電。許多消費類電子設備的電池,設計上可持續使用一個工做日。一些 TinyML 設備可使用硬幣大小的電池持續運行一年,這意味着可將此類設備部署在一些偏遠的環境中,僅在必要時進行通訊,以節省電源。
在一臺智能手機中,喚醒詞服務並不是惟一無縫嵌入的 TinyML 應用。加速度計數據可用於肯定用戶是否剛拿起手機,進而喚醒 CPU 並點亮屏幕。
顯然,這些並不是 TinyML 的惟一用武之地。實際上,TinyML 爲產品粉絲和企業提供了大量使人興奮的應用,用於實現更智能的 IoT 設備。在當前數據變得愈來愈重要的狀況下,將機器學習資源分發到遠端內存受限設備的能力,爲農業、天氣預報或地震等數據密集行業提供了巨大機遇。
毫無疑問,賦予邊緣設備執行數據驅動處理的能力,將爲工業過程當中的計算範式帶來轉變。舉個例子,若是可以監測農做物並檢測到諸如土壤溼度、特定氣體(例如蘋果成熟時會釋放出乙烷)等特徵或特定的大氣條件(例如大風、低溫或高溼度等),將極大地促進做物的生長,提升做物的產量。
另外一個例子是,在智能門鈴中可安裝攝像機,使用面部識別肯定到場的來訪者。這將實現安防功能,甚至能夠在有人到場時將門鈴攝像頭輸出到屋內電視屏幕,以便主人瞭解門口的訪客狀況。
目前,TinyML 主要的兩個重點應用領域是:
關鍵字發現。大多數人已經很是熟悉此應用,例如「你好,Siri」和「你好,Google」等關鍵字,一般也稱爲「熱詞」或「喚醒詞」。設備會連續監聽來自麥克風的音頻輸入,訓練實現僅響應與所學關鍵字匹配的特定聲音序列。這些設備比自動語音識別(automatic speech recognition,ASR)更簡單,使用更少的資源。Google 智能手機等設備還使用了 級聯架構 實現揚聲器的驗證,以確保安全性。
視覺喚醒詞。視覺喚醒詞使用圖像相似替代喚醒詞的功能,經過對圖像作二分類表示存在與否。例如,設計一個智能照明系統,在檢測到人的存在時啓動,並在人離開時關閉。一樣,野生動物攝影師可使用視覺喚醒功能在特定的動物出現時啓動拍攝,安防攝像機能夠在檢測到人活動時啓動拍攝。
下圖全面展現當前 TinyML 機器學習的應用概覽。
圖 3 TinyML 的機器學習用例。圖片來源:NXP。
TinyML 工做機制
TinyML 算法的工做機制與傳統機器學習模型幾乎徹底相同,一般在用戶計算機或雲中完成模型的訓練。訓練後處理是 TinyML 真正發揮做用之處,一般稱爲「深度壓縮」(deep compression)。
圖 4 深度壓縮示意圖。來源:[ArXiv 論文](https://arxiv.org/pdf/1510.00149.pdf).
模型蒸餾(Distillation)
模型在訓練後須要更改,以建立更緊湊的表示形式。這一過程的主要實現技術包括剪枝(pruning)和知識蒸餾。
知識蒸餾的基本理念,是考慮到較大網絡內部存在的稀疏性或冗餘性。雖然大規模網絡具備較高的表示能力,但若是網絡容量未達到飽和,則能夠用具備較低表示能力的較小網絡(即較少的神經元)表示。在 Hinton 等人 2015 年發表的研究工做中,將 Teacher 模型中轉移給 Student 模型的嵌入信息稱爲「黑暗知識」(dark knowledge)。
下圖給出了知識蒸餾的過程:
圖 5 深度壓縮過程圖。
圖中 Teacher 模型是通過訓練的卷積神經網絡模型,任務是將其「知識」轉移給稱爲 Student 模型的,參數較少的小規模卷積網絡模型。此過程稱爲「知識蒸餾」,用於將相同的知識包含在規模較小的網絡中,從而實現一種網絡壓縮方式,以便用於更多內存受限的設備上。
一樣,剪枝有助於實現更緊湊的模型表示。寬泛而言,剪枝力圖刪除對輸出預測幾乎無用的神經元。這一過程一般涉及較小的神經權重,而較大的權重因爲在推理過程當中具備較高的重要性而會獲得保留。隨後,可在剪枝後的架構上對網絡作從新訓練,調優輸出。
圖 6 對蒸餾模型知識表示作剪枝的圖示。
量化(Quantization)
蒸餾後的模型,需對此後的訓練進行量化,造成兼容嵌入式設備架構的格式。
爲何要作量化?假定對於一臺 Arduino Uno,使用 8 位數值運算的 ATmega328P 微控制器。在理想狀況下要在 Uno 上運行模型,不一樣於許多臺式機和筆記本電腦使用 32 位或 64 位浮點表示,模型的權重必須以 8 位整數值存儲。經過對模型作量化處理,權重的存儲規模將減小到 1/4,即從 32 位量化到 8 位,而準確率受到的影響很小,一般約 1-3%。
圖 7 8 位編碼過程當中的量化偏差示意圖,進而將用於重構 32 位浮點數。圖片來源:《[TinyML](https://tinymlbook.com/)》一書。
因爲存在 量化偏差),可能會在量化過程當中丟失某些信息。例如在基於整型的平臺上,值爲 3.42 的浮點表示形式可能會被截取爲 3。爲了解決這個問題,有研究提出了量化可感知(quantization-aware,QA)訓練做爲替代方案。QA 訓練本質上是在訓練過程當中,限制網絡僅使用量化設備可用的值(具體參見 Tensorflow 示例)。
霍夫曼編碼
編碼是可選步驟。編碼經過最有效的方式來存儲數據,可進一步減少模型規模。一般使用著名的 霍夫曼編碼。
編譯
對模型量化和編碼後,需將模型轉換爲可被輕量級網絡解釋器解釋的格式,其中最廣爲使用的就是 TF Lite(約 500 KB 大小)和 TF Lite Micro(約 20 KB)。模型將編譯爲可被大多數微控制器使用並可有效利用內存的 C 或 C++ 代碼,由設備上的解釋器運行。
圖 8 TinyML 應用的工做流圖。來源:Pete Warden 和 Daniel Situnayake 編寫的《[TinyML](https://tinymlbook.com/)》一書。
大多數 TinyML 技術,針對的是處理微控制器所致使的複雜性。TF Lite 和 TF Lite Micro 很是小,是由於其中刪除了全部非必要的功能。不幸的是,它們同時也刪除了一些有用的功能,例如調試和可視化。這意味着,若是在部署過程當中出現錯誤,可能很難判別緣由。
另外,儘管模型必須存儲在設備本地,但模型也必需要支持執行推理。這意味着微控制器必須具備足夠大的內存去運行(1)操做系統和軟件庫;(2)神經網絡解釋器,例如 TF Lite);(3)存儲的神經網絡權重和架構;(4)推理過程當中的中間結果。所以,TinyML 方向的研究論文在給出內存使用量、乘法累加單元(multiply-accumulate units,MAC)數量,準確率等指標的同時,一般還需給出量化算法的峯值內存使用狀況。
爲何不在設備上訓練?
在設備上進行訓練會引入額外的複雜性。因爲數值精度的下降,要確保網絡訓練所需的足夠準確率是極爲困難的。在標準臺式計算機的精度下,自動微分方法是大致準確的。計算導數的精度可達使人難以置信的 10^{-16},可是在 8 位數值上作自動微分,將給出精度較差的結果。在反向傳播過程當中,會組合使用求導並最終用於更新神經參數。在如此低的數值精度下,模型的準確率可能不好。
儘管存在上述問題,一些神經網絡仍是使用了 16 位和 8 位浮點數作了訓練。
第一篇研究下降深度學習中的數值精度的論文,是 Suyog Gupta 及其同事在 2015 年發表的「具備有限數值精度的深度學習」(Deep Learning with Limited Numerical Precision)。該論文給出的結果很是有意思,便可在幾乎不下降準確率的狀況下,將 32 位浮點表示形式降至 16 位固定點表示。但該結果僅適用於使用隨機舍入(stochastic rounding)的狀況,由於其在均值上產生無偏結果。
在 Naigang Wang 及其同事 2018 年發表的論文「使用 8 位浮點數訓練深度神經網絡」(Training Deep Neural Networks with 8-bit Floating Point Numbers)中,使用了 8 位浮點數訓練神經網絡。在訓練中使用 8 位數值,相比在推理中要明顯難以實現,由於須要在反向傳播期間保持梯度計算的保真度(fidelity),使得在作自動微分時可以達到機器的精度。
計算效率如何?
能夠經過定製模型,提升模型的計算效率。一個很好的例子就是 MobileNet V1 和 MobileNet V2,它們是已在移動設備上獲得普遍部署的模型架構,本質上是一種經過重組(recast)實現更高計算效率卷積運算的卷積神經網絡。這種更有效的卷積形式,稱爲深度可分離卷積結構(depthwise separable convolution)。針對架構延遲的優化,還可使用 基於硬件的概要(hardware-based profiling) 和 神經架構搜索(neural architecture search) 等技術,對此本文將不作詳述。
新一輪人工智能革命
在資源受限的設備上運行機器學習模型,爲許多新的應用打開了大門。使標準的機器學習更加節能的技術進步,將有助於消除數據科學對環境影響的一些擔心。此外,TinyML 支持嵌入式設備搭載基於數據驅動算法的全新智能,進而應用在了從 預防性維護 到 檢測森林中的鳥叫聲 等多種場景中。
儘管繼續擴大模型的規模是一些機器學習從業者的堅決方向,但面向內存、計算和能源效率更高的機器學習算法發展也是一個新的趨勢。TinyML 仍處於起步階段,在該方向上的專家不多。本文參考文獻中列出了一些 TinyML 領域中的重要論文,建議有興趣的讀者去閱讀。該方向正在快速增加,並將在將來幾年內,成爲人工智能在工業領域的重要新應用。請保持關注。
做者簡介
Matthew Stewart,哈佛大學環境和數據科學博士研究生,Critical Future 公司機器學習顧問,我的博客地址:https://mpstewart.net
參考文獻
[1] Hinton, Geoffrey & Vinyals, Oriol & Dean, Jeff. (2015).Distilling the Knowledge in a Neural Network.
[2] D. Bankman, L. Yang, B. Moons, M. Verhelst and B. Murmann, 「An always-on 3.8μJ/86% CIFAR-10 mixed-signal binary CNN processor with all memory on chip in 28nm CMOS,」 2018 IEEE International Solid-State Circuits Conference — (ISSCC), San Francisco, CA, 2018, pp. 222–224, doi: 10.1109/ISSCC.2018.8310264.
[3] Warden, P. (2018).Why the Future of Machine Learning is Tiny. Pete Warden’s Blog.
[4] Ward-Foxton, S. (2020).AI Sound Recognition on a Cortex-M0: Data is King. EE Times.
[5] Levy, M. (2020).Deep Learning on MCUs is the Future of Edge Computing. EE Times.
[6] Gruenstein, Alexander & Alvarez, Raziel & Thornton, Chris & Ghodrat, Mohammadali. (2017).A Cascade Architecture for Keyword Spotting on Mobile Devices.
[7] Kumar, A., Saurabh Goyal, and M. Varma. (2017).Resource-efficient Machine Learning in 2 KB RAM for the Internet of Things.
[8] Zhang, Yundong & Suda, Naveen & Lai, Liangzhen & Chandra, Vikas. (2017).Hello Edge: Keyword Spotting on Microcontrollers.
[9] Fedorov, Igor & Stamenovic, Marko & Jensen, Carl & Yang, Li-Chia & Mandell, Ari & Gan, Yiming & Mattina, Matthew & Whatmough, Paul. (2020).TinyLSTMs: Efficient Neural Speech Enhancement for Hearing Aids.
[10] Lin, Ji & Chen, Wei-Ming & Lin, Yujun & Cohn, John & Gan, Chuang & Han, Song. (2020).MCUNet: Tiny Deep Learning on IoT Devices.
[11] Chen, Tianqi & Moreau, Thierry. (2020).TVM: An Automated End-to-End Optimizing Compiler for Deep Learning.
[12] Weber, Logan, and Reusch, Andrew (2020).TinyML — How TVM is Taming Tiny.
[13] Krishnamoorthi, Raghuraman. (2018).Quantizing deep convolutional networks for efficient inference: A whitepaper.
[14] Yosinski, Jason & Clune, Jeff & Bengio, Y. & Lipson, Hod. (2014).How transferable are features in deep neural networks?.
[15] Lai, Liangzhen & Suda, Naveen & Chandra, Vikas. (2018).CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs.
[16] Chowdhery, Aakanksha & Warden, Pete & Shlens, Jonathon & Howard, Andrew & Rhodes, Rocky. (2019).Visual Wake Words Dataset.
[17] Warden, Pete. (2018).Speech Commands: A Dataset for Limited-Vocabulary Speech Recognition.
[18] Zemlyanikin, Maxim & Smorkalov, Alexander & Khanova, Tatiana & Petrovicheva, Anna & Serebryakov, Grigory. (2019).512KiB RAM Is Enough! Live Camera Face Recognition DNN on MCU. 2493–2500. 10.1109/ICCVW.2019.00305.
原文連接:
https://towardsdatascience.com/tiny-machine-learning-the-next-ai-revolution-495c26463868
將來智能實驗室的主要工做包括:創建AI智能系統智商評測體系,開展世界人工智能智商評測;開展互聯網(城市)雲腦研究計劃,構建互聯網(城市)雲腦技術和企業圖譜,爲提高企業,行業與城市的智能水平服務。
若是您對實驗室的研究感興趣,歡迎加入將來智能實驗室線上平臺。掃描如下二維碼或點擊本文左下角「閱讀原文」