競賽總結
我們講知識,也不可能所有東西都cover到,讓大家競賽不是讓大家去學某個特定的知識,而是說大家遇到一個問題,怎么去找一個解決方案。這一次的解決方案和下一次的會不一樣,但是問題是你怎么去找這個東西,去問人也行,去搜索也行。
私榜和公開榜是不一樣的,大家能看到的都是公榜的(私榜就是為了防止大家刷數據集!)
我們沒有講集成學習,但是集成學習確實是深度學習中一個很成熟的方案,就是不要只訓練一個模型,訓練多幾個模型,然后一起進行預測。
h2o也是用的集成學習,隨機森林就是一個集成學習的模型,所以集成學習確實是刷榜經常用的一個方法。當然集成學習的壞處就是它有很多模型,你在預測的時候代價會比較大,但是如果只看訓練精度的話,確實集成學習的模型是比較好的。
AutoML會利用多個機器學習包來進行學習。
貌似競賽中,使用MLP最好的是0.22,但是MLP仔細調的話是可以調的很好的, 在特征的預處理,還有超參數的調節。
我們可以講一下這個數據的難點:
-
一個房價的大數值,10w~100W,因為數值比較大,所以梯度會比較大,如果學習率沒有設置好的話,梯度就會爆了。如果都是比較大的一個正數的話,可以對其取一個log,讓數值壓到一個比較好的區間,然后再做均值為0,標准差為1都是可以的。
-
第二個比較難是數據有很多文本的特征,這里使用one-hot是非常不明智的,feature_size有10w,使用one-hot會爆內存。比如第二名是使用了transformer,還可以使用word2vec,或者使用稀疏矩陣取處理離散值,當然關於NLP處理的后面會講。
-
還有就是公榜和私榜的問題,建議就是不要一直對着公榜的成績調參,因為一直只能是前9個月的數據,其實是說不准后3個月會如何,這也是實際生產中常會遇到的問題。如果說是過分去調整了,那么就很有可能會overfitting。
總結:
-
AutoGloun(AutoML)在合理的計算開銷下得到還不錯的模型
-
雖然AutoML可以做自動特征抽取,但適當加入一些人工數據預處理,還是一個不錯的方法
數據中有比較大的數值,而且樣本之間的數值變化比較大,比如房子的賣價,納稅的價格等,我們對這些數值取log,其余和之前是完全一樣的。
數據中包含房子的介紹,是大段的文本,可以使用multimodal這個選項用transformer抽取特征,並做多模型融合,注意,這個需要gpu才能跑得動。
然后我們做了多層模型ensemble來得到更好精度。
- 對於比較大的數據集,計算開銷仍然是瓶頸,我們需要使用GPU,甚至是多台機器來做分布式訓練。
QA
- 為了避免overfit,是調參好,還是不調參好,或者是只調什么方面?有沒有什么經驗分享?
其實如果是實際應用的話,參數調整並不是說最重要的。但是如果是競賽的話就是另外一回事了。
關於競賽的話,集成學習是一個不錯的方法。
但是競賽其實很多時候都是一個運氣,公榜和私榜差了那么多,可能拿第一和拿第二的同學真的理解了什么,很多時候可能就是運氣。
- 為了什么說80%的時間是找數據、清理數據這些?數據搭建pipeline不就好了嗎?為什么改進模型等等不占主要時間?
其實對於實際的業務需求,找到數據是最重要的,比如要你預測比特幣價格,哪里來的數據?數據是否有效?這都是需要考慮的。
但是對於科研的話,大部分都是已經給提供了數據集的,所以找數據的部分就不用過多進行投入,而是應該把精力花費在模型的改進上。
- autogulon和pytorch結合做NAS能不能講demo?
NAS就是去搜索一整個網絡的架構,但是我們並不打算去講這個東西,因為對大家用處不大,除非你就是做這個research的。NAS是一個用有錢人玩的游戲,一個NAS實驗,如果是用雲的話,分分鍾幾十萬美金就沒了。所以如果你只是做這個research的話,我們可以討論,但是你要用的話,我覺得NAS還不夠成熟。
- MLP有值得精細調參的價值嗎?不是說2層的feedforward已經有擬合任何非線性函數的能力了嗎?
理論上你用一根鐵絲可以biao出任意一種鑰匙,但實際上很難操作。
理論上我也有成為世界首富的可能,但實際做不到。
MLP還是有精細調參的價值的,MLP是一個很強的模型,CNN可以認為是一個特殊的MLP,卷積就是一個有結構化的MLP,最近在火的transformer,bert其實里面有很多MLP的東西在里面,而且其實大家懷疑里面真正其中起作用的也是MLP的東西。
- 用MLP做股票預測時,預測值發生滯后,預測值曲線就像是真實值曲線往后平移了的效果,有什么好的解決方法?
不要做股票預測,是做不贏的,華爾街實力一點也不弱,也是做不贏。沐神說他所見過的所有做股票預測的,最終也都失敗了。(股票根本根本就不是一個理性的東西)