遇事不決XGB,kaggle競賽中的集成樹模型 vs 神經(jīng)網(wǎng)絡
夢晨 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
在Kaggle上參加機器學習比賽,用什么算法最容易拿獎金?
你可能會說:當然是深度學習。
還真不是,據(jù)統(tǒng)計獲勝最多的是像XGBoost這種梯度提升算法。

這就奇了怪了,深度學習在圖像、語言等領域大放異彩,怎么在機器學習比賽里還不如老前輩了。
一位Reddit網(wǎng)友把這個問題發(fā)在機器學習板塊(r/MachineLearning),并給出了一個直覺上的結(jié)論:
提升算法在比賽中提供的表格類數(shù)據(jù)中表現(xiàn)最好,而深度學習適合非常大的非表格數(shù)據(jù)集(例如張量、圖片、音頻、文本)。
但這背后的原理能不能用數(shù)學原理來解釋?
更進一步,能不能僅通過數(shù)據(jù)集的類型和規(guī)模來判斷哪種算法更適用于手頭的任務。
這能節(jié)省很多時間啊,舉個極端點的例子,如果嘗試用AlphaGo做Logistic回歸,你就走遠了。
問題吸引了很多人參與討論,有人回復到:
這是一個十分活躍的研究領域,完全可以就這個主題做一篇博士論文了。
關鍵在能不能人工提取特征
有網(wǎng)友表示,雖然很難給出詳細論證,但可以猜測一下。
基于樹的梯度提升算法可以簡單的分離數(shù)據(jù),就像這樣:

如果特征小于某個值就向左,反之就向右,一步一步把數(shù)據(jù)拆解。
在深度學習中,要用到多個隱藏層才能把輸入空間變換成線性可分割:

這個過程就像是把輸入空間在高維進行“揉捏”:

數(shù)據(jù)集越復雜,需要的隱藏層就越多,變換過程很可能失敗,反而讓數(shù)據(jù)更加纏在一起:

即使成功了,相對梯度提升樹來說也是效率極低的。
深度學習的優(yōu)勢是,面對人類很難手工提取特征的復雜數(shù)據(jù)可以自動創(chuàng)建隱藏特征。
而且即使你手工創(chuàng)建了特征,深度網(wǎng)絡無論如何還是會自己創(chuàng)建隱藏特征。
而Kaggle比賽中使用的表格數(shù)據(jù),特征往往已經(jīng)有了,就是表頭,那么直接使用梯度提升就好。
就像Kaggle Avito挑戰(zhàn)的冠軍所說:“遇事不決,XGBoost”。

吃數(shù)據(jù)的怪物
另一個高贊回復是:
大多數(shù)Kaggle比賽的數(shù)據(jù)集都不夠喂出一個神經(jīng)網(wǎng)絡怪物。

在小數(shù)據(jù)集上深度學習容易過擬合,正則化的方法又依賴許多條件。在給定數(shù)據(jù)集的比賽上,還是梯度提升比較迅速、穩(wěn)定。
而參數(shù)越多的深度神經(jīng)網(wǎng)絡需要越多的數(shù)據(jù),比賽提供的數(shù)據(jù)集有限,數(shù)據(jù)維度也比較低,發(fā)揮不出深度學習的實力。
一位在Kaggle上成績很好的大神補充到:
不同的深度網(wǎng)絡適用于某種數(shù)據(jù)集,如CNN適合處理圖像,RNN適合處理特定的序列等。比賽給的數(shù)據(jù)集很難找到合適的預訓練模型可用。
總的來看,深度學習在表格數(shù)據(jù)上的性能肯定優(yōu)于梯度提升,但是需要大量時間優(yōu)化網(wǎng)絡架構(gòu)。
Kaggle上的勝出方案一般是將二者結(jié)合,加上梯度提升,有經(jīng)驗的選手在幾個小時內(nèi)就能得到不錯的結(jié)果。
參考鏈接:
[1]https://www.reddit.com/r/MachineLearning/comments/nxn65x/d_can_we_begin_to_understand_possible/
[2]https://www.reddit.com/r/MachineLearning/comments/9826bt/d_why_is_deep_learning_so_bad_for_tabular_data/
[3]http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/
往期精彩:
【原創(chuàng)首發(fā)】機器學習公式推導與代碼實現(xiàn)30講.pdf
【原創(chuàng)首發(fā)】深度學習語義分割理論與實戰(zhàn)指南.pdf
求個在看
