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