學術科研無從下手?27 條機器學習避坑指南,讓你的論文發表少走彎路

超神經HyperAI發表於2023-02-07

內容一覽:如果你剛接觸機器學習不久,並且未來希望在該領域開展學術研究,那麼這份為你量身打造的「避坑指南」可千萬不要錯過了。

關鍵詞:機器學習 科研規範 學術研究

機器學習學術小白,如何優雅避坑坑、讓自己的論文順利發表?

來自蘇格蘭赫瑞瓦特大學數學與電腦科學學院的 Michael A. Lones 副教授,曾在 2021 年專門發表了一篇論文--「How to avoid machine learning pitfalls: a guide for academic researchers」,對此進行了詳細論述。

閱讀完整論文 (V2):

Michael A. Lones 主要研究方向包括最佳化、機器學習、資料科學、複雜系統和非標準計算、以及在生物學、醫學、機器人和安全問題中的應用

在這篇論文中,作者從學術研究的視角出發,結合自己的科研經歷及教學經驗,收錄了在使用機器學習技術的完整鏈路中,頻繁出現、需要特別關注的 5 大問題,並提出了相應的解決辦法。

適用人群:

對 ML 領域比較陌生,只具備基礎 ML 知識的同學或學者

溫馨提示:本文聚焦學術界普遍關注的問題,如:如何嚴格評估和比較模型,使得論文能順利發表

接下來,我們將遵循 ML 模型訓練的完整流程,分階段展開敘述。

階段 1:建立模型前

很多同學一上來就急著訓練和評估模型,往往忽略了更重要的「做功課」,這些「功課」包括:

  • 專案的目標是什麼
  • 實現這一目標,需要怎樣的資料
  • 資料會不會有侷限性,如果有如何解決
  • 這一領域的研發進展如何,已經做了什麼

這些前置工作沒有做好,光著急跑模型,那麼最終很可能出現模型無法證明預期結論、科研工作無法發表等尷尬局面。

1.1 瞭解並分析資料

資料來源可靠、收集方法科學且資料質量高,會對論文發表大有裨益。這裡需要注意,被廣泛使用的資料集不一定都質量好,也有可能是因為它容易獲取。選取資料前先進行一些探索性的資料分析,排除資料的侷限性。

1.2 不要檢視全部資料,開始前就把測試資料區分出來

測試集的資訊洩漏到訓練過程,是機器學習模型不能泛化的一個常見原因。 為此,資料探索性分析階段,不要過於細緻地檢視測試資料,避免有意或無意地做出無法測試的假設,限制模型的通用性。

溫馨提示:做出假設是可以的,但是這些假設應該只被納入模型的訓練 (training) 中,而非測試 (testing) 中。

1.3 準備充足的資料

資料不夠可能降低模型的概括性和通用性,這取決於資料集的訊雜比 (Signal-to-Noise Ratio, SNR)。在機器學習研究領域中,一個常見的問題是資料量不夠,這時可以透過交叉驗證、資料增強等技術,提高現有資料的可用性。

1.4 積極向該領域專家請教

領域專傢俱備豐富的科研經驗,可以幫助我們明確需要解決的問題、最合適的特徵集和機器學習模型,以及指導我們研究成果的釋出, 起到事半功倍的效果。

1.5 做好文獻調研

學術進步是一個迭代的過程,每一項研究都提供了可以指導下一項研究的資訊。 忽視以前的研究,很可能會讓自己錯過有價值的資訊。與其寫論文的時候,才絞盡腦汁地解釋為什麼研究同樣的課題、為什麼不在現有的成果上開始研究,不如在開始工作前就做一個文獻綜述。

1.6 提前思考模型的部署問題

如果學術研究的最終目標,是建立一個可以在現實世界中部署的機器學習模型,則需要儘早考慮部署問題, 如環境限制對模型複雜度的影響、是否有時間限制、如何與軟體系統結合等等。

階段 2:可靠地建立模型

以一種有組織的方式建立模型非常重要,這使我們可以正確地使用資料,並充分考慮模型的選擇。

2.1 測試資料不能參與到模型訓練過程中

一但測試資料參與到了模型的配置、訓練或選擇中,會極大影響資料的可靠性和通用性,這也是已釋出的機器學習模型經常不能通用於現實世界資料的一個常見原因。

❎ 錯誤示例(注意規避):

  • 資料準備期間,用整個資料集變數的均值和範圍資訊進行 variable scaling(正確做法是隻在訓練資料中進行)
  • 在分割資料之前進行特徵選擇
  • 使用相同的測試資料評估多個模型的通用性
  • 在分割測試資料之前應用資料增強

為了避免以上問題出現,最好的辦法就是在專案開始前,就劃分出一個資料子集, 並且在專案結束時只使用這個獨立的測試集來測試單一模型的通用性。

溫馨提示:時間序列資料的處理要特別小心,因為資料的隨機拆分很容易造成洩漏和過擬合。

2.2 嘗試多個不同模型

世界上不存在放之四海皆通用的機器學習模型,我們的研究工作就是要找到適用於特定問題的機器學習模型。Python、R、Julia 等現代機器學習庫, 只需對程式碼進行少量修改,就可以嘗試多種模型,找到最有效的模型。

溫馨提示:

  • 不要使用不合適的模型,使用驗證集而非測試集來評估模型
  • 比較模型時,要最佳化模型的超引數,並進行多次評估,並在釋出結果時糾正多重比較。

2.3 不要使用不合適的模型

現代機器學習庫降低了機器學習的實施門檻,同時也使得我們很容易選用不合適的模型,如將適用於 categorical feature 的模型應用於包含 numerical feature 的資料集,或者在該使用迴歸模型的時候使用分類模型。在選擇模型時,應儘可能選用適合用例的模型。

2.4 深度學習有些時候並不是最優解

雖然深度神經網路 (DNN) 在某些任務上表現出色,但並不意味著 DNN 適用於所有問題, 尤其是當資料有限、 underlying pattern 相當簡單,或模型需要可解釋的時候,DNN 的表現可能並不如某些 old fashioned 機器學習模型,如隨機森林、SVM。

2.5 最佳化模型的超引數

超引數對模型的效能影響巨大,且通常需要與特定資料集相匹配。無目的地進行測試,可能並不是找到合適超引數的最佳方法。推薦使用超引數最佳化策略,如 random search 和 grid search。

溫馨提示:對於超引數數量巨大或訓練成本較高的模型而言,這些策略並不適用,可以藉助 AutoML、資料探勘 pipeline 等技術來最佳化模型的選擇及其超引數。

2.6 最佳化超引數及選擇 feature 時需要額外細心

超引數最佳化和特徵選擇是模型訓練的一部分,不要在模型訓練開始前,對整個資料集進行特徵選擇,這會使得資訊從測試集洩露到訓練過程中。最佳化模型的超引數或特徵,最好使用與訓練模型完全相同的資料,一種常見的技術是巢狀交叉驗證(也稱雙重交叉驗證。

階段 3:穩健地評估模型

不合理的模型評估非常普遍,這會阻礙學術研究的進展。因此,需要謹慎思考如何在實驗中使用資料、衡量模型的真實效能並進行報告。

3.1 使用恰當的測試集

使用測試集來衡量機器學習模型的通用性,並確保測試集的資料是合適的。 測試集不應與訓練集重疊,且需要涵蓋更廣泛的條件,如一個物體的攝影資料集,如果訓練集和測試集都是在晴天的室外收集的,測試集就不是獨立的,因為沒有捕捉到更廣泛的天氣條件。

3.2 分割資料前不要進行資料增強

資料增強有利於平衡資料集和提高機器學習模型的通用性和穩健性,需要注意的是資料增強應該只應用於訓練集,不涉及測試集,以防出現過擬合。

3.3 使用驗證集

使用一個單獨的驗證集來衡量模型效能,這包含一組不直接用於訓練,而是用於指導訓練的樣本。驗證集的另一個好處是可以進行 early stopping。

3.4 對模型進行多次評估

模型的單一評估並不可靠,可能低估或高估了模型的真正效能, 為此,需要對模型進行多次評估,大多涉及到使用不同的訓練資料子集對模型進行多次訓練。交叉驗證 (Cross-Validation) 是一種特別流行且種類眾多的方法,如 Ten-fold Cross-Validation。

溫馨提示:報告多次評估的均值和標準差的同時,建議保留單個分數記錄,以備後續使用統計檢驗 (statistical tests) 對模型進行比較。

3.5 保留一些資料來評估最終的模型例項

對模型例項的通用性進行可靠評估的最佳方法,可能就是使用另一個測試集。 所以,如果資料量足夠大,最好先保留一些,並用其對最終選定的模型例項進行無偏差 (unbisded) 的評估。

3.6 不要對非平衡資料集使用準確率

謹慎選擇評估機器學習模型的指標,例如,分類模型最常用的指標是準確率 (accuracy),如果是平衡資料集(每個類別在資料集中都有類似數量的樣本代表)效果就會很好;如果是非平衡資料集,準確率則可能是一個非常具有誤導性的指標。

在這種情況下,最好使用 F1 score、科恩卡帕係數 (κ) 或馬修斯相關係數 (MCC) 等對 class size imbalance 不敏感的指標。

階段 4:公平地比較模型

對模型進行比較是學術研究的基礎,但如果以不公平的方式進行比較,並且發表,就會帶偏其他研究人員。所以,需要確保在同一條件下評估不同模型,並正確使用統計檢驗 (statistical tests)。

4.1 對於模型而言,並不是數字越高效能越好

論文中常出現這種表述「此前研究中的準確率是 94%,本文模型準確率高達 95%,因此更好」。各種原因表明,更高的數字不等同於更好的模型, 如果模型是在同一個資料集的不同分割槽上訓練或評估的,可能效能差異教小;如果是用了完全不同的資料集則可能效能差異巨大。沒有進行相同數量的超引數最佳化也會影響模型效能差異。

因此,要想對兩個模型科學地進行效能比較,應該將模型最佳化到相同程度,並進行多次評估,然後用統計測試的方法確定效能差異是否顯著。

4.2 用統計檢驗比較模型

推薦用統計檢驗 (statistical tests) 比較兩個模型的效能差異。廣義上講,比較機器學習模型的 test 分為兩類:第一類用於比較同類模型例項, 如比較兩個訓練好的決策樹時,可以選用 McNemar 檢驗;第二類適用於更通用的模型比較, 如比較決策樹和神經網路哪個更適合時,選用曼-惠特尼 U 檢驗。

4.3 對多重比較進行校正

用統計檢驗比較兩個以上模型有些複雜,multiple pairwise test 類似多次使用測試集,這可能導致對顯著性 (significance) 過於樂觀 (overly-optimistic) 的解釋。

推薦使用多重檢驗 (multiple test) 校正來解決這個問題,如邦費羅尼校正 (Bonferroni correction)。

4.4 不要過於相信社群基準的結果

對於某些領域的問題,很多人會選用基準資料集來評估新機器學習模型的效能,因為大家都是使用相同的資料來訓練和測試模型,那麼比較起來就會更加直觀。這種方法有一些主要缺點。

首先,如果測試集的訪問不受限,則不能保證別人沒有把它作為訓練過程的一部分,這會導致對於結果的過度樂觀。此外,即使每個使用資料的人只使用了一次測試集,但總體而言,測試集被社群使用了很多次,這也會導致模型過擬合的發生。為此,應該謹慎地解讀基準資料集的結果,對效能的提高進行合理研判。

階段 5:報告結果

學術研究需要對知識有貢獻,這要求報告研究工作的整體情況,包括哪些工作成功、哪些失敗。 機器學習通常和 trade-offs 相關,一個模型在所有方面都比另一個模型好是很少見的。所以在報告結果時需要體現這一點。

5.1 報告需要透明

把所有研究工作都透明地分享出來, 這利於其他人重複這項實驗,也方便人們比較模型。清晰地記錄實驗及寫出整潔的程式碼,對自己和他人都有好處。機器學習社群越來越注重實驗的可復現,工作流程記錄不充分,可能會影響後續發表。

5.2 多種方式報告效能

在評估模型效能時,一個更嚴謹的方法是使用多個資料集, 這能幫助克服與單個資料集相關的任何缺陷,並給出模型效能的全面描述。為每個資料集報告多個指標是很好的做法,因為不同指標能呈現不同的結果,增加工作的透明度。

5.3 只針對資料進行歸納

不要提出無效結論,這會把其他研究人員帶入歧途。一個常見的錯誤是,發表訓練和評估模型的資料不支援的概括結論。模型在一個資料集上表現很好,不意味著在其他資料集上也做得好。雖然可以透過使用多個資料集獲得可靠的 insights,但從實驗中研究和推斷出的東西總是有限的。不要誇大發現,意識到侷限性。

5.4 謹慎報告顯著性差異

上文探討的統計檢驗,可以幫助檢驗模型間的差異。但統計檢驗並不完美,可能會低估或高估模型的顯著性,出現假陽或假陰的問題。此外越來越多的統計學家主張放棄使用置信度閾值 (confidence threshold)、直接報告 p 值來測定模型顯著性。

除了統計顯著性,另一個要考慮的問題,是兩個模型間的差異是否真的重要。因為只要樣本足夠,總是能找到顯著的差異,哪怕實際效能差異微乎其微。所以在判斷重要性時,可以衡量效應值 (effect size),方法包括 Cohen’s d statistic(更普遍)、Kolmogorov Smirnov(效果更好,推薦)等。

5.5 關注模型執行原理

訓練過的模型包含眾多有效資訊,但很多作者只報告模型的效能指標,對模型原理不作解釋。 研究的目的不是獲得比別人稍高的準確率,而是總結知識並分享給研究社群,進而增加工作成果發表的可能性,如,對於決策樹一類的簡單模型,提供模型視覺化;對於深度神經網路一類的複雜模型,考慮使用 XAI(可解釋人工智慧)技術提取相關資訊。

以上就是「避坑指南」的完整內容,期待每位剛接觸機器學習的同學,都能收好這份寶典、常讀常新,順利找到研究方向、選好課題,並早日順利發表論文!

期待各位的好訊息~

原文連結
*參考連結:[How to avoid machine learning pitfalls: a guide for academic researchers]
https://arxiv.org/pdf/2108.02...*

—— 完 ——

相關文章