?
本文旨在為硬件和嵌入式工程師提供機器學(xué)習(xí)(ML)的背景,它是什么,它是如何工作的,它為什么重要,以及 TinyML 是如何適應(yīng)的
機器學(xué)習(xí)是一個始終存在并經(jīng)常被誤解的技術(shù)概念。數(shù)十年來,使用復(fù)雜處理和數(shù)學(xué)技術(shù)使計算機能夠發(fā)現(xiàn)大量輸入和輸出數(shù)據(jù)之間的相關(guān)性的實踐一直存在于我們對技術(shù)的集體意識中。近年來,隨著以下方面的進步,科學(xué)技術(shù)得到了迅猛發(fā)展:
計算能力
面向大規(guī)模工作負(fù)載的云計算
事實上,這個領(lǐng)域已經(jīng)如此專注于桌面和基于云計算的應(yīng)用,以至于許多嵌入式工程師沒有太多考慮機器學(xué)習(xí)如何影響他們。大多數(shù)情況下,并沒有。
然而,隨著 TinyML 或微型機器學(xué)習(xí)(在微控制器和單板計算機等受限設(shè)備上的機器學(xué)習(xí))的出現(xiàn),機器學(xué)習(xí)已經(jīng)與所有類型的工程師相關(guān),包括那些從事嵌入式應(yīng)用的工程師。此外,即使您熟悉 TinyML,對機器學(xué)習(xí)有一個通用的具體理解也是很重要的。
在本文中,我將概述機器學(xué)習(xí),它是如何工作的,以及為什么它對嵌入式工程師很重要。
什么是機器學(xué)習(xí)?
機器學(xué)習(xí)是人工智能(AI)領(lǐng)域的一個子集,是一門利用數(shù)學(xué)技術(shù)和大規(guī)模數(shù)據(jù)處理來構(gòu)建程序,以發(fā)現(xiàn)輸入和輸出數(shù)據(jù)之間關(guān)系的學(xué)科。作為一個總括性的術(shù)語,人工智能涵蓋了計算機科學(xué)的廣泛領(lǐng)域,其重點是使機器能夠在沒有人類干預(yù)的情況下“思考”和行動。它涵蓋了一切,從“一般智能”或機器按照人類的方式思考和行動的能力,到專門的、面向任務(wù)的智能,這就是機器學(xué)習(xí)的范疇。
我過去聽到的機器學(xué)習(xí)定義的最強大的方法之一是與傳統(tǒng)的、用于經(jīng)典計算機編程的算法方法相比較。在經(jīng)典計算中,工程師向計算機提供輸入數(shù)據(jù)ーー例如,數(shù)字2和4ーー以及將它們轉(zhuǎn)換為所需輸出的算法ーー例如,用 x 和 y 乘以 z。當(dāng)程序運行時,提供輸入,并應(yīng)用該算法產(chǎn)生輸出。
?
在一個經(jīng)典的方法中,我們向計算機提供輸入數(shù)據(jù)和算法,并要求得到答案
另一方面,機器學(xué)習(xí)是向計算機提供一組輸入和輸出,并要求計算機識別“算法”(或用機器學(xué)習(xí)的說法稱為模型)的過程,這種算法每次都將這些輸入轉(zhuǎn)化為輸出。通常,這需要大量的輸入,以確保模型每次都能正確地識別正確的輸出。
例如,如果我向 ML 系統(tǒng)提供數(shù)字2和2以及預(yù)期的輸出4,它可能會決定該算法總是將這兩個數(shù)字相加。但是,如果我然后提供數(shù)字2和4以及8的預(yù)期輸出,模型將從兩個例子中學(xué)到,正確的方法是將提供的兩個數(shù)字相乘。
?
有了機器學(xué)習(xí),我們就有了數(shù)據(jù)(輸入)和答案(輸出) ,并且需要計算機通過確定輸入和輸出如何以對整個數(shù)據(jù)集為真的方式相互關(guān)聯(lián)來推導(dǎo)出一種排序算法
假設(shè)我使用一個簡單的示例來定義一個復(fù)雜的字段,那么您可能會問: 為什么一個人要費心將不復(fù)雜的字段復(fù)雜化呢?為什么不堅持我們經(jīng)典的算法計算方法呢?
答案是,傾向于機器學(xué)習(xí)的一類問題往往不能通過純算法的方法來表達。沒有一種簡單的算法可以給計算機一張圖片,然后讓計算機判斷圖片中是否包含貓或人臉。相反,我們利用機器學(xué)習(xí),給它數(shù)以千計的圖片(作為像素的集合)與貓,和人的臉,兩者都沒有,和一個模型開發(fā)通過學(xué)習(xí)如何關(guān)聯(lián)這些像素和像素組與預(yù)期的輸出。當(dāng)機器看到新的數(shù)據(jù)時,它會根據(jù)之前看到的所有示例推斷出一個輸出。這部分過程,通常稱為預(yù)測或推斷,是機器學(xué)習(xí)的魔力。
聽起來很復(fù)雜,因為事實就是如此。在嵌入式和物聯(lián)網(wǎng)(IoT)系統(tǒng)領(lǐng)域,機器學(xué)習(xí)越來越多地被用于機器視覺、異常檢測和預(yù)測性維護等領(lǐng)域。在每一個區(qū)域中,我們收集大量的數(shù)據(jù)ーー圖像和視頻、加速度計讀數(shù)、聲音、熱量和溫度ーー用于監(jiān)測設(shè)施、環(huán)境或機器。然而,我們常常很難將這些數(shù)據(jù)轉(zhuǎn)化為我們可以采取行動的洞察力。條形圖固然不錯,但是如果我們真正想要的是能夠在機器故障和脫機之前預(yù)測到它需要服務(wù),那么簡單的算法方法是不行的。
機器學(xué)習(xí)開發(fā)回路
進入機器學(xué)習(xí)。在有能力的數(shù)據(jù)科學(xué)家和機器學(xué)習(xí)工程師的指導(dǎo)下,這個過程從數(shù)據(jù)開始。也就是說,我們嵌入式系統(tǒng)產(chǎn)生的大量數(shù)據(jù)。機器學(xué)習(xí)開發(fā)過程的第一步是收集數(shù)據(jù),并在數(shù)據(jù)輸入模型之前對其進行標(biāo)記。標(biāo)記是一個關(guān)鍵的分類步驟,也是我們將一組輸入與預(yù)期輸出關(guān)聯(lián)起來的方式。
機器學(xué)習(xí)中的標(biāo)記與數(shù)據(jù)采集
例如,一組加速度計 x、 y 和 z 值可能對應(yīng)于機器處于空閑狀態(tài),另一組可能意味著機器運行良好,第三組可能對應(yīng)于問題。在中可以看到一個高級描述。
?
數(shù)據(jù)收集和標(biāo)記是一個耗時的過程,但對于正確處理數(shù)據(jù)至關(guān)重要。雖然機器學(xué)習(xí)領(lǐng)域有一些創(chuàng)新,利用預(yù)先訓(xùn)練的模型來抵消一些工作和新興的工具來簡化從實際系統(tǒng)收集數(shù)據(jù),但這是一個不容忽視的步驟。世界上沒有任何機器學(xué)習(xí)模型能夠可靠地告訴你,你的機器或設(shè)備是否運行良好,或者在沒有看到來自該機器或其他類似機器的實際數(shù)據(jù)的情況下即將崩潰。
機器學(xué)習(xí)模型的開發(fā)、訓(xùn)練、測試、提煉
數(shù)據(jù)收集之后,接下來的步驟是模型開發(fā)、培訓(xùn)、測試和細化。在這個階段,數(shù)據(jù)科學(xué)家或工程師創(chuàng)建一個程序,該程序接收收集到的大量輸入數(shù)據(jù),并使用一種或多種方法將其轉(zhuǎn)換為預(yù)期的輸出。解釋這些方法可以填滿容量,但是只要說明大多數(shù)模型對其輸入執(zhí)行一組轉(zhuǎn)換(例如,向量和矩陣乘法)就足夠了。此外,他們還將調(diào)整每個輸入的權(quán)重,以便找到一組與預(yù)期輸出可靠相關(guān)的權(quán)重和函數(shù)。
過程的這個階段通常是迭代的。工程師將調(diào)整模型、工具和使用的方法,以及在模型訓(xùn)練期間運行的迭代次數(shù)和其他參數(shù),以建立可靠的輸入數(shù)據(jù)與正確輸出(即標(biāo)簽)的關(guān)聯(lián)。一旦工程師對這種相關(guān)性感到滿意,他們就使用訓(xùn)練中未使用的輸入來測試模型,以了解模型在未知數(shù)據(jù)上的表現(xiàn)。如果模型在這個新數(shù)據(jù)上表現(xiàn)不佳,工程師會重復(fù)所示的循環(huán),并進一步細化模型。
?
一旦模型準(zhǔn)備就緒,就可以部署它并對新數(shù)據(jù)進行實時預(yù)測。在傳統(tǒng)的機器學(xué)習(xí)中,模型被部署到云服務(wù)中,以便運行中的應(yīng)用程序可以調(diào)用它,該應(yīng)用程序提供所需的輸入并接收來自模型的輸出。應(yīng)用程序可能會提供一張圖片,詢問是否有人在場,或者詢問一組加速計讀數(shù),并詢問模型這組讀數(shù)是否與一臺空閑的、正在運行的或壞掉的機器相對應(yīng)。
在這個過程中 TinyML 是如此重要,如此開創(chuàng)性。
那么 TinyML 適合哪里呢?
如果還不清楚的話,機器學(xué)習(xí)是一個數(shù)據(jù)密集型的過程。當(dāng)您試圖通過相關(guān)性獲得模型時,需要大量數(shù)據(jù)來為該模型提供信息。數(shù)以百計的圖像或數(shù)以千計的傳感器讀數(shù)。事實上,模型訓(xùn)練的過程是如此密集,如此專業(yè)化,以至于幾乎任何中央處理器(CPU)都要占用大量的資源,無論它有多高性能。相反,在機器學(xué)習(xí)中非常常見的向量和矩陣數(shù)學(xué)操作與圖形處理應(yīng)用程序并無不同,這就是為什么 GPU 已經(jīng)成為模型開發(fā)的流行選擇。
鑒于對強大計算能力的需求,云已經(jīng)成為事實上卸載訓(xùn)練模型工作并托管它們進行實時預(yù)測的場所。雖然模型訓(xùn)練仍然是云計算的領(lǐng)域,特別是對于嵌入式和物聯(lián)網(wǎng)應(yīng)用程序,但是我們越能夠?qū)崟r預(yù)測數(shù)據(jù)捕獲的位置,我們的系統(tǒng)就會越好。當(dāng)我們在微控制器上運行模型時,我們獲得了內(nèi)置安全性和低延遲的好處,以及在本地環(huán)境下做決定和采取行動的能力,而不需要依賴互聯(lián)網(wǎng)連接。
這是 TinyML 的領(lǐng)域,像 Edge Impulse 這樣的平臺公司正在構(gòu)建基于云的傳感器數(shù)據(jù)收集工具和機器學(xué)習(xí)架構(gòu),這些架構(gòu)輸出為微控制器單元(MCU)專門設(shè)計的緊湊、高效的模型。從意法半導(dǎo)體到阿里夫半導(dǎo)體(Alif Semiconductor) ,越來越多的硅廠商正在制造具有類似于 gpu 的計算能力的芯片,這使得它們能夠完美地在傳感器旁邊運行機器學(xué)習(xí)工作負(fù)載,而這正是數(shù)據(jù)收集的地方。
對于嵌入式和物聯(lián)網(wǎng)工程師來說,現(xiàn)在是探索機器學(xué)習(xí)世界的最佳時機,從云到最小的設(shè)備。我們的系統(tǒng)越來越復(fù)雜,處理的數(shù)據(jù)也越來越多。把機器學(xué)習(xí)帶到邊緣意味著我們可以處理這些數(shù)據(jù),更快地做出決定。
審核編輯:湯梓紅
評論