科技#on-device-ml#edge-inference#quantization#failure-modes#embedded-intelligence

裝置端機器學習:你口袋裡的那套堆疊

卓伊工程師卓伊工程師||5 分鐘閱讀
裝置端機器學習:你口袋裡的那套堆疊
重點摘要

裝置端模型是三個部件穿著一件大衣——感測器、壓縮網路、App——而每一個都有自己的壞法。真正有意思的工作不是展示;而是當光線很差、手機發熱、而模型又是在一個它永遠不會再見到的叢集上訓練時,你能指出是哪一層壞了。

裝置端模型是三個部件穿著一件大衣。感測器產生原始訊號。壓縮網路把那個訊號變成一個預測。App 決定要拿這個預測做什麼,以及怎麼把它顯示出來。每一個部件都有自己的故障模式,而設計決策就藏在這些故障模式裡。

這套系統,從高處看

裝置端機器學習的意思是,模型跑在資料被產生的地方,而不是在資料中心裡。模型在離線環境訓練,通常是在 GPU 叢集上,然後被壓縮、轉換成目標硬體能吃的格式。那個轉換步驟不是做表面功夫。它改寫了算術,好讓網路能跑在手機的神經加速器、DSP,或本來就已經在那裡的 CPU 核心上。手機拿到的不是叢集訓練出來的那個模型。它拿到的是一個更小、更快、也更脆弱的表親。這個交換是拿延遲、隱私和電池,去換準確度和彈性。雲端模型可以不用更新 App 就換掉。裝置端模型則是被凍結在版本裡。這個限制塑造了下游的一切,從 App 多久出一次版,到它面對訓練集從未包含過的輸入時,能多優雅地處理。

感測器、模型、App

感測器這一層是物理的。一張相機畫面以光子的形式抵達一顆小感測器,在模型看到它之前,得先經過去馬賽克、白平衡和裁切。麥克風訊號要被濾波和加窗。加速度計以固定頻率回報三個軸。這些步驟毫不光鮮,卻主宰了真實世界的準確度。一個在乾淨裁切圖上訓練的模型,遇到稍微模糊或曝光不足的畫面就會表現下滑。模型這一層是算術。卷積、矩陣乘法、激活函數,全部量化成八位元整數或更低。量化就是準確度悄悄外洩的地方。一個在浮點數下得分很高的網路,轉換之後可能掉好幾分,而且這個損失在不同類別之間並不平均。App 這一層是判斷。它決定什麼時候跑推論、怎麼把結果隨時間平滑化,以及信心很低時該怎麼辦。一個每一格都重畫骨架的姿態追蹤器會抖動。一個平滑得太兇的則會跟不上快速動作。兩層都沒有錯。它們是在互相協商。

邊緣案例,也就是有趣的地方

這些邊緣案例並不稀奇。它們就是星期二。手機放在口袋裡會升溫,溫度調節器就會對加速器降頻,於是推論速度掉一半。App 必須決定是要掉畫格,還是掉準確度。膚色較深的用戶搭配腕式光學感測器,會拿到較弱的訊號,因為反射光的物理並不在乎公不公平。一個大多在單一人口群體上訓練的模型,會在另一個群體上悄悄失效,而這個失效看起來會像使用者操作錯誤。再來是更新問題。聯邦學習和模型修補讓已部署的模型能持續改進,但它們也引進了一個新的破口:一個壞補丁可以一次讓每一台裝置都退步。裝置端堆疊不是雲端堆疊的縮小版。它是一套不同的堆疊,有不同的瓶頸,而這些瓶頸會隨著裝置、天氣,以及拿著它的人而移動。

什麼會壞,以及為什麼這很有用

會壞掉的,是那個「渾然一體」的承諾。行銷詞彙假設這些層會消失。它們不會。它們層層堆疊,而每一層都會在輸出上留下指紋。知道指紋在哪裡,就是你偵錯一個「感覺不對卻又沒當掉」的產品的方法。如果人臉偵測器在昏暗光線下漏掉一張臉,感測器這一層是頭號嫌疑犯。如果它找到根本不存在的臉,那就是模型這一層。如果它找到對的臉,但框會抖,那就是 App 這一層。這個對應不是什麼小技巧。它就是這份工作的全部。感測器是誠實的;手腕、口袋和房間並不總是很好的觀測點。模型是誠實的;訓練集並不總是具有代表性。App 是誠實的;使用者並不總是有耐心。指認出壞掉的那一層,你才能修對東西,而不是修最近的東西。

常見問題

為什麼我用手機相機時,手機變熱又變慢?

因為神經加速器在做真正的工作,而手機一熱,溫度調節器就會對它降頻。口袋是很糟的散熱片。App 必須在掉畫格和掉準確度之間做選擇,而大多數選擇掉畫格。

規格表上的準確度數字能信嗎?

只有在它們是量化之後、在你這類硬體上、用你這類輸入測出來的,才能信。訓練叢集給出的浮點數分數是起點,不是承諾。轉換步驟會外洩準確度,而且外洩得並不平均。

模型在實際場域出狀況時,第一件該檢查什麼?

指認出是哪一層。昏暗光線和動作模糊指向感測器。誤判指向模型。抖動和延遲指向 App。修對那一層,比重新訓練錯的那一層快得多。

在 MORLD 開始

下次你在偵錯一個感覺不對的裝置端模型時,打開 Morld 的 AB Motion Compare,上傳一段你自己的動作影片,挑一位參考運動員——AI 分數會告訴你,落差是在感測器、模型,還是平滑化,讓你修對那一層,而不是修最近的那一層。

相關文章