邊緣AI新方法TinyML,存儲占用KB計,在邊緣設備上進行機器學習
選自towardsdatascience作者:Matthew Stewart機器之心編譯編輯:陳萍
人工智能 AI 正在加快速度從云端走向邊緣,進入到越來越小的物聯網設備中。而這些物聯網設備往往體積很小,面臨著許多挑戰,例如功耗、延時以及精度等問題,傳統的機器學習模型無法滿足要求,那么微型機器學習又如何呢?在 NASA 的推動下,小型化的電子產品成為了一個完整的消費品行業?,F在我們可以把貝多芬的全部音樂作品放在翻領針上用耳機聽?!祗w物理學家兼科學評論員尼爾 · 德格拉斯 · 泰森 (Neil deGrasse Tyson)超低功耗嵌入式設備隨處可見,再加上用于微控制器的 TensorFlow Lite 等嵌入式機器學習框架的引入,這些使得人工智能驅動的物聯網設備大規模普及?!鸫髮W副教授 Vijay Janapa Reddi
嵌入式設備的微型機器學習(TinyML)示意圖。本文關于微型機器學習系列文章的第一篇,旨在向讀者介紹微型機器學習的概念及其未來的潛力。后續文章將深入討論特定應用、實現和相關教程。TinyML 簡介在過去的十年里,我們已經看到,由于處理器速度的提升和大數據的出現,機器學習算法的規模呈指數級增長。最初模型很小,在本地計算機上可以使用 CPU 中的一個或多個內核運行。不久之后,使用 GPU 的計算成為處理更大數據集的必要條件,而且由于引入了云服務,如 SaaS 平臺(谷歌 Google Colaboratory)和 IaaS(Amazon EC2 Instances),計算變得更加容易獲得。此時,算法仍然可以在單機上運行。近來,專用集成電路(ASIC)和張量處理單元(TPU)的發展,它們可以容納 8GPU 左右的功率。這些設備增強了跨多個系統分布學習的能力,并試圖發展越來越大的模型。隨著 GPT-3 算法(2020 年 5 月)的發布,這種情況達到了頂點,其網絡結構包含驚人的 1750 億個神經元——是目前存在于人類大腦中的兩倍多(約 850 億)。這是有史以來第二大神經網絡神經元數量的 10 倍——Turing-NLG(2020 年 2 月發布,包含約 175 億個參數)。一些人估計稱,模型的訓練成本約為 1000 萬美元,使用了大約 3 GWh 的電力(大約是三個核電站一小時的發電量)。雖然 GPT-3 和 Turing-NLG 的成就值得贊揚,但一些業內人士批評人工智能產業的碳足跡越來越大。然而,這也有助于激發人工智能界對更節能計算的興趣。諸如更有效的算法、數據表示和計算,它們一直是微型機器學習的焦點。微型機器學習(TinyML)是機器學習和嵌入式物聯網(IoT)設備的交集。該領域是一門新興的工程學科,有可能使許多行業產生革命性變革。TinyML 的行業受益者是邊緣計算和節能計算,其源于物聯網(IoT)的概念。
物聯網的傳統理念是將數據從本地設備發送到云上進行處理。一些人對這個概念提出了以下幾個方面的擔憂:隱私、延遲、存儲和能源效率。能源效率:傳輸數據(通過電線或無線)是非常耗能的,比板載計算(特別是乘積單元)的耗能多一個數量級。開發能夠自己進行數據處理的物聯網系統是最節能的方法;隱私:傳輸數據可能會侵犯隱私。數據可能被惡意的參與者截獲,并且當數據存儲在一個單一的位置(如云)時,其安全性就會降低。通過將數據保存在設備上并盡量減少通信,能夠提高數據安全性和隱私性;存儲:對許多物聯網設備來說,所獲得的數據毫無價值。想象一下,一個安全攝像頭一天 24 小時都在記錄一座大樓的入口。在一天的大部分時間里,攝像機的鏡頭毫無用處,因為什么都沒有發生。通過一個更智能的系統,必要時激活,降低存儲容量,傳輸到云端所需的數據量會減少;潛在因素:對于標準的物聯網設備,如 Amazon Alexa,這些設備將數據傳輸到云進行處理,然后根據算法的輸出返回響應。從這個意義上說,這個設備只是一個通往云模型的便捷門戶,就像你和亞馬遜服務器之間的「信鴿」。這個設備相當愚蠢,完全依賴互聯網的速度來產生結果。如果你的網速很慢,Amazon Alexa 也會變慢。對于具有機載自動語音識別功能的智能物聯網設備來說,由于減少了對外部通信的依賴性,因此延遲降低了。這些問題導致了邊緣計算的發展,即在邊緣設備(云的邊緣設備)上執行處理活動。這些設備在內存、計算和功耗方面都受到了極大的資源限制,這使得更高效算法、數據結構和計算方法得以發展。這些改進同樣適用于較大的模型,可能會使機器學習模型的效率提高一個數量級,而不影響準確度。例如,微軟開發的 Bonsai 算法可以小到 2KB,但比典型的 40MB kNN 算法或 4MB 神經網絡性能更好。這個結果聽起來可能不重要,但是同樣準確度的模型大小卻降到了萬分之一,這是很可觀的。這么小的模型可以在使用 2 KB RAM 的 Arduino Uno 上運行——簡而言之,你現在可以在一個 5 美元的微控制器上建立這樣一個機器學習模型。機器學習正在向兩種計算范式分化:以計算為中心的計算和以數據為中心的計算。在以計算為中心的范式中,數據由數據中心的范例進行存儲以及分析,而在以數據為中心的范式中,在本地完成對源數據的處理。雖然以計算為中心的范式似乎正在迅速走向一個極限,但以數據為中心的范式才剛剛開始。物聯網設備和嵌入式機器學習模型變得越來越普遍,預計到 2020 年底將超過 200 億臺活動設備,許多設備你可能還沒注意到。智能門鈴、智能恒溫器、以及說幾個單詞就能喚醒或者拿起就能喚醒的智能手機。本文的其余部分將更深入地關注 tinyML 的工作原理,以及當前和未來的應用。云的層級結構TinyML 用例在此之前,對于一個設備來說,復雜的電路是必要的,這樣能夠執行各種各樣的動作。現在,機器學習將這種硬件智能抽象成軟件變得越來越有可能,使得嵌入式設備越來越簡單、輕便和靈活。TinyML 最顯著的例子是智能手機。這些設備通常都有喚醒詞,例如:安卓智能手機的「Hey Google」,或是 iPhone 的「Hey Siri」。智能手機通過 CPU 處理這些活動,現代 iPhone 的主中央處理器是 1.85 GHz,會在幾個小時內耗盡電量。對于大多數人一天中最多使用幾次的設備來說,這種程度的耗電量不可接受。為了解決這個問題,開發人員開發了專用低功耗硬件,這種硬件可以由一個小電池(比如一個圓形的 CR2032 硬幣電池)供電。這使得電路即使在 CPU 不運行的情況下(基本上是在屏幕不亮的時候)也能保持活躍狀態。這些電路的功耗僅為 1mW,使用標準 CR2032 電池可以供電長達一年。
能源是許多電子設備的限制因素。任何需要主電源供電的設備都受限于有線電路,當十幾臺設備同時出現在同一位置時,線路就會迅速超負荷。電力系統的效率很低,而且價格昂貴。將電源電壓(在美國約為 120v)轉換為典型的電路電壓(通常約為 5 V)會浪費大量的能量。任何使用筆記本電腦充電器的人在拔下充電器時都可能知道這一點。充電器內變壓器產生的熱量在電壓轉換過程中浪費了能量。即使是有電池的設備,電池的續航時間也有限,需要頻繁地充電。許多電子產品的電池在設計時只能使用一個工作日。TinyML 設備可以用硬幣大小的電池持續工作一年,這意味著在偏遠環境中,只有在必要時才進行通信,以節省能源。單詞喚醒并不是唯一一個無縫嵌入智能手機的 TinyML。加速計數據用于確定是否有人剛剛拿起了手機,這將喚醒 CPU 并打開屏幕。顯然,這并不是 TinyML 唯一的應用。事實上,TinyML 為企業以及愛好者提供了生產更智能物聯網設備的機遇。數據變得越來越重要,將機器學習資源分配到偏遠地區內存有限的設備上,給數據密集型行業(如農業、天氣預報或地震學)帶來了好處。毫無疑問,賦予邊緣設備執行數據驅動處理的能力,將為工業過程帶來范式轉變。例如,當設備檢測到土壤濕度、特定氣體(例如蘋果成熟時釋放出乙烷)或特定大氣條件(如大風、低溫或高濕度)等特征時,檢測設備會發送有助于作物的信息,極大地促進作物生長,從而提高作物產量。再舉一個例子,一個智能門鈴可以安裝一個攝像頭,通過面部識別來確定誰在現場。這可以用于安全目的,或者甚至只是當有人在場時,門鈴上的攝像機信號會傳輸到房子里的電視上,這樣居民們就知道誰在門口。
目前,TinyML 的兩個主要重點領域是:關鍵字發現。大多數人已經熟悉此類應用程序。「Hey Siri」和「Hey Google」是關鍵字的示例(通常與「hotword」或「wake word」同義使用)。這樣的設備連續收聽來自麥克風的音頻輸入,并且被訓練為僅響應特定的聲音序列,這些特定的聲音序列與學習的關鍵字相對應。這些設備比自動語音識別 (ASR) 應用程序更簡單,并且相應地使用了更少的資源。某些設備(例如 Google 智能手機)利用級聯架構來提供揚聲器驗證以確保安全性;視覺喚醒詞。喚醒詞有一個基于圖像的類似物,稱為視覺喚醒詞。我們可以把它想象成一個圖像的二值分類來表示某物是存在還是不存在。例如,可以設計智能照明系統,使得其在檢測到人的存在時啟動,并在人離開時關閉。同樣,當存在特定的動物時,野生動物攝影師可以使用它來拍照,而當他們發現有人時,可以使用安全攝像機拍攝照片。下面顯示了 TinyML 當前機器學習用例的更廣泛概述。TinyML 的機器學習用例(源圖像:NXP)。TinyML 工作方式TinyML 算法的工作方式與傳統機器學習模型基本相同。通常,這些模型是在用戶的計算機上或云上進行訓練的。后期訓練是 TinyML 的工作真正開始的地方,這個過程通常被稱為深度壓縮。
為模型的知識表示蒸餾進行的剪枝。量化經過蒸餾后,模型在訓練后被量化成一種與嵌入式設備架構兼容的格式。為什么需要量化?想象一下,一個使用 ATmega328P 微控制器的 Arduino Uno,它使用 8 位運算。要想在 Uno 上運行一個模型,理想情況下模型權重必須存儲為 8 位整數(而許多臺式計算機和筆記本電腦使用 32 位或 64 位浮點表示)。通過量化模型,權重的存儲大小減少為原來的 4 分之一(如 32 位到 8 位值的量化),而對準確度的影響可以忽略(通常約為 1–3%)。
8 位編碼過程中量化誤差的示意圖此外,在量化過程中,由于量化誤差,一些信息可能會丟失。為了解決這個問題,量化感知(QA)訓練被提出并作為一種替代方案。哈夫曼編碼哈夫曼編碼是可變字長編碼 (VLC) 的一種,該方法完全依據字符出現概率來構造異字頭的平均長度最短的碼字。編譯一旦模型被量化和編碼,它就被轉換成一種格式,該格式可以被某種形式的小型神經網絡解釋器解釋,其中最流行的可能是 TF Lite(大小約 500kb)和 TF Lite Micro(大小約 20kb)。然后將該模型被編譯成 C 或 C++(大多數微控制器都能有效地使用內存),并由設備上的解釋器運行。
TinyML 應用程序工作流TinyML 大部分技巧來自于處理復雜的微控制器世界。TF Lite 以及 TF Lite Micro 之所以這么小是因為所有不必要的功能都被刪除了。不幸的是,一些有用的功能也被刪除了,如調試和可視化。這意味著,如果在部署期間出現錯誤,就很難判斷發生了什么。此外,當模型存儲在設備上時,還能進行推理。這意味著微控制器必須有足夠大的內存來運行(1)操作系統和庫;(2)神經網絡解釋器,如 TF Lite;(3)存儲的神經權重和神經結構;(4)推理過程中的中間結果。因此,量化算法的峰值內存使用率,以及內存使用量、乘法累加單元(mac)的數量、精度等經常在 TinyML 研究論文中引用。為什么不在設備上訓練在設備上進行訓練會帶來更多的「并發癥」。由于數值精度降低,很難保證充分訓練網絡所需的準確率水平。標準臺式計算機上的自動區分方法對于機器精度大約是準確的。以 10^-16 的精度計算導數令人難以置信,但是對 8 位值使用自動微分將會導致較差的結果。在反向傳播過程中,這些導數會組合并最終用于更新神經參數。在如此低的數值精度下,模型的準確度可能很差。話雖如此,神經網絡已經使用 16 位和 8 位浮點數進行了訓練。2015 年,Suyog Gupta 及其同事發表的第一篇有關降低深度學習中的數值精度的論文是《Deep Learning with Limited Numerical Precision》。論文結果表明,32 位浮點表示形式可以減少為 16 位定點表示形式,而準確度幾乎沒有降低。但這是使用 stochastic rounding 算法的唯一情況, 因為通常來說,它會產生無偏結果。
2018 年,Naigang Wang 及其同事在其論文《Training Deep Neural Networks with 8-bit Floating Point Numbers》中使用 8 位浮點數訓練了神經網絡。由于需要在反向傳播期間保持梯度計算的保真度(在使用自動微分時能夠實現機器精度),因此使用 8 位數字來訓練神經網絡要比使用推理更有挑戰性。計算效率如何?模型還可以進行裁剪,以提高計算效率。廣泛部署在移動設備上的模型架構如 MobileNetV1 以及 MobileNetV2 就是很好的例子。這些本質上是卷積神經網絡,它們重新定義了卷積運算,使其計算效率更高。這種更有效的卷積形式被稱為深度可分離卷積。此外還可以使用基于硬件的配置以及神經架構搜索來優化架構延遲,但這些在本文中沒有涉及。下一次 AI 革命在資源受限設備上運行機器學習模型的能力為許多新的可能性打開了大門。AI 的發展可能使標準機器學習更加節能,有助于減少人們對數據科學影響環境的擔憂。此外,TinyML 允許嵌入式設備被賦予基于數據驅動算法的新智能,這些算法可以用于從預防性維護到森林中的鳥叫聲檢測等任何方面。雖然一些 ML 從業者無疑會繼續擴大模型的規模,一個新的趨勢是開發更多具備內存、計算和能耗效率的機器學習算法。目前,TinyML 仍處于起步階段,未來發展的空間還很大。
- 免責聲明
- 本文所包含的觀點僅代表作者個人看法,不代表新火種的觀點。在新火種上獲取的所有信息均不應被視為投資建議。新火種對本文可能提及或鏈接的任何項目不表示認可。 交易和投資涉及高風險,讀者在采取與本文內容相關的任何行動之前,請務必進行充分的盡職調查。最終的決策應該基于您自己的獨立判斷。新火種不對因依賴本文觀點而產生的任何金錢損失負任何責任。