夢晨 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號(hào) QbitAI
在Kaggle上參加機(jī)器學(xué)習(xí)比賽,用什么算法最容易拿獎(jiǎng)金?
你可能會(huì)說:當(dāng)然是深度學(xué)習(xí)。
還真不是,據(jù)統(tǒng)計(jì)獲勝最多的是像XGBoost這種梯度提升算法。
這就奇了怪了,深度學(xué)習(xí)在圖像、語言等領(lǐng)域大放異彩,怎么在機(jī)器學(xué)習(xí)比賽里還不如老前輩了。
一位Reddit網(wǎng)友把這個(gè)問題發(fā)在機(jī)器學(xué)習(xí)板塊(r/MachineLearning),并給出了一個(gè)直覺上的結(jié)論:
提升算法在比賽中提供的表格類數(shù)據(jù)中表現(xiàn)最好,而深度學(xué)習(xí)適合非常大的非表格數(shù)據(jù)集(例如張量、圖片、音頻、文本)。
但這背后的原理能不能用數(shù)學(xué)原理來解釋?
更進(jìn)一步,能不能僅通過數(shù)據(jù)集的類型和規(guī)模來判斷哪種算法更適用于手頭的任務(wù)。
這能節(jié)省很多時(shí)間啊,舉個(gè)極端點(diǎn)的例子,如果嘗試用AlphaGo做Logistic回歸,你就走遠(yuǎn)了。
問題吸引了很多人參與討論,有人回復(fù)到:
這是一個(gè)十分活躍的研究領(lǐng)域,完全可以就這個(gè)主題做一篇博士論文了。
關(guān)鍵在能不能人工提取特征
有網(wǎng)友表示,雖然很難給出詳細(xì)論證,但可以猜測一下。
基于樹的梯度提升算法可以簡單地分離數(shù)據(jù),就像這樣:
如果特征小于某個(gè)值就向左,反之就向右,一步一步把數(shù)據(jù)拆解。
在深度學(xué)習(xí)中,要用到多個(gè)隱藏層才能把輸入空間變換成線性可分割:
這個(gè)過程就像是把輸入空間在高維進(jìn)行“揉捏”:
數(shù)據(jù)集越復(fù)雜,需要的隱藏層就越多,變換過程很可能失敗,反而讓數(shù)據(jù)更加纏在一起:
即使成功了,相對梯度提升樹來說也是效率極低的。
深度學(xué)習(xí)的優(yōu)勢是,面對人類很難手工提取特征的復(fù)雜數(shù)據(jù)可以自動(dòng)創(chuàng)建隱藏特征。
而且即使你手工創(chuàng)建了特征,深度網(wǎng)絡(luò)無論如何還是會(huì)自己創(chuàng)建隱藏特征。
而Kaggle比賽中使用的表格數(shù)據(jù),特征往往已經(jīng)有了,就是表頭,那么直接使用梯度提升就好。
就像Kaggle Avito挑戰(zhàn)的冠軍所說:“遇事不決,XGBoost”。
吃數(shù)據(jù)的怪物
另一個(gè)高贊回復(fù)是:
大多數(shù)Kaggle比賽的數(shù)據(jù)集都不夠喂出一個(gè)神經(jīng)網(wǎng)絡(luò)怪物。
在小數(shù)據(jù)集上深度學(xué)習(xí)容易過擬合,正則化的方法又依賴許多條件。在給定數(shù)據(jù)集的比賽上,還是梯度提升比較迅速、穩(wěn)定。
而參數(shù)越多的深度神經(jīng)網(wǎng)絡(luò)需要越多的數(shù)據(jù),比賽提供的數(shù)據(jù)集有限,數(shù)據(jù)維度也比較低,發(fā)揮不出深度學(xué)習(xí)的實(shí)力。
一位在Kaggle上成績很好的大神補(bǔ)充到:
不同的深度網(wǎng)絡(luò)適用于某種數(shù)據(jù)集,如CNN適合處理圖像,RNN適合處理特定的序列等。比賽給的數(shù)據(jù)集很難找到合適的預(yù)訓(xùn)練模型可用。
總的來看,深度學(xué)習(xí)在表格數(shù)據(jù)上的性能肯定優(yōu)于梯度提升,但是需要大量時(shí)間優(yōu)化網(wǎng)絡(luò)架構(gòu)。
Kaggle上的勝出方案一般是將二者結(jié)合,加上梯度提升,有經(jīng)驗(yàn)的選手在幾個(gè)小時(shí)內(nèi)就能得到不錯(cuò)的結(jié)果。