參加Kaggle競賽對於任何人來說都是一項嚴峻的挑戰。你需要花費大量時間和精力來學習新知識、嘗試新技巧,努力獲得高分。但這些往往還是不夠,因爲你的競爭對手可能擁有更多經驗、更多空閒時間、更多硬件甚至其他莫名其妙的優勢。

但是,獲得 Kaggle 金牌,甚至取得全網第一的排名似乎也不是完全不可能。一位來自俄羅斯的數據科學家就寫下了他的心得,供讀者參考。

以下爲原文內容:

雖然剛剛在競賽中拿下第一塊金牌,但Lukyanenko已經在Kernel上排名第一了。 以前,我能在一些競賽中獲得銀牌,有時歸功於運氣,有時得益於自己做了大量工作。但儘管我花費了大量時間,還是隻能在很多競賽中獲得銅牌(甚至一無所獲)。

競賽回顧

當看到一場新的競賽將於5月底啓動時,我就立即對它產生了興趣。這是一場特定領域的競賽,旨在預測分子中各原子之間的相互作用。

衆多周知,核磁共振(NMR)技術利用類似於MRI的原理來了解蛋白質和分子的結構與動態。全世界的研究人員進行NMR實驗來進一步瞭解跨環境科學、藥物科學和材料科學等領域的分子的結構與動態。 在此次競賽中,選手們試圖預測一個分子中兩個原子之間的磁相互作用(標量耦合常數)。當前量子力學最先進的方法可以計算這些耦合常數,並且只需要一個3D分子結構作爲輸入即可。但這些計算會耗費大量資源,所以不常使用。 因此,如果機器學習方法可以預測這些值,則能夠真正地幫助藥物化學家洞見分子結構,並且速度更快、成本也更低。

競賽之初

就自身而言,我通常會爲新的Kaggle競賽編寫EDA內核,所以這次也不例外。在這一過程中,我發現這次競賽非常有意思,也非常特別。我們獲得了有關分子及其內部原子的信息,所以可以使用圖來表徵分子。Kaggle競賽中常見的表格數據處理方法是利用大量的特徵工程和構建梯度提升模型。

在最初的嘗試中,我也使用了LGB,但知道還有更好的方法來處理圖。這種挑戰令我着迷,所以決定認真參與到競爭之中。

我沒有一點相關領域知識(上一次看化學式還是在學校時),所以我決定完全使用機器學習技術:大量特徵工程、創建折外元特徵(out-of-fold meta-feature)等等。和往常一樣,我在Kernels上公開了自己的工作。從下圖中你可以看到,它們很受歡迎。 這次,該方法在leaderboard上取得了相當好的得分,我也得以保持白銀段位。 此外,追蹤當前一些最新的Kaggle Kernels和論壇觀點也非常重要。 其中真正幫到我的是論壇和Kaggle Kernels。從競賽開始直至結束,我瀏覽了所有的Kernels和論壇帖子,這其中包含很多不容錯過的有用信息。即使是一些不太流行的Kernels也會包含有趣的新功能。論壇帖子裏會有其他人的一些觀點,這也有助於提高競賽分數。

組建團隊

幾乎從一開始,我就意識到,領域專業知識將爲團隊帶來很大優勢,因此我尋找每一條這樣的信息。當然,我關注了幾個活躍的專家並拜讀了他們撰寫的文章以及創建的kernels。 有一天,我收到了Boris的一封郵件,他是這一領域的專家,認爲我們的技能可以實現互補。通常來說,我喜歡在比賽中單打獨鬥,但這一次,團隊合作似乎是更好的選擇。事實證明的確如此。

合併方法

起初,我們的方法存在很大分歧。我用的是特徵工程技術,而Boris則致力於創建描述符。一段時間之後,我們發現我的模型在一些原子對類型上表現更好,而他的模型在其他情況下表現更佳,因爲我們爲不同的類型訓練了不同的模型。 幸運的是,Psilogram加入了我們的團隊。沒過多久,他的模型就表現出了優於我們模型的性能。另一名成員Bojan幫助我們進一步改進了結果。他們都是很棒的機器學習專家。

圖神經網絡

那時我們已經看到了神經網絡在此次競賽中的潛力:著名的kaggle大師Heng發佈過一個MPNN模型的例子。

一段時間之後,我甚至可以在自己的PC上運行這個模型,但是結果並不如LGB模型。但無論如何,現在我的團隊知道了,如果想達到更高的目標,我們需要使用這些神經網絡。 我們讓Christof加入我們的團隊,他能很快構建出一個新的神經網絡。因此,我們停止訓練LGB,因爲LGB遠遠比不上Christof構建的神經網絡。

神經網絡的時代

從那時起,我在團隊中的角色就變成了輔助。我用我們的神經網絡進行了多次實驗:嘗試使用不同的超參數和不同的架構,對訓練計劃和損失進行微小的調整等。有時,我會基於我們的預測進行EDA,以發現好的和不好的例子,然後利用這些信息進一步改進模型。

尋找新的方法是我的主要貢獻之一

  • 我看了很多關於神經網絡架構的論文,包括EAGCN、3DGNN等;

  • 我嘗試了不同的損失函數,如Huber。我甚至找到了一篇用於迴歸的焦點損失函數論文,但實現起來並不可行;

  • 當然,我還嘗試了RAdam、Ranger等新的熱門優化器,但簡單的Adam在此次競賽中更加好用。

  • 但最後,還是Christof實現了架構,這給我留下了非常深刻的印象,也令我頗受啓發。

硬件

好的硬件對於訓練這些神經網絡來說非常重要。我們用到了很多硬件,但我們也經常用kaggle kernels:你可以用P100以相同的時間在4個kaggle kernels中訓練模型,所以即使沒有額外的硬件,我們也可以拿到金牌。

結果和結論

我們最後的解決方案拿到了第八名,贏得了金牌。 值得一提的是,我們的團隊可以獲得比-3 Imae更好的分數(平均所有類型的絕對值誤差對數)。在這個帖子中,樓主表示達到-3是一個驚人的成就:https://www.kaggle.com/c/champs-scalar-coupling/discussion/98375#569312 事實上,我們做到了!

總結

從這次競賽中我學習到了很多東西,總體來說,想要在Kaggle上成功我們需要:

  • 瀏覽Kernel和論壇,其中會提供大量有用的信息;

  • 準備好屢敗屢戰。當你試圖找到一種可以提高分數的方法時,大多數是行不通的,但不要氣餒;

  • 不斷尋找新的想法、新的論文和核心的文章。你永遠不會知道下一個神奇工具會從哪裏出現;

  • 在團隊內構建一個驗證效果的機制,從而令工作結果更加直觀;

  • 一個強大的團隊是由很多不同特長的人組成的,我們應該涵蓋不同領域;

  • Kaggle比賽非常具有挑戰性,當然在這個過程中我們也可以收穫諸多樂趣:)

我很幸運可以和這些了不起的人一同工作,感謝他們!

原文鏈接:https://towardsdatascience.com/a-story-of-my-first-gold-medal-in-one-kaggle-competition-things-done-and-lessons-learned-c269d9c233d1

相關文章