如何寫一篇不水的機器學習論文?
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
還在學師階段的研究生以及從業新手們,想在機器學習研究中少走彎路嗎?
或許下面這篇論文可以幫到你:
《如何避免機器學習研究中的陷阱?一本給學術研究人員的指南》

作者是英國赫瑞-瓦特大學數學與計算機科學學院的副教授,同時也是愛丁堡機器人中心的成員,博士畢業已經十多年,這篇17頁的論文主要介紹了機器學習學術研究中的一些常犯錯誤,以及如何避免。
指南共涵蓋了機器學習過程的五大方面:建模前如何準備,如何建出可靠的模型,如何穩健地評估模型,如何公平地比較模型以及如何報告結果。

一位已經從業的機器學習研究員稱贊該論文很有價值,因為文中提到的所有錯誤他在博士學習和工作期間中都遇到很多次。他準備讓后面所有新入職的工程師都好好看看。

不少人則認為該指南的意見可能并不受歡迎,因為很多都是研究人員本該知道的基本常識,比如多次重復實驗并報告平均值和方差進行嚴格比較,但他們就是為了方便或者讓數據更好看而選擇性忽視。

下面就詳細看看作者都提了哪些常見錯誤。
建模前的準備
為了得到符合預期用途的模型、可以順利發表論文的結果,建模之前你需要做好以下6點準備:
1、確保花時間研究你要用的數據集,來源可靠、質量有保證。
2、但不要查看測試數據,防止先入為主做出某些假設導致最終模型通用性差。
3、保證數據量足夠大,當然保證不了也是常有的事兒,解決辦法:
比如評估模型時交叉驗證數據、采用數據擴充技術(數據集中某類數據不夠時也可采用)。
但總的來說,數據不夠模型就不能設計得太復雜,不然分分鐘給你過擬合。
4、要和相關領域專家談談,防止研究脫離實際,并且他們也可以幫助你向最合適的期刊/受眾發表。
5、搜遍相關文獻,雖然發現別人已經研究過了很沮喪,但是寫論文時你該怎么解釋為什么要覆蓋相同的領域。
6、一定要提前考慮模型部署的問題:大部分學術研究最終都是要落地吧?好好考慮落地場景的資源、時間限制等問題來設計模型。
如何建出可靠的模型
1、不要讓測試數據參與到訓練過程中(這點前面也已強調過)。
2、嘗試不同的ML模型,別套用,具體問題具體分析找出最適合解決你的問題的那個。
“湊合”的例子包括將期望分類特征的模型應用于由數字特征組成的數據集、將假定變量之間沒有依賴關系的模型應用于時間序列數據,或者只相信最新的模型(舊的不一定不合適)。
3、一定要優化模型的超參數。使用某種超參數優化策略比較好,這樣在寫論文時也好整。除了數據挖掘實踐之外,可以使用AutoML技術優化模型及其超參數的配置。
4、在執行超參數優化和特征選擇要小心:防止測試集“泄漏”,不要在模型訓練開始之前對整個數據集進行特征選擇。理想情況下應使用與訓練模型所用數據完全相同的數據。
實現這一點的常用技術是嵌套交叉驗證(也稱為雙交叉驗證)。
如何穩健地評估模型
對模型進行不公平的評估,很容易讓學術研究的水變渾濁。
作者一共提了5點:
1、一個模型在訓練集上的表現幾乎毫無意義,保證測試集與訓練集之間的獨立。
2、在連續迭代多個模型,用前面的數據指導下一個的配置時使用驗證集,千萬不要讓測試集參與進來。可以根據驗證集對模型進行測量:當分數開始下降時,停止訓練,因為這表明模型開始過擬合。
3、對模型多次評估,防止低估/高估性能。十次交叉驗證是最標準的做法,對很小的數據類進行層化也很重要;需要報告多個評估的平均值和標準偏差;也建議保留單個分數記錄,以防以后使用統計測試來比較模型。
4、保留一些測試數據以無偏評估最終的模型實例。
5、不要對不平衡的數據集使用準確度(accuracy)指標。這個指標常用于分類模型,不平衡數據集應采用kappa系數或馬修斯相關系數(MCC)指標。
如何公平地比較模型
這是非常重要的一環,但很驚訝的是很多人都比不對,作者表示一定要確保在同一環境中評估不同的模型,探索多個視角,并正確使用統計測試。
1、一個更大的數字不意味著一個更好的模型。應將每個模型優化到同等程度,進行多次評估,然后使用統計測試確定性能差異是否顯著。
2、要想讓人相信你的模型好,一定要做統計測試。
3、進行多重比較時進行校正:如果你以95%的置信水平做20個成對測試,其中一個可能會給你錯誤的答案。這被稱為多重性效應。最常見的解決方法是Bonferroni校正。
4、不要總是相信公共基準測試的結果。
使用基準數據集來評估新的ML模型已變得司空見慣,你以為這會讓結果更透明,實際上:
如果測試集的訪問不受限,你沒法確保別人沒有在訓練過程中使用它;被多次使用的公共測試集上的許多模型可能會與之過度匹配;最終都會導致結果樂觀。
5、考慮組合模型。
如何報告結果
學術研究的目的不是自我膨脹,而是一個貢獻知識的機會。為了有效地貢獻你的想法,你需要提供研究的全貌,包括哪些有效哪些無效。
1、保持你所做所發現的成果透明,這會方便其他人更容易地在你的工作基礎上擴展。共享你的代碼也會讓你在coding的時候更認真。
2、提供多個測試集上的報告,為每個數據集報告多個度量指標(如果你報告F值,請明確這是F1得分還是精度和召回率之間的其他平衡;如果報告AUC,請指出這是ROC曲線下的面積還是PR下的);
3、不要在結果之外泛化,不要夸大,意識到數據的局限性。
4、報告統計顯著性時一定要小心:統計人員越來越多地認為,最好不要使用閾值,而只報告p值,讓讀者來解釋這些值。
除了統計意義之外,另一件需要考慮的事是兩個模型之間的差異是否真正重要。
5、最后,再回過頭完整的看一眼你的模型,除了報告性能指標,看看它能解決多少實際問題。
以上就是所有的內容,作者表示,部分意見可能有爭議,內文也并非詳盡無遺,因此提供了很多參考鏈接供大家進一步參考。
另外理論總是落后于實踐,我們今天認為正確的東西明天可能不正確,因此大家都要以開放的心態面對機器學習,緊跟最新技術進展,謙虛地接受新知識。
更多意見歡迎在評論區補充。
指南地址:
https://arxiv.org/abs/2108.02497