提升Kaggle模型的實(shí)用小技巧!
如果你最近剛?cè)胧諯aggle,或者你是這個(gè)平臺(tái)的老常客,你可能會(huì)想知道如何輕松提升模型的性能。以下是我在Kaggle歷程中積累的一些實(shí)用技巧(https://www.kaggle.com/louise2001)。所以,無(wú)論是建立自己的模型,還是從一個(gè)基準(zhǔn)的公共內(nèi)核開始,都可以嘗試實(shí)施這些建議!

一、經(jīng)常回顧過(guò)去的比賽(溫故知新)
雖然Kaggle的策略是絕對(duì)不會(huì)出現(xiàn)兩次一模一樣的比賽,但經(jīng)常會(huì)出現(xiàn)非常相似的問(wèn)題的翻版。例如,有些主辦方每年都會(huì)提出同一個(gè)主題的常規(guī)挑戰(zhàn)(比如NFL的Big Data Bowl),只是有一些小的變化,或者在某些領(lǐng)域(比如醫(yī)學(xué)影像)有很多目標(biāo)不同但本質(zhì)非常相似的比賽。
因此,回顧獲獎(jiǎng)?wù)叩慕鉀Q方案(總是在競(jìng)爭(zhēng)結(jié)束后公開,這要感謝不可思議的Kaggle社區(qū))可以是一個(gè)很好的加分項(xiàng),因?yàn)樗o你提供了開始的想法,以及一個(gè)成功的策略。如果你有時(shí)間回顧很多,你也會(huì)很快發(fā)現(xiàn),即使在非常不同的比賽中,一些流行的基準(zhǔn)模型似乎總是做得足夠好:
卷積神經(jīng)網(wǎng)絡(luò)或計(jì)算機(jī)視覺挑戰(zhàn)中更復(fù)雜的ResNet或EfficientNet。 WaveNet在音頻處理中的挑戰(zhàn)(如果你只是使用Mel Spectrogram,也可以很好地用圖像識(shí)別模型來(lái)處理)。 BERT及其衍生產(chǎn)品(RoBERTa等)在自然語(yǔ)言處理中的挑戰(zhàn)。 Light Gradient Boosting(或其他梯度提升或樹策略)對(duì)表格數(shù)據(jù)的處理。
你可以直接在Kaggle平臺(tái)上尋找類似的比賽,或者查看Sundalai Rajkumar的這篇精彩總結(jié)(https://www.kaggle.com/sudalairajkumar/winning-solutions-of-kaggle-competitions)。
回顧過(guò)去的比賽也可以幫助你獲得其他步驟的提示。例如,獲得類似問(wèn)題的預(yù)處理的提示和技巧,人們?nèi)绾芜x擇他們的超參數(shù),在他們的模型中實(shí)現(xiàn)了什么額外的工具來(lái)贏得比賽,或者如果他們只專注于囊括他們最好的模型的相似版本,或者是將所有可用公共內(nèi)核整合在一起。
二、花足夠的時(shí)間在數(shù)據(jù)預(yù)處理上
這絕不是工作中最令人興奮的部分。但是,這一步驟的重要性不言而喻:
清理數(shù)據(jù):千萬(wàn)不要以為主機(jī)努力為你提供最干凈的數(shù)據(jù)。大多數(shù)時(shí)候,它是錯(cuò)誤的。填充NaNs,去除離群值,將數(shù)據(jù)分成同質(zhì)觀測(cè)值的類別等。
做一些簡(jiǎn)單的探索性數(shù)據(jù)分析,以大致了解你正在使用的工具(這將有助于您獲得見解和想法)。
增強(qiáng)數(shù)據(jù):這可能是提高性能的最好方法之一。但是要注意不要讓數(shù)據(jù)太大,以至于你的模型無(wú)法再處理它。你可以在互聯(lián)網(wǎng)上找到一些額外的數(shù)據(jù)集,或者在Kaggle平臺(tái)上(在過(guò)去類似的比賽中!),或者只是在提供給你的數(shù)據(jù)上工作:翻轉(zhuǎn)和裁剪圖像,疊加音頻記錄,反向翻譯或替換文本中的同義詞等。
預(yù)處理也是你必須思考你將依靠什么交叉驗(yàn)證方法的步驟:Trust Your CV。在你的數(shù)據(jù)上工作將幫助你知道如何分割數(shù)據(jù):根據(jù)目標(biāo)值分層還是根據(jù)樣本類別分層 ? 你的數(shù)據(jù)是否不平衡 ? 如果你有一個(gè)聰明的CV策略,并且僅依靠它而不是靠排行榜得分(盡管這可能很誘人),那么你很有可能在私人的最終分?jǐn)?shù)上獲得驚喜。
三、嘗試超參數(shù)搜索
超參數(shù)搜索可以幫助你找到你的模型應(yīng)該具備的最佳參數(shù)(學(xué)習(xí)率、softmax的溫度等),以獲得最佳的性能,而無(wú)需手工運(yùn)行上千次的枯燥實(shí)驗(yàn)。
最常見的超參數(shù)搜索策略包括:
網(wǎng)格搜索(請(qǐng)永遠(yuǎn)不要這樣做):對(duì)我來(lái)說(shuō)是性能最差的方法,因?yàn)閷?duì)于某些值,你可能會(huì)完全錯(cuò)過(guò)某個(gè)模式或性能的局部峰值,它包括或測(cè)試超參數(shù)值平均分布在你定義的可能值的區(qū)間上。
隨機(jī)搜索(及其Monte-Carlo衍生物):嘗試參數(shù)的隨機(jī)值。它的主要問(wèn)題在于它是一種并行的方法,而且你測(cè)試的參數(shù)越多,成本就越高。然而,它的優(yōu)點(diǎn)是可以讓你在測(cè)試中加入先驗(yàn)知識(shí):如果你想找到1e-4和1e-1之間的最佳學(xué)習(xí)率,但你認(rèn)為它必須在1e-3左右,你可以從以1e-3為中心的對(duì)數(shù)正態(tài)分布中抽取樣本。
貝葉斯搜索:基本上是隨機(jī)搜索,但經(jīng)過(guò)改進(jìn),因?yàn)樗堑模虼顺杀镜偷枚唷K鶕?jù)當(dāng)前模型迭代評(píng)估一個(gè)有希望的超參數(shù)配置,然后更新它。它是這三種方法中性能最好的一種。
其他方法包括基于梯度的搜索或演化優(yōu)化,危險(xiǎn)性較大,一般不適用。在一些特殊情況下,可以推薦使用這些方法。
四、簡(jiǎn)單的包裝器可以改變游戲規(guī)則
我發(fā)現(xiàn)有一些模型包裝器可以用來(lái)獲得更好的結(jié)果。它們?cè)诓煌?jí)別上工作:
在優(yōu)化過(guò)程中,千萬(wàn)不要忘了添加一個(gè)學(xué)習(xí)率調(diào)度器,幫助獲得更精確的訓(xùn)練(從小開始,當(dāng)你的模型學(xué)習(xí)良好時(shí)逐步增加)。
還是在優(yōu)化過(guò)程中,你可以把Lookahead包在你的優(yōu)化器上;Lookahead算法包括向前走k個(gè)優(yōu)化步驟,找到性能最好的地方,然后向最佳方向后退一步,從那里重新開始訓(xùn)練。理論上,你可以獲得更好的性能,雖然我從來(lái)沒有發(fā)現(xiàn)這是真的;但它可以穩(wěn)定訓(xùn)練,當(dāng)你的數(shù)據(jù)非常嘈雜時(shí),這是好事。
在開始訓(xùn)練之前,為你的權(quán)重找到一個(gè)好的初始化:如果你使用的是流行的架構(gòu),就從基準(zhǔn)權(quán)重開始(比如圖像識(shí)別中的ImageNet),如果不是,可以嘗試Layer Sequential Unit Variance初始化(LSUV,理論上是最好的初始化)。它包括將你的權(quán)重初始化為正交的,并且在所有可訓(xùn)練層中都是單位方差。
最后,我經(jīng)常發(fā)現(xiàn),從神經(jīng)網(wǎng)絡(luò)的最后一層權(quán)重來(lái)訓(xùn)練LGBM,而不是添加一個(gè)softmax作為輸出層,效果會(huì)出奇的好。
五、Bagging集成在一起!
除了數(shù)據(jù)增強(qiáng),可能沒有什么技術(shù)比bagging更有效地提高你的性能。
我個(gè)人的小技巧是:總是保存我運(yùn)行過(guò)的每一個(gè)模型預(yù)測(cè),并對(duì)所有模型進(jìn)行平均(只是基本的平均,我從來(lái)沒有發(fā)現(xiàn)任何證據(jù)表明,"聰明 "的集成,如按模型的單一性能加權(quán),在最終得分中增加了什么)。
不要忘記把公共內(nèi)核也進(jìn)行裝袋。你的集成策略中的模型越多,你就越有可能在私人排行榜中穩(wěn)操勝券。
原文鏈接:https://towardsdatascience.com/5-simple-tips-to-improve-your-kaggle-models-159c00523418
