iT邦幫忙

2021 iThome 鐵人賽

DAY 7
3
Arm Platforms

爭什麼,把AI和MCU摻在一起做tinyML就對了!系列 第 7

[Day 07] 如何作出一盤好吃的AI專案

為了大家都能吃到一份最棒的「刻骨銘心初戀金銀情侶套餐」,接下來就由我「食神」親自示範。首先要重金禮聘一對熱戀中的豬,趁牠們不注意時放牠們血作成濃情化不開的豬紅,再將牠們的皮炸成情比金堅的炸豬皮,接著將一生只戀愛一次的巴黎九棍魚起肉打成魚蛋,最後放在印度的感情咖哩上,就成了這份對於青年男女談戀愛有著妙不可言的神密套餐。此時中國廚藝學院第105期畢業生唐牛看不下去了說道:「這不就是街邊雜碎麵嗎?九十九塊九,你這樣做生意有沒有良心呀?你連握刀最基本的腕力都沒有,還說你懂燒菜,讓我唐牛來讓你見識見識,如何作一碗好吃的雜碎麵」。

(番外篇)受到唐牛的刺激,於是我連夜想出另一道精彩的「AI咖哩飯」,並將作法公諸於世,這樣才不會讓大家覺得我不會作菜,不配當食神。接下來大家可要睜大眼睛、拿著筆記本狂抄了。

人工智慧(AI)專案與咖哩飯製作流程比較
Fig. 7-1 人工智慧(AI)專案與咖哩飯製作流程比較。(OmniXRI整理繪製, 2019/5/27)

說到AI,大家都覺得它無所不能,飛天遁地,但其實不然,它還是得按照一定的標準工作流程(SOP)實施,才能完美落地。通常大部份人都會最終應用來反推如何製作,這個方向對的,搞錯目標,點錯菜單,端上來的一定不是自己要的美食。以咖哩飯為例,首先要確定想要吃的是泰式、日式、台式還是私家祕式。就像要建立AI專案要先確認應能應用是屬於一維信號(如聲音、振動、溫濕度等)的時序預測、辨識,還是二維信號(如影像等)的分類、特徵提取(物件偵測)、分割,亦或是多維資料集(如複合感測、影音混合等)的聚類、分類,甚至是像下棋玩遊戲的增強學習類應用。這樣才能讓廚師(AI工程師)知道要準備什麼材料及使用何種工法來完成這道美味的咖哩飯(AI專案)。

首先要準備「素材」,厲害的廚師都是從選擇素材開始,熟悉素材特性才能精準掌握如何呈獻美味。一粒米、一隻雞、一顆紅蘿蔔、馬鈴薯、洋葱甚至配料都會影響最後端上桌的口味,AI專案的原始「資料收集」也是如此,如何收集,如何保持多樣性,常常也是決定AI專案的成敗。不過話說回來,只有極少數的廚師會自己種菜、養雞來控制原料品質,因為這些都是耗費體力,弄的全身髒兮兮的工作,且這份工作需要大量的專業領域知識(Domain Knowledge)才能完成,所以交給好的素材供應商或是契作包商來幫忙控管素材(原始資料)品質,可能才是比較好的作法。

有了素材後,還要先處理成乾淨的「原料」,我想很少廚師會想從殺一隻雞(除了中華一番雷恩的猛牛青龍斬)、曬穀精米開始作起。但如果廚師願意仔細清洗素材上不必的東西(如雞毛、稻殻、果皮等)且去除無法使用的素材並分級,那對於後續的烹飪工作就起到決勝的關鍵點。同樣地,AI專案取得的原始資料(如感測器時序信號、聲音、影像等)若不經清洗或前處理(Pre-Processing),只想著靠後面龐大的模型及參數來完成學習,那就已挖下需要耗費更多算力來完成應用的大坑,將會難以填補。雖然大部份的AI工程師都很討厭這項又煩又累且老板又不重視的工作,但有時AI工程師可以透過資料清洗的過程了解更多資料來源問題,進而提出更好的前處理方案,這樣會對後續AI專案的進行或改善會有很大的幫助。另

再來是原料「分解」,要完成一份好吃的咖哩飯,所需的材料可能只是原始素材的一部份,比方說十人份的咖哩要一隻雞、五杯米、二條紅蘿蔔、三個馬鈴薯、一顆洋葱,那就要先將原料其分解成適合的尺寸、份量,再準備其它配料(次要材料)並依烹煮的量來取用適當的數量,比方說一些胡椒粒、咖哩葉、黃薑粉及其它香料,如此才方便交給後面的大廚來烹調。同樣地,AI專案中有了乾淨的原料,就要有專業人士依領域知識幫忙進行「資料標註」。很多人都以為目前的AI可以像人一樣做非監督式(沒人教、沒標準答案)的學習或聚類(分類),但很不幸地是這可能還要很多年後才會達到大家可以接受的程度,所以目前絕大多數的應用都還是監督式學習,必須要有專業人士幫忙標註資料,不就會像股市名言所說「好的老師(標註)帶你上天堂,不好的老師(標註)帶你住套房」。有些日常生活應用可能一般人就能標的不錯,但像馬達(或心跳)異音、視覺瑕疵檢測偵測,甚至要進行程度分級時,此時光靠AI工程師也很難分辨、標註,很容易標錯,一定要有專業人士或自學專業知識來補強,不然這個AI專案就難以成功落地。

當廚師取得這些品質不錯且分解好的材料後,通常還要依想要烹煮的份量來取用材料,放到「臨時緩衝區」等待烹煮。而暫時用不到的材料就放到冰箱冷藏甚至冷凍庫這些「長期儲存」區。有時在烹煮過程中也需要一些「工作緩衝區」來擺放需要二次加工的材料。同樣地,在AI專案中,有時收集到的資料一大堆但沒空清洗,或者已有妥善專業的標註但考慮數量過多會影響模型訓練時間,此時就需要有「長期儲存區」(如硬碟或雲端儲存區)來存放資料。當進入訓練模型階段時則需要大量的「臨時緩衝區」(如隨機記憶體)來暫存訓練過程中的參數值。完成訓練後的模型和訓練好的參數就要再存回長期儲存區中,完成「資料倉儲」的動作,以便後續調整訓練結果時能輕鬆的調用、查詢不同條件下訓練的結果。

最後,當然就是開始施展廚藝料理美味的咖哩飯了,而神祕的配方和工序就成了「加工」階段最重要的不外傳的心法,同時反覆的實驗怎麼作才能滿足不同客人的口味,也是成為特級廚師(對不起串場中華一番了)不可或缺的一環了。同樣地,AI工程師要如何設計模型(模型建立),找出有用的結構(特徵提取),設定超參數及根據不同結果而重新練模型(分析推論),甚至重新挑選素材,這又不是三言兩語可以說完的,就讓我們留待下集分曉。

ps. 為讓文章更活潑傳達硬梆梆的技術內容,所以引用了經典電影「食神」的橋段,希望小弟戲劇性的二創不會引起電影公司的不悅,在此對星爺及電影公司致上崇高的敬意,敬請見諒。


上一篇
[Day 06] tinyML的重要推手Arm Cortex-M MCU
下一篇
[Day 08] tinyML開胃菜Arduino IDE上桌(上)
系列文
爭什麼,把AI和MCU摻在一起做tinyML就對了!31

尚未有邦友留言

立即登入留言