由 NASA 引領的小型化風潮已經席捲了整個消費電子產品產業。現在,一個領針中即可儲存全部貝多芬作品,並可使用耳機聆聽。
———天體物理學家、科學評論員 Neil deGrasse Tyson
……超低功耗嵌入式裝置的普及,以及用於微控制器的 TensorFlow Lite 等嵌入式機器學習框架的推出,意味著人工智慧驅動的 IoT 裝置將得到大規模普及。
———哈佛大學副教授 Vijay Janapa Reddi
模型並非越大越好。
本文是 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 的工作機制,以及在當前和將來的應用情況。
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 機器學習的應用概覽。
TinyML 工作機制
TinyML 演算法的工作機制與傳統機器學習模型幾乎完全相同,通常在使用者計算機或雲中完成模型的訓練。訓練後處理是 TinyML 真正發揮作用之處,通常稱為“深度壓縮”(deep compression)。
模型蒸餾(Distillation)
模型在訓練後需要更改,以建立更緊湊的表示形式。這一過程的主要實現技術包括剪枝(pruning)和知識蒸餾。
知識蒸餾的基本理念,是考慮到較大網路內部存在的稀疏性或冗餘性。雖然大規模網路具有較高的表示能力,但如果網路容量未達到飽和,則可以用具有較低表示能力的較小網路(即較少的神經元)表示。在 Hinton 等人 2015 年發表的研究工作中,將 Teacher 模型中轉移給 Student 模型的嵌入資訊稱為“黑暗知識”(dark knowledge)。
下圖給出了知識蒸餾的過程:
圖中 Teacher 模型是經過訓練的卷積神經網路模型,任務是將其“知識”轉移給稱為 Student 模型的,引數較少的小規模卷積網路模型。此過程稱為“知識蒸餾”,用於將相同的知識包含在規模較小的網路中,從而實現一種網路壓縮方式,以便用於更多記憶體受限的裝置上。
同樣,剪枝有助於實現更緊湊的模型表示。寬泛而言,剪枝力圖刪除對輸出預測幾乎無用的神經元。這一過程通常涉及較小的神經權重,而較大的權重由於在推理過程中具有較高的重要性而會得到保留。隨後,可在剪枝後的架構上對網路做重新訓練,調優輸出。
量化(Quantization)
蒸餾後的模型,需對此後的訓練進行量化,形成相容嵌入式裝置架構的格式。
為什麼要做量化?假定對於一臺 Arduino Uno,使用 8 位數值運算的 ATmega328P 微控制器。在理想情況下要在 Uno 上執行模型,不同於許多桌上型電腦和膝上型電腦使用 32 位或 64 位浮點表示,模型的權重必須以 8 位整數值儲存。透過對模型做量化處理,權重的儲存規模將減少到 1/4,即從 32 位量化到 8 位,而準確率受到的影響很小,通常約 1-3%。
由於存在量化誤差,可能會在量化過程中丟失某些資訊。例如在基於整型的平臺上,值為3.42 的浮點表示形式可能會被擷取為3。為了解決這個問題,有研究提出了量化可感知(quantization-aware,QA)訓練作為替代方案。QA 訓練本質上是在訓練過程中,限制網路僅使用量化裝置可用的值(具體參見 Tensorflow 示例)。
霍夫曼編碼
編碼是可選步驟。編碼透過最有效的方式來儲存資料,可進一步減小模型規模。通常使用著名的霍夫曼編碼。
編譯
對模型量化和編碼後,需將模型轉換為可被輕量級網路直譯器解釋的格式,其中最廣為使用的就是 TF Lite (約 500 KB 大小)和 TF Lite Micro (約 20 KB)。模型將編譯為可被大多數微控制器使用並可有效利用記憶體的 C 或 C++ 程式碼,由裝置上的直譯器執行。
大多數 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 公司機器學習顧問,個人部落格地址:
參考文獻
[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.
原文連結: