在邊緣裝置上佈署AI模型需要考量硬體資源限制、資料收集與處理流程、以及使用者經驗等多重導向。有效地分割和增強資料集是訓練穩健模型的基礎,而建立可重複且易於維護的資料管線則能確保專案的長期成功。此外,設計邊緣AI產品時,除了技術可行性,更需考量使用者需求和潛在的社會影響,並遵循以人為本的設計原則。透過設定明確的系統目標、技術目標和價值目標,並採用評估優先的開發方法,才能開發真正解決問題且符合使用者期望的邊緣AI應用程式。

資料集分割與資料增強的最佳實踐

在機器學習專案中,正確地分割資料集以及適當地進行資料增強是至關重要的。這兩者對於模型的評估、泛化能力的提升以及最終的效能都有著直接的影響。

資料集分割常見錯誤

  1. 手動選擇資料分割: 應該避免手動選擇哪些記錄進入訓練集、驗證集或測試集。這種做法可能會導致某些特定的記錄只出現在某個分割中,從而影響模型的評估結果。正確的做法是使用隨機抽樣演算法來進行資料分割,例如使用Python的scikit-learn函式庫。

  2. 平衡性和代表性問題: 各個資料分割應該保持相同的類別平衡,並且具有代表性。這對於分類別問題中的類別平衡以及非官方子群體的代表性尤其重要。例如,如果資料來自不同型別的感測器,應該使用分層抽樣來確保每個分割中都包含適當比例的來自不同感測器的資料。

  3. 預測過去: 在處理時間序列資料時,模型的訓練應該根據早期的資料,而驗證和測試則應該根據後期的資料。否則,可能會訓練出一個能夠根據當前值預測過去值的模型,這並不是我們想要的。

  4. 重複值: 資料中可能存在重複的記錄,或者在分割過程中出現重複。不同分割之間的重複值會損害模型對過度擬合的評估能力,因此應該避免。

  5. 變更測試分割: 在比較多種方法時,應該使用相同的測試分割。如果每次使用不同的樣本集,將無法判斷哪個模型更好,因為任何差異都可能是由於分割的不同而造成的。

  6. 增強測試資料: 只應該對訓練資料進行增強。對驗證和測試資料進行增強會稀釋它們對真實世界效能的洞察力,因為你希望它們由純粹的真實世界資料組成。

資料增強技術

資料增強是一種透過向資料集中引入隨機的人工變異來模擬真實世界中的自然變異的技術。這可以幫助模型更好地泛化,避免過度擬合。

常見的資料增強方法

  1. 加法增強: 加入其他訊號,例如隨機噪聲或從真實世界中取樣的背景噪聲。

  2. 減法增強: 移除或遮蔽值,或移除時間或頻率段。

  3. 幾何增強: 旋轉、移動、擠壓、拉伸或以其他方式空間地操縱訊號。

  4. 根據濾波器的增強: 透過隨機量增加或減少個別值的屬性。

資料增強的最佳實踐

  • 只對訓練資料進行增強,不要將增強的記錄包含在驗證或測試資料中。
  • 可以使用線上或離線增強。線上增強每次使用記錄時都會進行隨機變化,而離線增強則是預先將記錄改變特定次數並儲存到磁碟上。

資料集的持續建構與資料管線的重要性

在邊緣AI專案中,資料集的建立是一個持續且關鍵的過程。隨著時間的推移,現實世界的環境會不斷變化,使得原本的資料集逐漸過時。因此,持續收集新的資料以保持模型的更新和效能變得至關重要。

資料管線:資料處理的核心

資料管線涵蓋了從資料擷取、儲存、評估、標註、格式化、審核、清理、取樣、特徵工程、分割到增強等一系列任務。這一系列的任務構成了一個完整的資料處理流程,是專案成功的基礎。

簡單的資料管線範例

圖表翻譯: 此圖示呈現了一個基本的資料管線流程,從資料擷取到資料增強,每一步驟都至關重要。

為什麼資料管線如此重要?

  1. 可重複性:一個乾淨、設計良好的程式碼實作的資料管線,可以確保流程的可重複執行。
  2. 版本控制:對資料管線進行版本控制,可以追蹤每次的變更,確保可回溯性。
  3. 依賴管理:清楚記錄依賴關係,確保每次執行的一致性。

資料管線實作範例

import pandas as pd

def data_pipeline(data_path):
    # 資料擷取
    data = pd.read_csv(data_path)
    
    # 資料清理
    data = data.dropna()
    
    # 特徵工程
    data['feature'] = data['column1'] + data['column2']
    
    # 資料分割
    train_data = data.sample(frac=0.8)
    test_data = data.drop(train_data.index)
    
    return train_data, test_data

# 使用範例
train, test = data_pipeline('data.csv')
print(train.head())

內容解密:

  1. data_pipeline函式:定義了一個完整的資料處理流程,從讀取資料到傳回訓練和測試資料集。
  2. 資料清理步驟:使用dropna()函式移除缺失值,確保資料品質。
  3. 特徵工程:建立新的特徵feature,透過將column1column2相加來實作。
  4. 資料分割:將資料集分割為訓練集和測試集,使用sample()函式隨機抽取80%的資料作為訓練集。

面對挑戰:持續改進的障礙

儘管持續改進資料集至關重要,但實際專案中常面臨諸多限制,例如:

  • 需要自定義硬體進行資料收集,且硬體可能僅暫時可用。
  • 資料收集過程可能是批次而非連續的。
  • 可能缺乏長期資金支援持續的資料收集。

結語

建立和維護一個良好的資料管線是邊緣AI專案成功的關鍵。它不僅確保了資料處理的一致性和可重複性,還為持續收集新資料、應對現實世界變化提供了基礎。透過MLOps等實踐,可以更好地管理和改進機器學習專案,從而提升模型的效能和應用價值。

設計邊緣AI應用程式

邊緣AI應用程式的設計和開發是將所有邊緣AI的相關技術結合在一起的過程。這需要對我們迄今為止所討論的所有內容有深入的瞭解,包括問題框架、資料集收集、技術選擇和負責任的AI。除此之外,還需要具備在相關領域設計產品以及在軟體和硬體中實作設計所需的技能和知識。

在本章中,我們將逐步介紹設計邊緣AI應用程式的過程,並學習一些在實際應用中使用的最重要的設計模式,這些模式可以應用於您自己的工作中。在本章結束時,您將熟悉邊緣AI產品設計的要求,並準備好開始建立自己的產品。

產品和體驗設計

邊緣AI產品的目標是解決特定的問題。大多數現實世界的問題都有幾個組成部分,所有這些部分都必須得到解決,才能認為問題已經「解決」:

  1. 問題本身
  2. 產品解決基本問題的能力
  3. 人類因素
  4. 產品滿足使用者期望的能力
  5. 更廣泛的背景
  6. 產品滿足現實世界需求的能力

讓我們考慮一個假設的例子來說明這一點。

追蹤舉重訓練

許多人發現使用可穿戴裝置來追蹤他們的運動活動很方便。例如,設計用於跑步者的智慧手錶可以記錄特定跑步的距離、時間和生物訊號。這幫助跑步者瞭解他們正在做的運動量並追蹤他們隨時間的進步。

然而,一些活動比其他活動更難追蹤。跑步的關鍵指標是距離和時間,這些很容易被動測量。然而,舉重則更為複雜。舉重運動員必須追蹤:

  • 他們正在做的具體動作(例如,臥推、深蹲)
  • 他們使用的重量
  • 他們成功完成的重複次數(例如,10次上下舉)
  • 他們完成的組數(例如,3組10次重複)
  • 他們在每組之間等待的時間

對於運動員來說,能夠走進健身房,完成他們的鍛煉,並立即獲得他們所做事情的記錄,而不必記得把它寫在筆記本上,將會非常方便。

讓我們考慮兩種不同的方式來解決追蹤舉重訓練的問題。記住,我們需要解決三個問題:問題本身、人類因素和更廣泛的背景。

在我們的第一個解決方案中,運動員佩戴一塊裝有加速度計的智慧手錶。在每組之前,他們使用硬體按鈕在手錶上輸入動作型別,以及他們舉起的重量。在一組訓練中,手錶使用AI演算法根據加速度計的資料來瞭解何時完成了一次重複,從而追蹤完成的重複次數。訓練結束後,這些資訊會同步到一個移動應用程式中供檢視。

這是否解決了問題本身?從技術上講,是的——該系統允許運動員在沒有筆記本的情況下追蹤他們的舉重訓練。從更廣泛的背景來看,這個解決方案似乎也沒問題:健身可穿戴裝置很常見、價格合理、設計實用,並且在社會上被廣泛接受。

然而,當我們考慮人類因素時,情況就不那麼樂觀了。我們的設計要求運動員在每次訓練前輸入動作型別和重量,這可能會被視為不方便或幹擾他們的訓練流程。

內容解密:

本段落詳細介紹了一個假設性的例子,用於闡述如何設計一個能夠追蹤舉重訓練的邊緣AI應用程式,並強調了在設計過程中需要考慮的三個主要方面:問題本身、人類因素和更廣泛的背景。透過這個例子,讀者可以瞭解到在實際應用中,如何綜合運用技術和使用者經驗設計來解決現實世界的問題。

圖表翻譯:

此圖示展示了邊緣AI產品設計過程中需要考慮的多個因素之間的相互關係,包括問題本身、使用者需求和技術限制。 圖表翻譯: 此圖表呈現了邊緣AI產品設計的多個關鍵要素之間的關係,包括問題本身、人類因素和更廣泛的背景如何影響產品設計,而產品設計又與技術架構相關聯,最終透過迭代設計過程來完善整個系統。

設計與邊緣AI的挑戰

在開發涉及人工智慧(AI)和機器學習(ML)的產品時,設計師面臨著多重挑戰。這些挑戰不僅包括技術層面的問題,還涉及到使用者經驗、社會背景以及產品的整體影響。在本篇文章中,我們將探討設計邊緣AI產品時需要考慮的關鍵因素,以及如何避免常見的陷阱。

使用者經驗的重要性

設計一個成功的邊緣AI產品,首先需要關注的是使用者經驗。以運動追蹤為例,使用者需要在每次訓練之間輸入重量資料,這種方式是否真的優於使用紙質筆記本仍有待商榷。許多人在運動過程中與智慧裝置互動感到挫敗。因此,設計師需要考慮如何創造一個更自然、更直觀的使用者經驗。

一個可能的解決方案是使用小型電池供電的攝影機,透過電腦視覺技術來計算使用的重量和識別運動動作。雖然這個方案從解決問題的角度來看很有前景,但它也引發了對隱私的擔憂。在公共健身房中,使用者可能不願意被「拍攝」,即使邊緣AI攝影機可以透過不儲存任何影片來保護隱私。

設計原則

Ovetta Sampson,一位在Capital One擔任機器學習體驗設計副執行長,提出了一套適用於AI設計的原則。這些原則強調了在設計過程中需要考慮的多個重要方面,包括:

  1. 解決困難問題:集中解決真正重要的問題。
  2. 促進健康關係:設計應考慮使用者與其他人和產品之間的關係。
  3. 需要靈活性:利用AI實作自定義,以建立更可靠的產品。
  4. 瞭解使用者需求:設計應根據對個別使用者需求的準確理解。
  5. 承認偏見:設計師必須意識到偏見的存在,並努力減少其影響。
  6. 防止不誠實:設計師必須對產品的潛在負面影響保持誠實。
  7. 預期意外後果:AI系統可能造成系統性傷害,好的設計必須預期並避免這些後果。
  8. 促進公平:仔細設計的AI系統可以減少不公平。
  9. 考慮整體生態系統:AI佈署的背景非常複雜,好的設計必須反映這一點。
  10. 有目的地帶來秩序:AI產品應該使世界更容易理解和應對。

這些原則強調了在設計邊緣AI產品時需要謹慎和周密的思考。由於AI的規模和自動化能力,其影響可能會遠遠大於傳統產品。

規劃解決方案

開發AI和ML產品的一個挑戰是難以準確估計所需的工作量。演算法開發的探索性質和對高品質資料集的需求使得預測專案時間變得非常困難。

演算法開發自然會影響硬體和軟體需求。例如,機器學習從業者可能需要確定深度學習模型的規模,以達到可接受的結果。這反過來又限制了可以佈署模型的裝置型別。因此,在開始硬體開發之前,至少需要完成部分演算法開發工作。

常見風險

在啟動AI專案之前,需要意識到多種潛在風險,包括:

  • 難以或昂貴地取得足夠的資料集。
  • 資料中沒有足夠的訊號來訓練可用的模型。
  • 現有的硬體不足以執行工作演算法。
  • 問題需要AI無法提供的精確度。

為了避免這些問題,採用敏捷開發方法比傳統的「瀑布」開發模式更為合適。這樣可以在開發過程中不斷調整和改進,減少因初始假設錯誤而導致的重大損失。

限制範圍的重要性

在開發邊緣AI(Edge AI)專案時,限制範圍是成功的關鍵。雖然AI的應用前景廣闊,但在初期階段,避免過於雄心勃勃的計畫可以減少錯誤的發生。

一個典型的例子是自動駕駛汽車的發展。在2010年代中期,許多技術專家認為全自動駕駛汽車即將問世。然而,儘管深度學習革命帶來了巨大的進步,完全可靠的自動駕駛系統仍未實作。事實證明,要達到最後幾%的可靠性指數級地更加困難。

與此同時,一個相關但較不雄心勃勃的技術——先進駕駛輔助系統(ADAS)——卻取得了巨大的成功。ADAS是一種旨在幫助人類駕駛員的技術,包括自適應巡航控制、車道居中和碰撞避免等功能。這些功能透過限制範圍,達到了比自動駕駛系統更高的實用性。

例如,許多現代汽車都具備自適應巡航控制系統,可以在高速公路上接管加速、制動和車道居中。由於該系統僅需在受限環境中工作,因此更容易實作100%的可靠性。雖然它無法在城市街道上工作,但對於駕駛員來說,它已經非常接近自動駕駛汽車的體驗。

內容解密:

  • 自動駕駛汽車:全自動駕駛技術仍在發展中,但尚未達到完全可靠。
  • ADAS技術:透過限制範圍,實作了更高的實用性和可靠性。
  • 自適應巡航控制系統:僅需在高速公路上工作,使其更容易實作高可靠性。

設定設計目標

在規劃邊緣AI專案時,設定具體目標至關重要。目標主要分為三類別:系統目標、技術目標和價值目標。有效的目標需要與利害關係人和領域專家共同制定,以確定專案的最低可行效能特徵。

系統目標

邊緣AI系統很少是第一個也是唯一一個解決方案。大多數情況下,已經存在現有的解決方案。在開發AI應用程式時,將我們的解決方案與現有的解決方案進行比較是非常重要的。

圖表翻譯: 此圖示展示了現有解決方案與新AI解決方案之間的比較過程,以及如何設定系統目標來評估專案的成功。

內容解密:

  • 系統目標:需要與現有解決方案進行比較,以確定是否真正優於替代方案。
  • 評估:透過比較現有解決方案和新AI解決方案,來評估系統目標。

最小可行產品

在開發邊緣AI產品時,應識別出簡單且有用的步驟,以提供真正的價值。確定最小可行產品(MVP),並觀察其在真實世界中的表現,然後進行迭代。

例如,在生產線的品質控制系統中,若能夠檢測出一種特定型別的缺陷,也是一種改進。可以先訓練模型檢測特定型別的缺陷,然後與目前的手動檢測流程結合,提供實際的價值。

# 簡單的缺陷檢測模型範例
import numpy as np

def detect_defect(image):
    # 簡化的缺陷檢測邏輯
    if np.mean(image) < 128:
        return True  # 缺陷檢測
    else:
        return False  # 無缺陷

# 範例用法
image_data = np.random.randint(0, 256, size=(100, 100))
is_defect = detect_defect(image_data)
print(f"缺陷檢測結果: {is_defect}")

內容解密:

  • 缺陷檢測模型:簡化範例展示如何檢測缺陷。
  • detect_defect函式:根據影像平均值判斷是否存在缺陷。
  • 範例用法:展示如何使用該函式進行缺陷檢測。

透過限制範圍並設定明確的目標,邊緣AI專案可以實作更高的成功率和實用性。從小而具體的問題開始,逐步迭代和改進,最終可以達成最初的宏偉願景。

評估優先的開發方法

在開發過程中,優先考慮評估(evaluation-first approach)是一種非常強大的方法。這種方法的首要步驟是制定一套評估指標,這些指標需要足夠通用,以便衡量任何潛在解決方案的效能,無論是採用AI還是其他方法。

以零售業貨架補貨為例

假設我們正在開發一個邊緣AI應用程式,以幫助零售員工瞭解何時貨架需要補貨。一個常見的做法是關注所涉及的技術,設定一個技術目標,例如系統必須能夠以90%的準確率預測何時需要補貨。

內容解密:

這種做法的問題在於,它只關注了技術層面的效能,而沒有考慮到系統是否真正幫助了零售員工。員工通常能夠100%準確地判斷貨架是否為空,因此單純的準確率並不是一個有用的指標。

從更大的視角看問題

我們的真正目標是使零售員工能夠保證商店的貨架始終有貨,讓顧客有足夠的產品可供購買。因此,我們需要選擇一個更有意義的指標,例如特定貨架有貨的時間比例。我們的目標可能是讓特定貨架在平均上有90%的時間是有貨的。

內容解密:

透過這個指標,我們可以衡量當前系統(員工的手動努力)的表現,並與我們的目標進行比較。這樣,我們就能清楚地瞭解AI解決方案需要改進的地方。

升級現有的邊緣解決方案

在某些情況下,我們可能希望透過整合更先進的人工智慧來改進現有的邊緣佈署。例如,我們可能有一個根據簡單啟發式演算法的系統,該系統執行得尚可接受,但仍有改進的空間。

內容解密:

升級現有系統時,我們應該遵循與其他棕地專案(即利用現有硬體的專案)大致相同的設計流程。在某些時候,我們會發現可以重用之前的成果。同時,我們需要不斷地將新系統與原系統進行比較,確保新系統能夠以明顯的優勢超越舊方法。

技術目標

雖然系統目標對於確保我們正在構建正確的東西至關重要,但系統的技術方面也需要有自己的目標集。例如,瞭解AI演算法的當前和目標效能將幫助我們將開發工作引導到適當的領域。

關鍵字辨識模型的技術目標範例

假設我們正在開發一個用於智慧家居裝置的關鍵字辨識模型。模型的效能通常以誤接受率(false accept rate)和誤拒絕率(false reject rate)來表示。這兩個數字共同描述了模型犯錯的可能性。為了確保產品品質,我們可能會與利益相關者和互動設計師一起決定將誤接受率控制在小於5%,誤拒絕率控制在小於1%。

# 定義關鍵字辨識模型的評估指標
def evaluate_keyword_spotting_model(false_accept_rate, false_reject_rate):
    if false_accept_rate < 0.05 and false_reject_rate < 0.01:
        return "模型達到技術目標"
    else:
        return "模型未達到技術目標"

# 範例用法
false_accept_rate = 0.04
false_reject_rate = 0.009
result = evaluate_keyword_spotting_model(false_accept_rate, false_reject_rate)
print(result)

內容解密:

這個範例展示瞭如何定義一個函式來評估關鍵字辨識模型的效能。函式根據誤接受率和誤拒絕率是否達到預定的技術目標傳回相應的評估結果。

開發流程中的評估優先方法

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 邊緣AI應用程式設計最佳實務

package "圖論網路分析" {
    package "節點層" {
        component [節點 A] as nodeA
        component [節點 B] as nodeB
        component [節點 C] as nodeC
        component [節點 D] as nodeD
    }

    package "中心性指標" {
        component [度中心性
Degree Centrality] as degree
        component [特徵向量中心性
Eigenvector Centrality] as eigen
        component [介數中心性
Betweenness Centrality] as between
        component [接近中心性
Closeness Centrality] as close
    }
}

nodeA -- nodeB
nodeA -- nodeC
nodeB -- nodeD
nodeC -- nodeD

nodeA --> degree : 計算連接數
nodeA --> eigen : 計算影響力
nodeB --> between : 計算橋接度
nodeC --> close : 計算距離

note right of degree
  直接連接數量
  衡量局部影響力
end note

note right of eigen
  考慮鄰居重要性
  衡量全局影響力
end note

@enduml

圖表翻譯: 此圖示呈現了評估優先的開發方法的流程。首先,我們開始開發並定義評估指標。接著,評估當前系統的表現並設定技術目標。然後,我們開發AI解決方案,並進行測試和評估。最後,將解決方案佈署到生產環境並進行監控。