在這篇文章中,我們總結了 GTC 與 NVIDIA 的Kaggle大師級團隊在 GTC 課程中的問題和答案。此外,我們還回答了在這些課程中沒有機會回答的觀眾問題。
問:你如何決定參加哪些比賽?
Ahmet:我閱讀了比賽描述和評估指標。然后,我給自己幾天的時間來思考我是否有任何新穎的想法可以嘗試。如果我沒有任何有趣的想法,那么我不會加入。但有時我只是為了學習和提高我的技能而加入。
問:要贏得比賽,數學是必修課嗎?
Kazuki:不是強制性的,但您可能希望了解競爭指標以及機器學習模型的工作原理。例如,線性模型和樹模型是完全不同的。因此,在進行集成時,這些將產生良好的結果。
問:你是如何看待比賽的?
Bojan:在第一天,我總是提交一份樣本,這樣我就可以登上排行榜。傳統上,我對數據分析或 EDA 不是很在行,這是我的弱點之一。但最近,我開始做更多的事情,改變我的方法。
我經常做的一件事就是看看在比賽中集成不同的模型是多么容易。這決定了我的長期戰略。如果將稍有不同的模型進行集成可以帶來很好的提升,那就意味著構建許多不同的模型非常重要。然而,如果 ensembling 不能給您帶來巨大的提升,那么從長遠來看,功能工程或提出創造性的功能更為重要。
其中一個策略是盡可能多地改進單個模型,并且只有當您對它感到滿意時才進行集成。
Jean-Francois:在每一場比賽中,閱讀人們在論壇上分享的內容是一個好主意。這意味著讀取主機寫入的內容,包括注釋。并閱讀最近類似比賽中的頂級解決方案。令人驚訝的是,有些比賽是由以前的比賽中公開分享并適應新比賽的模型贏得的。人們讀得不夠。你也可以試著找到關于這個主題的論文,特別是在科學競賽中,那里經常有相關的論文。
Giba:下載數據并運行一些EDA。獲取關于特征和目標分布的信息,以便找到最佳驗證策略。隨機KFold通常適用于大多數問題,但通常需要分組KFold或時間分割KFold。找到最佳驗證策略后,使用它運行一個簡單的模型并提交以檢查排行榜分數。通常,這是競爭中最重要的事情,如果驗證是可靠的且正確的,則所有在本地進行的度量改進都應轉化為Kaggle排行榜。之后,您必須從事特征工程,并使用不同的數據集和訓練算法構建一組不同的模型。通常,使用ANN和GBDT訓練的模型的集合足以在LB中排名靠前。不幸的是,搜索目標泄漏是Kaggle競爭的一部分。
問:您建議從哪個深度學習框架開始?
Jean-Francois:我認為最好的是 Keras ,因為它非常抽象。您可以構建相當復雜的模型,并用幾行代碼對其進行訓練。然后,出于兩個原因,您可能希望轉到 PyTorch 或 TensorFlow :更好地控制您的模型和自定義您的層,以及重用預訓練模型的能力。在這方面,我的印象是 PyTorch 處于領先地位。我們在 Kaggle 上所做的主要是模型原型。也許今天, TensorFlow 在模型部署方面更好,但它在 Kaggle 中并不相關。
Jiwei:我想補充一點, PyTorch Lightning 是一個基于 PyTorch 的用戶友好軟件包,特別是對于新用戶。它抽象了培訓的細節,并為諸如 Multi- GPU 、 TPU 和混合精度等高級功能提供了方便的 api 。
觀眾調查顯示, 66% 的人喜歡 PyTorch , 31% 的人喜歡 TensorFlow 。
問:在使用偽標簽時,如何防止過度裝配?把這種策略用于合奏可以嗎?
Bo:在最近的 RANZCR 比賽中,我們的團隊使用偽標記和集成兩種方法獲得了勝利。兩者都可以使用,但為了防止過度安裝,您應該非常小心。
- 首先,要將原始數據拆分為五個折疊,并將外部數據拆分為五個折疊。在這兩個階段,將有五個模型。
- 在第一階段,在原始數據上訓練模型,并對外部數據進行推理,以進行外部數據預測。這樣做五次。
- 在第 2 階段,將原始數據(帶有原始標簽)和外部數據(帶有作為偽標簽的第 1 階段預測)組合起來,并再次訓練模型。
重要的是,當我們制作偽標簽時,我們要制作偽標簽的五個副本。對于階段 2 的 fold0 模型(在組合 fold1 , 2 , 3 , 4 上進行培訓,并在組合 fold0 上進行驗證),我們希望確保它從未擁有 fold0 的信息,因此用于此模型的偽標簽需要來自階段 1 的 fold0 模型(在原始 fold1 , 2 , 3 , 4 上進行培訓)。這樣你就不會有任何泄漏。
可以將集合與偽標記一起使用。在 RANZCR 比賽中,我們在兩個階段都使用了合奏。
Chris:偽標簽是我在 Kaggle 特別學到的東西之一,因為我讀過的書中沒有一本提到過它。 Kaggle 是學習偽標簽等實用技巧的好地方。
問:什么是常用的后處理技術?如何提高我在多標簽分類問題上的分數?
我先試試這個。最近,一位Kaggler稱我為后處理大師,因為我剛剛獲得了第五枚專門使用后處理的金牌。這是一枚個人金牌。[競賽特級大師的標準是五枚金牌,包括至少一枚個人金牌。]我將分享一些秘密。
首先是研究競爭指標。有些指標稱為排名指標(如 AUC )。對于這些指標,絕對預測值并不重要。只有相對順序才重要。對于多標簽分類問題,首先要問的是預測是按標簽排序,還是全部排序。在最近的雨林競賽中,我們預測雨林中的動物聲音,所有的預測都是跨標簽排列的。因此,重要的是,模型知道哪些動物是常見的,哪些是稀有的。
其他類型的度量基于平均值,如均方誤差。如果測試數據的平均值與訓練數據的平均值不同,則改變預測值可以改進度量。
對于召回率和精確度等指標,您應該知道它們的含義。始終了解您的指標。每個指標都要求您做不同的事情并應用不同的后處理。就我個人而言,我真的很喜歡這樣做。我有數學背景。指標是數學方程式,我喜歡思考什么對優化很重要。
我想補充一點。如果度量是對數損失,有時它有助于剪裁極值。模型可以用接近0或1的值進行可靠的預測,但如果存在標簽錯誤,日志丟失的代價可能會非常大。因此,最好將預測值剪裁為0.01/0.99或0.02/0.98。但總是在局部驗證中找到最佳剪輯閾值。
問:在與深度學習團隊合作時,如何使用可解釋性?
Christof:我想說,這在很大程度上取決于集合方法。我經常使用單一模型的簡單平均值。因此,如果單個模型是可以解釋的,那么作為它們的簡單組合的集合也可能是可以解釋的。但另一方面,我同意,合奏引入了另一個方面來解釋,比如為什么盡管個人表現平平,但特定的模型比其他模型對合奏的貢獻更大。
問:您如何在實踐中進行超參數優化、特征工程和特征選擇循環?
Chris:就個人而言,我不會花太多時間優化超參數。我將探討構建 XGB 或 NN 模型時的重要參數。(例如,我將使用 XGB 調整 max _ depth 、 subsample 和 colsample _ bytree ,使用 NN 調整 loss 、 learning rate 和 scheduler )。但在嘗試改進模型時,我將花更多的時間探索使用 XGB 的特性工程和使用 NN 的數據增強、體系結構設計和/或 TTA 。
問:你如何從神經網絡中獲得最佳性能?
Jean-Francois:數據預處理(包括增強)和后處理工作。新來的人往往過于關注超參數優化或優化器的選擇。我幾乎總是堅持亞當的余弦學習計劃。
Jiwei:多水頭多損耗函數是提高神經網絡性能的另一個常見技巧。它是一種正則化的方法。
Bo: I want to point to this great post by Andrej Karpathy where he shared many NN tricks: http://karpathy.github.io/2019/04/25/recipe/
問:作為初學者,向卡格爾學習的最佳方式是什么?
Bojan:查看人們發布的筆記本,閱讀正在討論的主題,嘗試運行共享的模型,并使用討論的想法改進模型。如果不是你的 Kaggle 表現,這些是可以讓你在機器學習技能方面走得相當遠的幾個步驟。
Bo:初學者開始學習的一個好方法是合作。當然,這取決于個性。有些人喜歡獨自工作,比如說最適合自己。但對很多人來說,我認為合作是一種很好的學習方式,因為不同的人有不同的技能。它們通常可以相互補充。你總能從每個隊友身上學到一兩樣東西。當然,在請求團隊合并之前,您需要做一些工作。不要要求排名靠前的人在沒有做很多事情的情況下與你合作。試著問問那些接近你排行榜位置的人。
我同意。我參加過很多個人比賽,但最近我參加了更多的團隊合作。在每一個團隊中,我都學到了很多東西。即使只是觀察人們如何組織他們的代碼,或者他們使用的是什么計算機語言。它可以只是學習他們如何處理問題,或者他們如何進行實驗。當你和別人一起工作時,有很多東西可以幫助你成為一名更好的數據科學家。
不要害羞。跳入水中。你將學會游泳。我最后推薦一件事。當您加入Kaggle時,系統會要求您創建一個用戶名。如果你害怕你的朋友或同事在你開始時看到你掙扎,你可以使用別名。我就是這么做的。我只是在感到舒服后才透露我的真實姓名。所以只要注冊,選擇一個筆名,學習,然后嘗試。比賽結束后,不要只參加下一場比賽。閱讀人們分享的內容。試著想想你本可以做得更好的是什么,為什么你會想到你剛剛讀到的這個很酷的想法。比賽結束后的幾天是你學習最多的時候。
問:你建議自己建造機器還是購買預建系統進行深度學習?
Jean-Francois:構建通常更便宜,但它需要更多的技能和時間。如果你兩者都有,那么就構建你的裝備。有一些商店會根據你的配置為你構建定制 PC 。我個人沒有時間和技能,買了一臺帶有 GTX 1080 Ti 的定制 PC ,對此非常滿意。如今,你可以從主要 PC 制造商那里找到性能良好 GPU 的 PC ,包括筆記本電腦。
季偉:另一個選項是外部 GPU 框。我曾經在筆記本電腦上訓練深度學習模型,筆記本電腦與帶有桌面級 GPU 卡的外部 GPU 盒相連。
問:你最喜歡 Kaggle 的什么?
Chris:社區。 Kaggle 是一個獨特的地方,你可以在其他地方遇到高質量的數據科學家。
Jean-Francois:如果你想了解使用機器學習建模實際問題的最新技術, Kaggle 絕對是一個好去處。而且它讓人上癮。
Jiwei:在實踐中學習新算法、新建模技術。當我能夠應用論文中的新模型來解決現實世界的問題時,我發現自己更有動力、更專注。
Bo:閱讀 Kagglers 在每次比賽后發布的頂級解決方案。每次我都能學會一些新技巧。
Bojan:這是一個令人驚嘆的學習平臺。我不認為有任何其他平臺可以讓你像在 Kaggle 上一樣快速地學到很多東西。
Giba:處理各種各樣問題的能力,同時學習并應用最先進的算法來解決這些問題。
Kazuki:我喜歡獲得我感興趣的知識。
Christof:解決非常復雜的問題并提出創新的解決方案。
Ahmet:我喜歡 Kaggle 的問題多樣性,我喜歡攀登排行榜。