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

回顧過去的比賽
雖然Kaggle的政策是永遠不會出現兩次相同的比賽,但經常會有非常相似的問題的重新制作,例如,一些舉辦方每年都會針對同一主題提出定期的挑戰(NFL’s Big Data Bowl ),只有很小的變化,或者在某些領域(比如醫學成像)會有很多比賽,目標不同,但思路非常相似,
因此,回顧獲勝者的解決方案(多虧了不可思議的Kaggle社區,他們總是在比賽結束后公開)是一個很好的加分項,因為它給了你開始的想法,以及一個獲勝的策略,如果你有時間去回顧它們,你很快就會發現,即使在非常不同的比賽中,一些流行的基線模型似乎總是做得足夠好:
- 卷積神經網路或更復雜的ResNet或EfficientNet在計算機視覺挑戰中,
- 在音頻處理挑戰中的WaveNet(也可以通過影像識別模型很好地處理,如果你只是使用Mel譜圖),
- BERT及其衍生物(RoBERTa等)在自然語言處理挑戰,
- 對表格資料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集成!
除了資料擴充之外,沒有什么技術比混合(也稱為裝袋)來提高性能更有效,
我的個人建議是,我總是將自己的分袋后的最終模型中保存的每一個模型預測保存下來,然后將它們平均化(只是基本平均,我從未發現過任何“巧妙”整合的證據,例如權重)模特的獨奏表現會在最終得分中添加任何內容),別忘了混合公共內核,
集成策略中擁有的模型越多,您越有可能幸免于私人排行榜的變化,確實,使模型多樣化可以使最終結果更加可靠,這與金融中的一項基礎投資組合多元化的想法相同:代替具有給定收益和給定方差的一項資產,而是選擇具有相同收益和方差的許多不同資產,因為它們都不太可能全部同時提款,一個人的損失將由另一個人的勝利來補償,以同樣的想法,而不是僅僅依靠一個模型,而是進行許多不同的模型投票:大多數模型預測的目標(分類)或每個模型預測的目標均值(回歸)很可能是更接近真實答案,
是僅僅依靠一個模型,而是進行許多不同的模型投票:大多數模型預測的目標(分類)或每個模型預測的目標均值(回歸)很可能是更接近真實答案,
希望您喜歡這篇文章,希望你在比賽中獲得更好的成績,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/168499.html
標籤:其他
