如何在演演算法比賽中獲得出色的表現 :改善模型的5個重要技巧

2020-10-10 13:00:31

如果你最近才開始使用Kaggle,或者你是這個平臺的老使用者,你可能想知道如何輕鬆地提高你的模型的效能。以下是我在Kaggle之旅中積累的一些實用技巧。建立自己的模型或只是從一個基線公共核心,並嘗試實施這些建議!

回顧過去的比賽

雖然Kaggle的政策是永遠不會出現兩次相同的比賽,但經常會有非常相似的問題的重新制作。例如,一些舉辦方每年都會針對同一主題提出定期的挑戰(NFL’s Big Data Bowl ),只有很小的變化,或者在某些領域(比如醫學成像)會有很多比賽,目標不同,但思路非常相似。

因此,回顧獲勝者的解決方案(多虧了不可思議的Kaggle社群,他們總是在比賽結束後公開)是一個很好的加分項,因為它給了你開始的想法,以及一個獲勝的策略。如果你有時間去回顧它們,你很快就會發現,即使在非常不同的比賽中,一些流行的基線模型似乎總是做得足夠好:

  1. 折積神經網路或更復雜的ResNet或EfficientNet在計算機視覺挑戰中,
  2. 在音訊處理挑戰中的WaveNet(也可以通過影象識別模型很好地處理,如果你只是使用Mel譜圖),
  3. BERT及其衍生物(RoBERTa等)在自然語言處理挑戰,
  4. 對錶格資料LGB(或其他梯度增強樹策略)…

你可以直接在Kaggle平臺上尋找類似的比賽。

回顧過去的比賽還可以幫助您獲得關於下面解釋的所有其他步驟的提示。例如,提示和技巧對預處理類似的問題,人們如何選擇hyperparameters,什麼額外的工具中實現他們的模型讓他們贏得比賽,或者如果他們只專注於裝袋的類似版本最好的模型或者將所有可用的公共核心進行堆疊。

資料準備上時間是永遠不夠的

這還遠遠不是這份工作中最令人興奮的部分。然而,這一步驟的重要性怎麼強調也不過分。

清理資料:永遠不要認為舉辦方致力於為您提供最乾淨的資料。大多數時候,它是錯的。填補nan,消除異常值,把資料分割成類別的齊次觀察……
做一些簡單的探索性資料分析,以獲得您正在進行的工作的概述(這將幫助您獲得見解和想法)。這是這個階段最重要的一步。如果不瞭解資料是如何構建的、您擁有哪些資訊、針對目標可能具有哪些單獨或集體的一般行為特徵,那麼您將會失去對如何構建模型的直覺。繪製圖表,直方圖,相關矩陣。
增加資料:這可能是提高效能的最好方法之一。但是,要注意不要把它弄得太大,以至於您的模型無法再處理它。你可以在網際網路上找到一些額外的資料集(版權問題需要特別注意),或在Kaggle平臺上(在過去類似的比賽!),或者只是在你提供的資料:翻轉和作物影象疊加錄音,back-translate或同義詞替換文字…

預處理也是您必須仔細考慮將要使用的交叉驗證方法的步驟。 Kaggle的座右銘基本上是:信任您的CV。 處理資料將幫助您知道如何分割資料:對目標值或樣本類別進行分層? 您的資料不平衡嗎? 如果您有一個聰明的CV策略,並且僅依靠它而不是靠排行榜得分(儘管這可能很誘人),那麼您很可能會在私人最終得分上獲得驚喜。

嘗試hyperparameter搜尋

超引數搜尋可幫助您找到模型應具有的最佳引數(學習率,softmax的溫度等),以獲得最佳的效能,而無需手動進行數千次無聊的實驗。

最常見的超引數搜尋策略包括:

網格搜尋(請永遠不要這樣做):就我而言,這是效能最差的方法,因為對於某些值,您可能會完全錯過某個模式或效能的區域性峰值,它包含或測試按您可能的值間隔平均分佈的超引數值定義;

隨機搜尋(及其蒙特卡洛衍生物):您嘗試引數的隨機值。它的主要問題在於,它是一種並行方法,並且隨著所測試的引數的增加,很快會變得非常昂貴。但是,它的優點是可以讓您在測試中包括先驗知識:如果您想在1e-4和1e-1之間找到最佳學習率,但是您假設它必須在1e-3附近,則可以繪製樣本來自以1e-3為中心的對數正態分佈。

貝葉斯搜尋:基本上是隨機搜尋,但在迭代方面有所改進,因此成本更低。它基於當前模型迭代評估有前途的超引數設定,然後對其進行更新。這是三者中表現最好的。

其他方法(包括基於梯度的搜尋或進化優化)更具危害性,通常不適用。在某些特殊情況下可以推薦使用它們。

有許多AutoML工具可以很好地為您完成這項工作。但是耗費資源,如果計算資源充沛的話可以試試。

簡單的做法可以改變遊戲規則

我發現有一些模型包裝器可以用來獲得更好的結果。它們在不同級別上工作:

在優化過程中,請不要忘記新增學習速率排程程式,以幫助獲得更精確的訓練(從小開始,當模型學習良好時逐漸增加,例如減少平穩的步伐)。

仍然在優化過程中,您可以將Lookahead包裹在優化器中;先行演演算法包括前進k個優化步驟,找到最佳效能的位置,然後朝該最佳方向退後一步並從此處重新開始訓練。從理論上講,您可以獲得更好的效能,儘管我從未發現這是真的。但是它可以穩定訓練,這在資料非常嘈雜時很有用。

在開始訓練之前,為權重找到一個很好的初始化方法:如果您使用的是流行的體系結構,請從基線權重(例如影象識別中的ImageNet)開始,如果不是,請嘗試分層順序單位方差初始化(LSUV,最好的初始化方法-理論上)。它包括將權重初始化為正交,並在所有可訓練層上初始化單位方差。

最後,我經常發現從神經網路的最後一層權重訓練LGBM,而不是新增softmax作為輸出層,效果會非常好。

Bagging整合!

除了資料擴充之外,沒有什麼技術比混合(也稱為裝袋)來提高效能更有效。

我的個人建議是,我總是將自己的分袋後的最終模型中儲存的每一個模型預測儲存下來,然後將它們平均化(只是基本平均,我從未發現過任何「巧妙」整合的證據,例如權重)模特的獨奏表現會在最終得分中新增任何內容)。別忘了混合公共核心。

整合策略中擁有的模型越多,您越有可能倖免於私人排行榜的變化。確實,使模型多樣化可以使最終結果更加可靠。這與金融中的一項基礎投資組合多元化的想法相同:代替具有給定收益和給定方差的一項資產,而是選擇具有相同收益和方差的許多不同資產,因為它們都不太可能全部同時提款,一個人的損失將由另一個人的勝利來補償。以同樣的想法,而不是僅僅依靠一個模型,而是進行許多不同的模型投票:大多數模型預測的目標(分類)或每個模型預測的目標均值(迴歸)很可能是更接近真實答案。

是僅僅依靠一個模型,而是進行許多不同的模型投票:大多數模型預測的目標(分類)或每個模型預測的目標均值(迴歸)很可能是更接近真實答案。

希望您喜歡這篇文章,希望你在比賽中獲得更好的成績。