終于有人把“嵌入式人工智能”講明白了
導(dǎo)讀:嵌入式人工智能是個(gè)很有意思的概念。之前隔一段就要聽(tīng)到要工作或者要考研的同學(xué)問(wèn)嵌入式和人工智能哪個(gè)有前途?果然成年人還是全都要更有前途,于是有了嵌入式人工智能。這篇就簡(jiǎn)單聊下嵌入式人工智能。
本文引用地址:http://m.butianyuan.cn/article/202209/438427.htm作者:木羊同學(xué)
來(lái)源:華章計(jì)算機(jī)(h 華章計(jì)算機(jī) zbook_jsj)
嵌入式人工智能,就是在嵌入式的環(huán)境下做人工智能。算法模型還是原來(lái)原來(lái)那些算法模型,但是畢竟是在嵌入式環(huán)境下,時(shí)代變了,總要有一些東西作出改變。首先,我們來(lái)回答為什么要有嵌入式人工智能。
01
為什么需要嵌入式人工智能
現(xiàn)在人工智能發(fā)展最大的問(wèn)題是什么?通過(guò)圖靈測(cè)試?上SOTA?我覺(jué)得是落地問(wèn)題。這幾年人工智能大新聞一個(gè)接一個(gè),無(wú)論是學(xué)術(shù)界還是工業(yè)界,誰(shuí)都覺(jué)得人工智能現(xiàn)在是風(fēng)口。但是質(zhì)疑的聲音也漸漸走強(qiáng),不斷地有人在問(wèn)這是不是一個(gè)泡沫,甚至已經(jīng)有人開(kāi)始預(yù)測(cè)泡沫什么時(shí)候破裂。
為什么同樣是人工智能,意見(jiàn)會(huì)如此兩極化?
開(kāi)始我也很不理解,問(wèn)了一些朋友,也看了一些資料,漸漸也就清楚了一點(diǎn):說(shuō)到底就是落地問(wèn)題。人工智能相關(guān)的頂會(huì)每年好幾次,每次都能出來(lái)一些值得津津樂(lè)道的東西,有時(shí)還有意外的突破讓人發(fā)出“噢還能這樣玩”的感嘆。公道地說(shuō),從研究的角度看,人工智能這幾年一直在進(jìn)步,而且進(jìn)步還不小,大家都在期待奇點(diǎn)早點(diǎn)來(lái)臨。
但是,從應(yīng)用的角度再想一想,事情就沒(méi)這么樂(lè)觀了。不少人工智能產(chǎn)品確實(shí)讓我們眼前一亮,但那已經(jīng)是好幾年前的事情了,不是說(shuō)這幾年啥事沒(méi)干,主要都在優(yōu)化,早幾年Siri說(shuō)個(gè)話都磕磕巴巴,現(xiàn)在吵個(gè)架基本不成問(wèn)題。不過(guò)有什么以前沒(méi)有的新功能呢?想半天想不出來(lái)。一邊高歌猛進(jìn),一邊安靜如雞,這就是問(wèn)題。
很多人都說(shuō),人工智能下一個(gè)落地的場(chǎng)景就是下一個(gè)風(fēng)口。我當(dāng)然猜不準(zhǔn)下一個(gè)落地的場(chǎng)景究竟是什么,但我知道可選項(xiàng)之一就是嵌入式人工智能。以前一說(shuō)嵌入式就是單片機(jī),以至于很多同學(xué)以為這倆詞就是一回事。以前嵌入式系統(tǒng)大體的流程是這樣:輸入傳感器信號(hào),用編寫(xiě)的程序進(jìn)行處理,然后輸出控制信號(hào),為什么學(xué)嵌入式感覺(jué)都是在學(xué)單片機(jī)編程,道理就在這。
但是,現(xiàn)在是智能時(shí)代了,嵌入式系統(tǒng)也進(jìn)化成了“智能嵌入式系統(tǒng)”。有什么不同呢?這里引用《AI嵌入式系統(tǒng)》的一個(gè)觀點(diǎn):傳統(tǒng)的嵌入式系統(tǒng)主要用于控制,而智能嵌入式系統(tǒng)則提升了感知、交互和決策這三方面的智能化水平,分別叫智能感知、智能交互和智能決策。書(shū)里清楚解釋了這三個(gè)名詞,這里我想借這個(gè)問(wèn)題說(shuō)一下為什么嵌入式人工智能會(huì)是下一個(gè)落地的場(chǎng)景之一。
02
智能的作用
大家最想問(wèn)的應(yīng)該是多了“智能”會(huì)有什么不同,關(guān)鍵就在于編程。
過(guò)去嵌入式系統(tǒng)要干點(diǎn)什么肯定都得編程。編程也不是上來(lái)就寫(xiě)代碼,首先得分析數(shù)據(jù),提煉需求,最后才是編程實(shí)現(xiàn)。這幾個(gè)環(huán)節(jié)都要投入時(shí)間,特別是現(xiàn)在嵌入式部署的環(huán)境越來(lái)越復(fù)雜,問(wèn)題也越來(lái)越多,而按照傳統(tǒng)的方式,這些問(wèn)題都必須在編程時(shí)一一加以考慮,把規(guī)則一條條寫(xiě)上,系統(tǒng)才能具備處理能力。
手寫(xiě)規(guī)則費(fèi)時(shí)費(fèi)力,而且還容易“掛一漏萬(wàn)”。有沒(méi)有更好的辦法解決呢?有,就是加入人工智能。人工智能不需要人工寫(xiě)規(guī)則,而是可以通過(guò)數(shù)據(jù)“自學(xué)”。對(duì)于一些抽象的、不太好人工描述的規(guī)則,人工智能同樣可以通過(guò)學(xué)習(xí)來(lái)具備相應(yīng)的能力。這就是智能。嵌入式加上了人工智能,人工成本大大降低,想象空間大大延伸,這其中可能就孕育了下一個(gè)殺手級(jí)的人工智能應(yīng)用。
03
嵌入式的特殊局限
現(xiàn)在,我們又有了個(gè)新問(wèn)題:為什么要從人工智能中單獨(dú)切出一塊,叫嵌入式人工智能?
前面已經(jīng)說(shuō)過(guò),嵌入式人工智能的模型算法都是原來(lái)那套,從理論層面并沒(méi)有太多的不同,問(wèn)題就出在嵌入式本身。
嵌入式設(shè)備和通用計(jì)算機(jī)的計(jì)算環(huán)境大相徑庭,平時(shí)給我們感受最深的就是存儲(chǔ)容量小?!禔I嵌入式系統(tǒng)》給出一組對(duì)比數(shù)據(jù):常見(jiàn)的深度神經(jīng)網(wǎng)絡(luò)模型使用單精度浮點(diǎn)數(shù)存儲(chǔ)參數(shù)對(duì)應(yīng)的存儲(chǔ)量在20MB至560MB之間,相比之下,傳統(tǒng)低成本的嵌入式系統(tǒng)RAM存儲(chǔ)容量最高也只有16MB。
另一個(gè)同樣捉襟見(jiàn)肘的是算力。這個(gè)就不說(shuō)了,嵌入式設(shè)備在算力方面什么時(shí)候都只是弟弟。還有一個(gè)容易被大家忽視但同樣存在局限性的是能耗。要知道深度學(xué)習(xí)模型都是電老虎,每次模型跑訓(xùn)練,顯卡的風(fēng)扇都是要發(fā)出即將起飛的聲音,哪怕只是要模型跑起來(lái),同樣也是一件費(fèi)電的事情。而嵌入式設(shè)備在很多情況下是有耗能限制的。
總而言之,也許我們很容易找到一個(gè)嵌入式應(yīng)用場(chǎng)景需要人工智能,也確實(shí)已經(jīng)有現(xiàn)成的模型足以滿足要求,本來(lái)馬上就是一拍即合的事,但是,嵌入式本身的種種限制,想要簡(jiǎn)單硬套人工智能的現(xiàn)有成果,只能長(zhǎng)使英雄淚滿襟。
04
人工智能的應(yīng)對(duì)方法
方法不是沒(méi)有,有兩條路。一條是提升嵌入式設(shè)備的硬件條件,不過(guò)這也變相限制了應(yīng)用場(chǎng)景,另一條就是人工智能自己做出優(yōu)化,減少對(duì)空間、算力和能耗的需求?,F(xiàn)在大家選擇了第二條路,將問(wèn)題帶回到了人工智能這一邊,于是有了嵌入式人工智能。
這部分內(nèi)容很多,這里我做一點(diǎn)簡(jiǎn)單介紹,方便大家了解嵌入式人工智能都研究哪些方面。人工智能要適應(yīng)嵌入式環(huán)境,就要進(jìn)行字面意義上的“削足適履”,在大幅減少資源需求的同時(shí),盡量保證性能不至于明顯下降,在嵌入式人工智能里面,叫做優(yōu)化,譬如說(shuō)矩陣乘法優(yōu)化。
過(guò)去我在介紹機(jī)器學(xué)習(xí)的知識(shí)體系時(shí)說(shuō)過(guò),矩陣運(yùn)算是機(jī)器學(xué)習(xí)的骨骼。機(jī)器學(xué)習(xí)不是一種模型,而是一堆模型,而這些模型都大量使用了矩陣運(yùn)算,主要是矩陣乘法。如果矩陣乘法的運(yùn)算量能夠降下來(lái),模型整體的運(yùn)算量也就能夠降下來(lái)。
道理好懂,可是天下真有這種空手套白狼的好事嗎?
科學(xué)家還真給研究出來(lái)了。這要從Strassen矩陣相乘算法說(shuō)起,該算法于1969年提出,是第一款算法復(fù)雜度低于O(N3)的矩陣乘法。簡(jiǎn)單來(lái)說(shuō),就是這款算法能夠降低矩陣乘法的運(yùn)算量,譬如說(shuō)2×2矩陣相乘,常規(guī)算法進(jìn)行8次乘法運(yùn)算,而采用本算法只需要進(jìn)行7次,矩陣乘法的運(yùn)算量減少12.5%,不過(guò)不是沒(méi)成本的,加法運(yùn)算從4次提升至18次。就這樣看起感覺(jué)沒(méi)什么,但一旦矩陣上了規(guī)模,譬如說(shuō)128×128的矩陣運(yùn)算,使用該算法能夠降低約一半的矩陣乘法運(yùn)算,優(yōu)化效果就十分可觀了。類似的算法還有Winograd算法,同樣能夠在大尺寸矩陣運(yùn)算中將乘法運(yùn)算降低50%。
上面這類算法稱為快速矩陣乘法,另一種方案則是采用了犧牲精度提升速度的思想,允許矩陣乘法結(jié)果存在一定誤差,這類算法稱為近似矩陣乘法,譬如基于數(shù)據(jù)統(tǒng)計(jì)相關(guān)性的近似矩陣乘法,以及基于數(shù)據(jù)協(xié)方差低秩分解近似的快速乘法。
類似的從算子層面進(jìn)行優(yōu)化的還有對(duì)卷積運(yùn)算的優(yōu)化。卷積運(yùn)算的作用不必多說(shuō)了,現(xiàn)在用深度神經(jīng)網(wǎng)絡(luò)做圖像處理就離不開(kāi)卷積運(yùn)算,優(yōu)化的方向和矩陣乘法很類似,也是從快速卷積算法和近似卷積算法兩個(gè)方面展開(kāi)研究,譬如說(shuō)一維循環(huán)卷積頻域快速算法和基于卷積核低秩分解的二維快速卷積。
05
如何開(kāi)發(fā)嵌入式人工智能
既然要應(yīng)用落地,那么除了理論研究,當(dāng)然還要有開(kāi)發(fā)工具。不過(guò)嵌入式的平臺(tái)很多,開(kāi)發(fā)環(huán)境各不相同,這里我就就著《AI嵌入式系統(tǒng)》對(duì)Arm平臺(tái)上的機(jī)器學(xué)習(xí)工具做一點(diǎn)介紹。
Arm本身就不說(shuō)了,早個(gè)十年學(xué)嵌入式這可能還算是個(gè)新詞,現(xiàn)在智能手機(jī)人手一臺(tái),里面裝的就是Arm的處理器。不過(guò),按照處理器劃分,Arm平臺(tái)大致可分為Cortex-A、Cortex-M和Cortex-R三大系列。
我們手機(jī)里裝的就是Cortex-A系列,據(jù)說(shuō)算力超過(guò)NASA當(dāng)年搞登月時(shí)使用的超級(jí)計(jì)算機(jī),硬件條件相對(duì)寬裕,開(kāi)發(fā)資源也很豐富,深度學(xué)習(xí)的兩大框架Pytorch和Tensorflow都推出了針對(duì)Cortex-A的版本。Arm也推出了ACL(Arm Compute Libray)等庫(kù)來(lái)支持Arm平臺(tái)的高性能數(shù)據(jù)運(yùn)算。
Cortex-M和Cortex-R系列我們聽(tīng)得較少,因?yàn)檫@倆主要是面向工業(yè)應(yīng)用,Cortex-M主打低成本低能耗應(yīng)用場(chǎng)景,而Cortex-R則可以用于對(duì)實(shí)時(shí)性有更高要求的任務(wù)。相比Cortex-A,這倆個(gè)系列的算力就非常有限了。Arm專門(mén)推出了CMSIS軟件架構(gòu)來(lái)方便Cortex-M系列的應(yīng)用開(kāi)發(fā)。
CMSIS與機(jī)器學(xué)習(xí)關(guān)系較密切的庫(kù)有兩個(gè),一個(gè)是CMSIS-DSP庫(kù),里面提供了基本數(shù)學(xué)運(yùn)算操作如矩陣運(yùn)算、部分機(jī)器學(xué)習(xí)算法如SVM、以及FIR濾波、計(jì)算KL距離、DCT轉(zhuǎn)換、PID控制和排序等功能函數(shù)。CMSIS-DSP使用的是C語(yǔ)言,但是可以導(dǎo)入使用Python的Scikit-Learn庫(kù)訓(xùn)練得到的模型。另一個(gè)是CMSIS-NN庫(kù),看名字便可知道這是一個(gè)用于構(gòu)建神經(jīng)網(wǎng)絡(luò)的庫(kù),同樣也可以導(dǎo)入訓(xùn)練好的模型。
————————————————
版權(quán)聲明:本文為CSDN博主「hzbooks」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hzbooks/article/details/122486165
評(píng)論