在機器學習專案中,資料集的品質直接影響模型的效能。構建理想的資料集需要考量多個導向,包括資料的相關性、代表性、平衡性、可靠性、格式、檔案記錄以及大小。此外,領域專業知識在資料集建構過程中扮演著至關重要的角色,它能確保資料集準確反映真實世界場景,並有效引導模型訓練。資料為本的機器學習方法強調資料集的品質而非單純調整演算法引數,透過修復錯誤標籤、移除異常值、平衡資料等方式提升模型效能。對於邊緣 AI 應用,評估資料需求則更為關鍵,需考量任務型別、資料特性以及可用的資源,並透過實驗逐步調整資料集規模,以達到最佳的模型效能。

建立理想的資料集

在機器學習領域中,資料集的品質對於模型的表現至關重要。一個理想的資料集應具備多項關鍵特性,包括相關性、代表性、平衡性、可靠性、良好的格式以及適當的檔案記錄和大小。

相關性

資料集的相關性是指它是否包含與所要解決的問題相關的資訊。例如,若要開發一個利用心率感測器資料來評估運動表現的系統,則資料集必須包含心率感測器資料和運動表現的相關衡量指標。若計劃使用特定型別的感測器,則資料集最好是使用類別似裝置收集的資料。

代表性

代表性意味著資料集必須涵蓋現實世界中可能遇到的各種不同情況。例如,用於健康監測應用的資料集需要包含足夠廣泛的人群資料,以涵蓋所有可能使用該應用的人群型別。缺乏代表性的資料集將導致偏差。

平衡性

除了代表性之外,理想的資料集還應包含來自所有相關情況的平衡資訊。許多型別的機器學習演算法(包括深度學習模型)在處理平衡資料集時表現最佳。例如,若要訓練一個模型來計算跨城鎮行駛的車輛數量,則使用相同數量的汽車和腳踏車資料至關重要,即使腳踏車代表的實際數量較少。

可靠性

理想的資料集應該是始終準確的,盡可能少包含錯誤。如果存在錯誤,則這些錯誤應該均勻地分佈在整個資料集中,而不是集中在某些類別中。此外,資料集中的噪聲應該與現實世界條件下的噪聲型別和幅度相似。

良好的格式

相同的資料可以以多種不同的方式格式化。例如,影像可以以無限多種不同的格式、解析度和色彩深度來表示。在理想的資料集中,資料的格式應適合所要執行的任務。至少,資料集在其樣本中應具有一致的格式。

適當的檔案記錄

瞭解資料集的來源、收集方式以及各個欄位的含義至關重要。缺乏這些資訊,將無法確定資料集是否符合要求。

適當的大小

機器學習模型可以學習幾乎任何系統中的隱藏規則,只要提供足夠的資料。然而,更大的資料集會導致更長的訓練時間,並且從技術角度來看更難以處理。不同的問題需要不同數量的資料來解決,因此對於每個專案,都有一個收集更多資料的收益遞減點。目標應該是收集足夠的資料來解決問題。

程式碼範例:建立平衡資料集

import pandas as pd
from sklearn.model_selection import train_test_split
from imblearn.over_sampling import SMOTE

# 假設 df 是我們的原始資料集
df = pd.read_csv('data.csv')

# 分割特徵和目標變數
X = df.drop('target', axis=1)
y = df['target']

# 使用 SMOTE 進行過取樣以平衡類別
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X, y)

# 分割訓練和測試集
X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=42)

#### 內容解密:
此範例程式碼展示瞭如何使用 SMOTESynthetic Minority Over-sampling Technique技術來平衡資料集中的類別首先我們載入原始資料集並分割特徵和目標變數然後使用 SMOTE 對少數類別進行過取樣以使其與多數類別達到平衡最後我們將平衡後的資料集分割為訓練和測試集

圖表說明:理想資料集的特性

總之,建立一個理想的資料集需要綜合考慮多個因素,包括相關性、代表性、平衡性、可靠性、良好的格式、適當的檔案記錄以及適當的大小。透過滿足這些條件,可以提高機器學習模型的表現和泛化能力。

資料集的重要性與專業領域知識的結合

在實驗室中建立和測試邊緣 AI 系統需要一種資料集,而在真實世界條件下評估其效能可能需要另一種資料集。第 10 章將介紹多種評估邊緣 AI 系統的方法,並說明如何收集適合任務的資料型別。

每個 AI 專案都涉及將人類的領域專業知識提煉到電腦系統中。建立資料集的過程是大部分工作發生的地方。必須謹慎、有意圖和仔細考慮地進行這項工作。好訊息是,如果做得好,將大大增加成功的機會。

領域專業知識與資料集

領域專家,也被稱為主題專家(SMEs),是對您要解決的問題有深入瞭解的人。無論是什麼領域,都有人研究、經歷並深入瞭解該主題。

將問題領域的專業知識視為與使用 AI 演算法、訊號處理、嵌入式工程或硬體設計所需的知識不同的觀念非常重要。雖然領域專家也可能具備這些領域的技能,但某人是機器學習專家並不自動使他們有資格設計 AI 系統來解決任何問題。

例如,假設您正在為醫療保健市場建立邊緣 AI 產品。除了硬體和軟體工程師以及擅長建立 AI 應用程式的人員外,您的團隊還需要包括對您要解決的醫療保健問題有真正理解的領域專家。否則,您將冒著建立一個不如預期的產品的風險。

資料集和領域專家密切相關。每個 AI 產品都反映了用於開發、訓練和測試它的資料集。當產品使用機器學習時,演算法直接由資料決定。但即使是手動編碼的演算法,也只與用於測試它們的資料一樣好。

這意味著整個專案的結果取決於資料集的品質。此外,組織中唯一有資格瞭解這種品質的人是您的領域專家。他們對您要解決的問題的瞭解必須指導資料集的構建和企劃。無論您的團隊中有多少才華橫溢的資料科學專家,如果沒有對問題的正確洞察,他們的技能將是多餘的。

從本質上講,您的資料集是您產品和組織內領域專業知識的主要載體。由於它是使用領域專家的知識構建的,因此最終成為他們知識在數位形式的代表——幾乎就像一個應用程式介面(API),提供對他們捕捉的洞察力的存取。

這種編碼的知識將被您的團隊的其他成員用來幫助構建您的應用程式。例如,使用演算法的工程師將使用資料集來調整或訓練它們,而負責測試您的應用程式的人員將使用它來確保它在您需要的所有情況下都能正常運作。

所有這些都使得擁有足夠的領域專業知識變得至關重要。此外,由於您的領域專家不一定是建立和評估資料集的專家,因此他們需要與具有資料科學技能的團隊成員密切合作。建立有效的資料集需要協作。

但是,如果您無法取得領域專業知識怎麼辦?答案是坦率且可能不受歡迎。如果您的團隊在問題領域缺乏領域專業知識,那麼嘗試建立產品是不負責任的。您不僅會缺乏建立有效產品所需的知識,也缺乏瞭解自己是否建立了無效產品的洞察力。

資料、倫理和負責任的 AI

您的資料集品質將比其他任何因素都更能決定您的應用程式的社會後果。無論您多麼仔細地調查了專案周圍的倫理問題,並設計了一個既有益又安全的應用程式,您的資料集的侷限性決定了您瞭解和避免無意傷害的能力。

從負責任的 AI 的角度來看,您的資料集提供了兩個核心要素:

  1. 您嘗試建立的演算法系統的原始構建材料
  2. 您瞭解系統效能的最強大工具

您的資料集是您設計用來與之互動的真實世界情況的唯一詳細代表。您的整個應用程式開發回饋迴路都以它為媒介。

作為原始構建材料,如果您的資料集在任何方面都有欠缺,那麼不可避免地會導致系統效能不佳。更糟糕的是,同樣的缺陷將影響您瞭解或甚至注意到系統效能不佳的能力。

對於邊緣 AI 專案來說尤其如此,因為它們在邊緣佈署的性質意味著捕捉它們在現場表現如何的資訊通常具有挑戰性。您的資料集通常代表您評估模型效能的唯一機會,具有任何真正的精確性。

鑑於此,花足夠時間來做好這部分工作是極為重要的。

不足的資料導致悲劇發生

在「負責任地構建應用程式」中,我們瞭解了 Uber 的自動駕駛汽車系統的一次故障,導致一名行人死亡。雖然故障是系統性的,涉及程式和安全系統的不良設計,但核心問題是缺乏足夠的訓練資料。

來自 Wired 關於該事件的一篇文章中的以下引述提供了一些說明:

報告稱,Uber 的車輛是一輛改裝的沃爾沃 XC90 SUV,在事故發生前已經出現多次故障…

資料集建構的挑戰與邊緣AI的責任

在探討自動駕駛技術的發展時,Uber自駕車事故為我們提供了一個寶貴的案例。該事故發生於2018年,一輛Uber的自駕測試車在亞利桑那州坦佩市撞擊一名橫越道路的行人Elaine Herzberg,最終導致其死亡。調查報告指出,這起事故與自駕車的感知系統無法準確辨識Herzberg有關。

事故分析與AI的侷限

根據調查,Uber的自駕車在事故發生前的六秒鐘內偵測到Herzberg,但其系統先後將她識別為未知物體、車輛和腳踏車,不斷調整對她路徑的預測。Herzberg當時正推著載有塑膠袋的腳踏車橫越馬路,位於非人行橫道區域且照明不良,這種情況對Uber的系統提出了挑戰。

此事件凸顯了AI系統在「零樣本學習」(zero-shot learning)方面的不足。人類能夠根據先前的經驗和對世界的理解,輕易辨識出從未見過的物體或情況。然而,目前的AI系統在這方面仍有很大限制。

資料集的重要性與挑戰

Uber自駕車的演算法依賴於其訓練資料集來學習各種駕駛情境。然而,由於Herzberg的情況相對罕見,資料集未能提供足夠的範例來訓練模型正確辨識這種情況。這凸顯了資料集建構中的一個重大挑戰:現實世界的變化無窮無盡,資料集難以涵蓋所有可能的情況組合。

最小化未知因素

為了應對這一挑戰,有兩種主要方法:

  1. 限制模型的應用範圍:相較於通用型自駕系統,將自駕車限制在特定的地理區域或應用場景(如高爾夫球場內的自駕車)可以減少資料集需要涵蓋的多樣性。

  2. 提升領域專業知識:透過增加對特定領域的專業知識,可以減少「未知未知」(unknown unknowns)的數量。如果Uber能夠邀請更多的城市交通專家參與其資料集的構建和評估,或許能夠避免這起悲劇。

確保領域專業知識的重要性

目前,機器學習模型的訓練工具變得越來越容易取得,但這也誘使開發者進入他們並不熟悉的領域進行應用開發。在COVID-19疫情期間,許多研究人員和工程師開發了使用醫學影像診斷感染的專案,但大多數專案因缺乏臨床和機器學習領域的專業知識而未能達到臨床實用標準。

邊緣AI的責任

在邊緣AI領域工作的人員有責任確保系統的品質,不僅在組織內部,也需要跨組織合作。關注資料集品質和相應的佈署策略對於確保AI系統的安全性和有效性至關重要。

圖表說明

此圖示展示了自駕車系統中資料集建構與領域專業知識之間的關係。

圖表翻譯: 此圖示呈現了現實世界的複雜性對資料集建構的挑戰,以及領域專業知識在提升模型準確性和確保系統安全性方面的重要性。

資料為本的機器學習

傳統上,機器學習從業人員專注於選擇最佳的特徵工程和學習演算法組合,以在特定任務上取得良好的效能。在此框架下,資料集被視為固定的元素,除了一些基本的清理之外,很少被操縱。它們提供了輸入和正確性的參考,但不被視為需要調整和微調的物件。

近年來,人們越來越認識到資料集不應被視為靜態物件。資料集的組成對訓練在其上的模型的效能有著強烈的影響,從業人員開始修改資料集以在任務上取得更好的效能。

這種新的思維方式被稱為「資料為本的機器學習」。在資料為本的工作流程中,更強調提高資料集的品質,而不是調整演算法的引數。

資料為本的機器學習遵循著古老的計算原則「垃圾進,垃圾出」——即如果提供給電腦程式的輸入品質差,那麼期望它做出好的決定是不合理的。

資料為本工作流程與工具

資料為本的工作流程和工具幫助開發者瞭解其資料的品質以及如何解決其中的問題。這可能涉及:

  • 修復或移除錯誤標籤的樣本
  • 移除異常值
  • 新增特定資料以改善表示
  • 重新取樣資料以改善平衡
  • 新增和移除資料以考慮漂移

內容解密:

上述工作流程涉及多個關鍵步驟,每一步驟都對最終模型的效能有直接影響。首先,修復或移除錯誤標籤的樣本是確保模型學習正確模式的基礎。接著,移除異常值可以避免模型被不正常的資料幹擾。新增特定資料和重新取樣資料則是為了確保模型能夠公平地對待所有類別,避免因資料不平衡而導致的偏差。最後,考慮漂移是因為現實世界的資料分佈可能會隨著時間變化,因此需要不斷更新資料集和模型。

值得注意的是,所有這些任務都需要領域知識。在某些方面,向資料為本的機器學習轉變是對領域知識在獲得令人滿意的機器學習系統效能方面的重要性的認可。

資料漂移的概念

漂移是指現實世界隨著時間而變化的想法。資料集和模型必須不斷更新以考慮這種變化。

資料為本方法的優勢

資料為本的方法將資料集視為需要定期維護的活體實體。這種維護是值得的,因為它既減少了訓練有效模型所需的演算法工作量,也減少了所需的資料量。一個具有較少樣本的高品質資料集往往優於具有更多樣本的低品質資料集。

成功的現實世界專案通常將資料為本的方法與自動化發現有效演算法引數的現代工具(如AutoML系統)相結合。這些工具在面對高品質資料時,可以很好地探索設計空間並提出有效的模型。

估計資料需求

在邊緣AI專案的初始階段,人們最常問的問題是「我需要多少資料?」不幸的是,這個問題並不容易回答。不同專案的資料需求差異很大。

通常,機器學習專案的資料需求遠高於僅依賴訊號處理、啟發式和其他手動編碼演算法的專案。在這些情況下,您主要將使用資料進行測試——因此,雖然您仍然需要足夠的資料來保證您的資料集具有代表性,但您不需要許多機器學習演算法所需的每種型別條件的大量範例。

如何估計資料需求

瞭解特定問題的資料需求的最佳方法是尋找先例。有沒有解決類別似問題的例子,可以讓您瞭解需要多少資料?

網路是這方面的最佳資源。快速搜尋可以找到科學論文、基準測試、開源專案和技術部落格文章,這些都可以提供大量的見解。例如,Papers with Code網站有一個「State-of-the-Art」部分,列出了各種任務的基準資料集,以及隨著時間推移在這些任務上取得的效能。

如果我們正在開發一個關鍵字檢測應用程式,我們可以檢視Google Speech Commands資料集的結果,該資料集在撰寫本文時已達到98.37%的準確率。深入研究資料集本身,我們發現該任務涉及在10個關鍵字之間進行分類別,並且該資料集對每個關鍵字有1.5-4k個發音。如果我們的任務足夠相似,那麼這些數字就給出了我們可能需要的資料量的大致估計。

另一個好主意是探索您問題領域中專門設計用於處理最小資料的工具。深度學習模型可能特別渴望資料:是否有適合您的使用案例的經典機器學習替代方案?如果您的問題需要深度學習,是否有可用的預訓練特徵提取器可以透過遷移學習適用於您的使用案例?

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 機器學習資料集建構與最佳實務

package "資料集建構原則" {
    package "資料品質特性" {
        component [相關性] as relevant
        component [代表性] as represent
        component [平衡性] as balance
    }

    package "資料管理" {
        component [可靠性] as reliable
        component [格式標準] as format
        component [文檔記錄] as doc
    }

    package "資料為本 ML" {
        component [錯誤標籤修復] as fix
        component [異常值處理] as outlier
        component [邊緣 AI 需求] as edge
    }
}

relevant --> represent : 領域知識
represent --> balance : 樣本均衡
balance --> reliable : 品質確保
reliable --> format : 一致性
format --> doc : 可追溯
fix --> outlier : 資料清理
outlier --> edge : 部署考量

note right of balance : 避免偏差\n類別均衡
note right of edge : 資源評估\n規模調整

@enduml

圖表翻譯: 此圖示展示瞭如何根據任務相似性來估計資料需求。如果任務足夠相似,可以直接使用相似任務的資料需求;如果不相似,則需要探索其他工具或方法,最終根據資料品質來調整需求。

機器學習專案的資料需求評估與實踐

在開發邊緣AI(Edge AI)應用時,資料需求評估是至關重要的第一步。合適的資料量不僅能夠確保模型的準確性,還能節省後續的開發成本與時間。本篇文章將探討如何評估機器學習專案的資料需求,並提供實用的工作流程。

資料需求的多樣性

不同機器學習任務對資料量的需求差異甚大。以關鍵字檢測(keyword-spotting)為例,最近的研究顯示,只需五個範例即可訓練出有效的模型(Mazumder et al., 2021)。表7-1列出了常見任務的相對資料需求。

常見任務的資料需求

任務相對資料需求備註
時間序列分類別數位訊號處理(DSP)可完成大部分工作,使訓練變得更容易。
時間序列迴歸由於需要更精細的標籤,因此比分類別更具挑戰性。
非語音音訊分類別需要多樣化的資料來涵蓋不同的背景噪音和環境聲學特性。
語音音訊分類別低或高傳統上需要數小時的資料,但新的少樣本技術降低了這一需求。
可見光譜影像分類別使用在公開資料集上訓練的模型進行遷移學習,使此任務相對簡單。
可見光譜物件檢測遷移學習可用,但比分類別更具挑戰性。
非可見光譜視覺模型通常無法使用遷移學習,因此資料需求更高。

為何難以給出精確的資料需求量

儘管有上述指導原則,實際的資料需求仍會因專案而異。新工具和技術的不斷發展,也會影響所需的資料量。常見任務通常有訊號處理或學習技術可供利用,從而減少資料需求。

估算資料需求的實用工作流程

在初步研究之後,下一步是進行實驗,以理解所選的特徵工程和機器學習流程是否能夠達到足夠好的結果。

步驟1:收集並精煉小規模資料集

該資料集應滿足理想資料集的所有要求,除了規模外。本章其餘部分將幫助您瞭解如何將其調整到理想狀態。

步驟2:選擇候選模型

從最簡單合理的模型開始,因為它們通常最容易訓練。

步驟3:將資料集分成多個相同大小的區塊

使用分層隨機抽樣,確保每個區塊的平衡性和分佈與原始資料集相似。初始可分為約八個區塊。

步驟4:在一個區塊上訓練簡單模型並記錄效能指標

可使用超引數最佳化工具來排除超引數選擇的影響。

步驟5:增加一個區塊,重複訓練模型並記錄效能指標

持續此過程,直到使用整個資料集。

步驟6:繪製效能指標圖表

觀察曲線形狀,以瞭解新增樣本的影響。

圖表解讀

圖7-2展示了兩種可能的情況:

  • 左圖顯示持續新增資料可能會提高效能。
  • 右圖顯示效能已達到瓶頸,新增相同型別的資料不太可能帶來顯著改善。

程式碼範例:繪製效能指標圖表

import matplotlib.pyplot as plt

# 假設 performance_metrics 是儲存效能指標的列表
performance_metrics = [0.6, 0.7, 0.75, 0.78, 0.8, 0.81, 0.815, 0.82]

# 繪製圖表
plt.plot(performance_metrics)
plt.xlabel('資料量')
plt.ylabel('準確率')
plt.title('效能指標隨資料量的變化')
plt.show()

#### 內容解密:

此程式碼使用 matplotlib 函式庫繪製效能指標隨資料量變化的圖表。performance_metrics 列表儲存了每次新增資料區塊後的效能指標。透過 plt.plot() 將這些指標繪製成曲線,並新增標籤和標題,使圖表更具可讀性。這有助於直觀地理解新增資料對模型效能的影響。

取得資料的方法

構建高品質資料集的一大挑戰是採集資料本身。常見的資料採集方法包括:

  1. 從零開始收集全新資料集。
  2. 將資料收集工作外包給其他團隊或第三方。
  3. 使用公開資料集。
  4. 重用來自合作夥伴或內部資料儲存的現有資料。
  5. 重用先前成功的AI專案中的資料。