編譯:Don、維克多、琰琰近日,Michael A. Lones教授在arXiv提交了一篇論文,全面論述了機器學習在實際應用中的常見陷阱以及對應方法,以幫助機器學習的學術小白們快速入門。論文地址://arxiv.org/pdf/2108.02497.pdfMichael A. Lones是愛丁堡赫瑞瓦特大學數學與計算機科學系副教授,主要研究研究涵蓋優化、數據挖掘、醫學信息學、系統生物學和非標準計算等。作為一名資深機器學習領域專家,Michael 更關注學術界,而非工業界(工業界水太深,還得教會你怎麼勸酒哈哈)。這篇論文的經驗分享,是他在實際的機器學習教學和研究中積累的知識。不同於其他普遍的機器學習方法,本文僅反映學術界關注的一些重點問題,比如如何嚴謹地評估和比較機器學習模型,如何在論文中更好的論述自己的工作等。為了使本文更加生動和易讀,Michael 採用了簡單明了的「該做什麼,不該做什麼」的編寫風格來,以免大家還得費勁巴拉的「總結本段大意、總結文章大意」。總體來看,本文更側重於學術研究背景下的常見問題,比如學術狗們需要在論文里同時對若干種方法進行嚴格的論述和比較,並從現象中挖掘出有效的結論,升華工作的深度和內在。具體而言,它涵蓋了機器學習的五個階段:
如果信噪比較高,也就是有效信息的比例較高的話,模型只需要較少的數據就能學到這種關聯性;但如果數據集的信噪比很低,噪聲太大,就需要用特別多的數據才能教會模型。但實際情況是,數據獲取的成本太昂貴了,我們通常無法得到更多的數據,這個問題普遍存在於機器學習的各個領域。此時便可以使用交叉驗證來更高效地利用有限的數據。當然,我們還可以使用數據增強技術(可見[Wong et al., 2016, Shorten and Khoshgoftaar, 2019])來增加數據量,這種技術對於提升小數據集上的機器學習性能是相當有效的,尤其是在數據集類別不平衡時,也就是某些子類的數據量有限的情況下。類別不平衡通常是指某些類別的樣本量會比其他類別少,相關研究可見Haixiang等人[2017]的處理方法。如果數據量也十分有限,還要控制好機器學習模型的複雜度,別引入太多的參數。比如像深度學習網絡,很多大模型的參數量可能會輕輕鬆鬆超過小數據集中的樣本量。總之,無論是通過哪種解決方法,最重要的是儘早發現數據量的問題,並提出一個合適的方案緩解它。
例如,在數據準備期間,使用整個數據集的均均值和方差對原始數據進行縮放或者歸一化。但實際上我們應該只能用訓練集的均值和方差對數據進行預處理,測試集中的數據是不能參與均值方差的計算的。其他常見的信息泄漏情況是在劃分數據之前就進行了特徵選擇,以及使用相同的測試數據集來評估多個模型的通用型。 為了避免發生這些問題,我們應該在項目伊始就劃分出一個獨立的數據子集,並在項目結束的時候只用這個獨立的數據子集來評估一個單一模型的通用型。更詳細的討論可以參考[Cawley and Talbot, 2010]和[Kaufman et al., 2012]的論述。
比如Python(Scikit-learn[Varoquaux等人,2015])、R語言(如caret[Kuhn,2015])、Julia(如MLJ[Blaom等人,2020])等,它們能夠很輕鬆的對模型進行參數的搜索、超參的調整和比較,從而低成本地生成多個模型。所以何樂而不為呢?多嘗試一些模型,找出哪個最有效。在「沒有免費的午餐」定律中,重要的是如何避免「NIH綜合症(not invented here syndrome)」,它是指人們不願意使用、購買或者接受某種產品、研究成果或者知識,不是出於技術或者法律等因素,而只是因為它源自其他地方,可以理解成一種傲慢和偏見。放在自己的系統中,就是避免由於自大和狂妄,導致忽略那些不是自己所提的改進點上帶來的改進。這可能會導致我們忽略對某個特定問題的最佳模型。
超參數指影響的是模型配置的預設參數。許多模型都有超參數,比如支持向量機中的核函數、隨機森林中的樹,以及神經網絡的架構。大部分超參數都會顯著影響模型性能,並且沒有「一刀切」的解決方法。也就是說,它們需要適合的特定數據集,以最大限度地利用模型。 隨機搜索和網格搜索是目前常用的超參數優化策略,這兩種策略雖然編寫簡單,但很難擴展到大量超參數或訓練成本很高的模型中。因此,我們還需要探索更智能的搜索最佳配置的工具,相關研究可參考[Yang and Shami,2020]。此外,除了數據挖掘管道的其他部分外,我們還可以使用AutoML技術優化模型及其超參數的選擇,相關綜述可參見[He,2021]等人的工作。
5. 優化超參數和特徵選擇時要小心
2018年Cai等人的調查已經發現,特徵選擇是模型訓練的一個常見階段。一般而言,執行超參數優化和特徵選擇的關鍵,在於要將其視為模型訓練的一部分,而不是在模型訓練之前對其進行操作。但事實上,我們經常就是在模型訓練開始之前對整個數據集進行特徵選擇,而這將會導致測試集的信息提前泄漏給訓練過程。理想情況下,如果要優化模型使用的超參數或特徵,應使用與訓練模型完全相同的數據。實現這一點的常用技術是嵌套交叉驗證(也稱為雙交叉驗證),它涉及到在主交叉驗證循環內作為額外循環進行超參數優化和特徵選擇。相關研究可參見[Cawley and Talbot,2010]。
首先,工作要儘可能的透明,給別人「站在你肩膀上」的機會。用通俗易懂的方式分享模型是非常好的方式,例如你能用一個腳本實現論文中所有實驗,那麼在發表論文時候,請分享這個腳本,這可以讓其他人輕鬆復現,同時也能增加你的信心。 這也會促使你更加小心的做研究,寫出更加乾淨的代碼,仔細的記錄實驗。值得一提的是,可重複性在機器學習社區被提到的次數越來越多,所以不透明的工作可能在未來無法發表。如何提高機器學習研究的可重複性:[Pineau et al., 2020]//arxiv.org/abs/2003.12206
2. 用多種方式體現結論
在評估和比較模型的時候,使用多個數據集進行測試是一種嚴謹的方法。這有助於克服單個數據集的缺陷,並有助於模型的完整性描述。另外,採用多個指標報告模型在數據集上表現,也能從不同的角度說明模型的性能。例如,如果決定用準確率衡量模型,那麼如果加上對「類別失衡不太敏感」的指標則是極好的。如果使用部分指標,如精度、召回率、敏感度或特異度,也要包括一個能更全面地反映模型錯誤率的指標。此外,清晰、明確的指標也對解釋模型有好處,例如如果報告AUC,請指明這是ROC曲線還是PR曲線下的區域。指標討論請見[Blagec et al., 2020]//arxiv.org/abs/2008.02577
3. 數據支撐論據
為了避免其他研究員誤入歧途,所以請不要提出無效的結論。一個常見的錯誤是:論文陳述背後沒有訓練和測試數據支撐。一個模型在某個數據集上表現優秀,並不意味着在其他數據集上也表現良好。所以,能從實驗研究中推斷出的東西總是有限的。一個重要原因是抽樣偏差,即數據對真實世界並沒有足夠的代表性。另外,數據與數據之間可能存在重疊,非獨立性的數據也有可能讓模型產生偏差。 因此,不要過分渲染你的發現,並意識到其局限性。機器學習社區數據集調查:[Paullada et al., 2020]//arxiv.org/abs/2012.05345
4.謹慎使用統計檢驗
統計檢驗並不完美,保守的方法傾向於低估;自由(liberal)的方法傾向於高估。所以一個現實積極結果的測試並不總代表有意義,消極的測試結果也並不代表無意義。除了統計學意義之外,另一個需要考慮的問題是兩個模型之間的差異是否真正重要。如果你有足夠的樣本,即使實際的性能差異微不足道,也可以找到顯著的差異。所以,為了更好地說明某件事情是否重要,可以測量效應大小。常見的方法例如Cohen’s d統計、Kolmogorov-Smirnov等等。 p值的討論參見[Betensky, 2019]://www.tandfonline.com/doi/full/10.1080/00031305.2018.1529624 5.洞察模型訓練過的模型包含很多有用的信息。但許多研究者只說模型的性能指標,並沒有對模型實際學到的東西給出見解。請記住,研究的目的不是為了獲得比別人高一點的準確率,而是為了產生知識和理解。如果你能做到這一點,你就能在更好的刊物上發表論文。 因此,請仔細觀察模型,並嘗試了解模型的輸出。對於相對簡單的模型,如決策樹,提供模型的可視化也是有益的,並且大多數庫都支持這一功能。對於複雜的模型,如深度神經網絡,考慮使用可解釋的人工智能(XAI)技術來提取知識,雖然不太可能弄清楚模型到底在做什麼,但總有些有用的見解。 數據驅動、知識感知的可解釋人工智能研究綜述見[Li et al. [2020]]//ieeexplore.ieee.org/document/9050829