當AI模型表現不好,該從哪裡找問題?

AI數據 AI模型

【若水導讀】優化AI模型表現的三步驟:
1. 調整學習數據的Underfitting問題
2. 調整測試數據的Overfitting問題
3. Debug AI 模型

《2021 AI數據處理實戰攻略》,若水邀請到前趨勢科技 (Trend Micro)資深技術經理張佳彥,分享多年來每天管理AI團隊、專案的落地實戰經驗。

在前幾堂的AI數據課,一路介紹了如何定義AI商業命題、精準數據,到找到適合的演算法。終於來到AI模型上線的最後一哩路,還有最後一個難題需要解決:如果AI模型的表現一開始就歪掉,該如何改善?

AI模型學歪,是哪邊出了問題?

所謂AI模型,是指「從數據取出特徵,經由演算法訓練出來的一種邏輯」。也就是說,構成AI模型要素有三個:「數據、特徵及演算法」。

AI數據 AI模型

( 圖片來源 : 趨勢科技 )

假如AI模型訓練成果不佳,可以從幾個思考點著手。例如,會不會是數據品質不佳、數據標註不到位,或數據特徵選擇有偏誤?或者,其實是演算法選擇錯誤?有時候,模型學習成效不佳的答案,也有可能以上皆是。

因此,PM在運作商業AI專案時,與其用開放式問法,詢問工程師「為什麼模型會學歪?」,更建議先縮小問題範圍,逐一檢討原因可能出在哪個環節,更能有效溝通。

找出問題可能的原因,就可以進一步建立Debug模型的流程。

如何從零到一,完整建立Debug模型的流程?

訓練一個AI模型,概念上其實很像教小朋友學東西,餵給它畫過重點的教材(標註過的學習數據),再發考卷(測試數據)給它,看看它有沒有正確學習。

「模型訓練成效不佳」這幾個字好像有點抽象,再說得更白話一點就是,明明已經餵給機器標註好的正確答案,機器還是學錯。這種情況通常被稱為Underfitting(欠擬合)。

想改善Underfitting的問題,有些人會先懷疑,用來測試機器學習成效的測試數據(Testing Data),哪裡出了問題,但步驟正好相反。應該先回過頭,檢查當初餵給機器學習的學習數據(Training Data),是否哪邊出了差錯?

學習數據 (Learning Data) 之所以表現不佳,有三種可能的原因。

( 圖片來源 : 趨勢科技 )

第一種,叫做Feature Collision,也就是兩種截然不同的目標物件,卻取出相同的數據特徵。例如,要訓練AI模型分辨狗和貓,理論上應該取差異較大的體型或臉型做特徵,但如果只取毛色和體重,這樣機器難以分辨相同重量黑貓和黑狗的差異。

遇到這種情況,需要增加學習的特徵數量,模型才能分辨出兩者的不同。

第二種原因和AI數據標註的品質有關。明明是一樣的物件特徵,數據標註時卻誤下不同的標籤,導致機器混淆。以自駕車AI模型的學習數據 (Learning data) 為例,如果兩輛小客車,有一輛被正常標註為小客車,另一輛卻被誤標為公車,機器就會因此學歪,不清楚哪個版本為真。

這也是為什麼前面幾篇反覆提到,精準數據收集和數據處理,對AI模型學習有很大的影響,在下數據特徵和標註時,需要被仔細討論,當餵進去的數據夠精準,AI模型學習才能真正學得好。

學習數據 (Learning Data) 表現不佳,還有第三種可能,就是演算法複雜度不足,或是訓練出了問題。

選用哪種演算法,和商業命題的複雜程度息息相關,面對比較複雜的商業命題,如果使用的演算法太過簡單,AI模型就很可能學不好。就像記性不好的學生,無法背起很多課文。上一堂課提到的Tree Base演算法是不錯的入門選擇,可以不用更換演算法,透過調整參數,來決定AI模型的複雜度。另外複雜度高的模型,如果訓練不足,也可能造成在學習數據上表現不佳。

綜合以上,要Debug一個AI模型,首先要檢查數據特徵取得對不對、夠不夠,標註品質有沒有問題,是否有足夠複雜的模型以及充足的訓練,再做模型重新訓練(Retrain)。

如果學習數據 (Learning Data) 的表現都沒問題才會進到下一步驟:確認測試數據 (Testing Data) 的表現有沒有問題。

學習數據OK,如何校正測試數據?

測試數據(Testing Data)表現不佳,是什麼樣的概念?

用一個簡單的比喻,就像AI模型被訓練成不懂得舉一反三的書呆子,只會分辨出學習過的數據,沒有學過的數據都不會。甚至到後期,模型還會硬記一些正常人看來非正規的特例,把它們當成常規答案。

這種情況被稱為Overfitting(過擬合),可能是演算法複雜度太高造成反制,導致AI模型強記了學習數據。背後的原因,可能是當初的AI數據標註不夠精準,或者學習數據的量太少,模型的參照對象不足。

要解決這個問題,可以試試做模型「正規化(Regularization)」。簡單來說就是利用調整模型優化函數(Cost Function),適度降低模型的複雜度,以得到較好的測試結果。

但世事難料,有時候即使做了正規化,工程師用不同特徵試了半天,仍然找不到一個提升測試數據成效的方法,怎麼辦?

這時候,建議回頭來觀察數據本質:你的學習數據和測試數據,性質是不是差很多?

機器學習 (Machine Learning) 根據商業命題,背後涉及很多複雜的情境,很難有百分之百完美的結果,只能力求趨近理想值。對於機器學習,有個假設性的理想狀況:學習數據和測試數據的分佈一致,學習效果才會最好。如果這兩者本質相差太大,就很難達到好的成效,訓練起來會非常辛苦。

(圖片來源:pexel)

舉個例子,假如一個文字辨識AI人工智慧,使用的學習數據是阿拉伯數字,但測試數據卻是繁體中文字,那麼可以想像,即使把繁體中文的測試數據,丟進一個訓練良好、以阿拉伯數字為基礎邏輯的AI模型當中,也很難提高模型表現,因為數據屬性本來就不相同。

如果你真的需要在兩種數據差異很大的前提下,努力提高模型成效表現,有一個方法可以試試:從測試數據裡面拿一半出來,當成學習數據餵給模型。如此一來,模型就開始學會如何辨識繁體字,成效會顯著提升。

學習數據表現穩定,進到測試數據的階段後,只需要透過上述方式,先檢查學習數據和測試數據之間的差異是否很大?如果重新訓練後成效沒問題,後續靠增加數據量(Data Point)來提升AI模型成效即可。

如此一來,就是建立Debug AI模型的完整流程。

在其他攻略,會和大家分享如何建立一個能夠協助數據標註兼判斷的模型系統(Label System)、效益評估,以及怎麼在企業內部推動DevOps精神的經驗分享。期待相見。

歡迎分享給你的朋友,或進一步閱讀系列文章。

Back to Top
Close