0
雷鋒網(wǎng) AI 研習(xí)社按:相信玩過 Kaggle 比賽的人都知道 bestfitting,他在加入 Kaggle 社群短短兩年之內(nèi),就以黑馬之姿成功占領(lǐng)比賽排行榜榜首。近日,Kaggle 對(duì)他進(jìn)行了一次專訪,在專訪中,我們可以看到關(guān)于比賽的滿滿干貨。
bestfitting 真名為 Shubin Dai,生活在長(zhǎng)沙,他的朋友們喜歡稱他為 Bingo。他目前是一名數(shù)據(jù)科學(xué)家和工程經(jīng)理,創(chuàng)立了一家專為銀行提供軟件解決方案的公司。在工作空閑時(shí),除了參加 Kaggle 競(jìng)賽,他還是一名狂熱的山地車手,并表示自己喜歡在大自然中度過時(shí)光。
雷鋒網(wǎng) AI 研習(xí)社將訪談內(nèi)容整理如下,各位 Kaggler 速來看看大神是如何煉成的吧。
1. 你的背景和研究經(jīng)歷是什么?
我的主修專業(yè)是計(jì)算機(jī)科學(xué),在軟件開發(fā)方面擁有超過 10 年的經(jīng)驗(yàn)。至于工作,我目前創(chuàng)立了一個(gè)專為銀行提供數(shù)據(jù)處理和分析解決方案的團(tuán)隊(duì)。
從上大學(xué)開始,我就一直對(duì)使用數(shù)學(xué)來創(chuàng)建能夠解決問題的程序很感興趣。這期間我不斷閱讀各種計(jì)算機(jī)科學(xué)書籍和論文,然后也很幸運(yùn),能夠在過去十年中一直關(guān)注著機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的發(fā)展。
2. 你是如何開啟 Kaggle 征程的?
正如我之前所說,我一直在大量閱讀著與機(jī)器學(xué)習(xí)和深度學(xué)習(xí)有關(guān)的書籍和論文,但是在這個(gè)過程中我也發(fā)現(xiàn),要將我所學(xué)到的算法應(yīng)用于那些可以隨時(shí)獲取的小型數(shù)據(jù)集中是很困難的。然后我就發(fā)現(xiàn) Kaggle 是一個(gè)很棒的平臺(tái),這里有各種各樣有趣的數(shù)據(jù)集、kernel 和精彩的討論,所以我迫不及待的想要試一試。我參加的第一項(xiàng)競(jìng)賽是「預(yù)測(cè)紅帽商業(yè)價(jià)值(Predicting Red Hat Business Value)」。
3. 你參加 Kaggle 比賽的套路是什么樣的?
1)首先是仔細(xì)閱讀比賽概述和數(shù)據(jù)描述;
2)查找類似的 Kaggle 競(jìng)賽。作為一名相對(duì)較新的 Kaggler,我收集了 Kaggle 上所有往期競(jìng)賽,然后做了基本分析;
3)閱讀類似競(jìng)賽的解決方案;
4)閱讀相關(guān)論文,以確保自己不會(huì)錯(cuò)過該領(lǐng)域的任何新進(jìn)展;
5)分析數(shù)據(jù)并建立一個(gè)穩(wěn)定的交叉驗(yàn)證集;
6)數(shù)據(jù)預(yù)處理、特征工程、模型訓(xùn)練;
7)結(jié)果分析,例如預(yù)測(cè)分布、錯(cuò)誤分析、特定樣本分析;
8)根據(jù)分析結(jié)果改進(jìn)模型或者重新設(shè)計(jì)全新模型;
9)基于數(shù)據(jù)分析和結(jié)果分析,設(shè)計(jì)模型來增加多樣性或者用于針對(duì)某些特定樣本;
10)集成學(xué)習(xí);
11)在必要時(shí)返回步驟 1。
4. 哪個(gè)機(jī)器學(xué)習(xí)算法你最喜歡?
我會(huì)逐個(gè)選擇算法,但我更喜歡在模型集成時(shí)使用那些簡(jiǎn)單的算法,比如嶺回歸(Ridge regression)。此外,在深度學(xué)習(xí)競(jìng)賽中,我通常喜歡從 resnet-50 開始改進(jìn)模型或者直接設(shè)計(jì)一個(gè)類似結(jié)構(gòu)的模型。
5. 你最喜歡的機(jī)器學(xué)習(xí)工具是什么?
我非常喜歡在計(jì)算機(jī)視覺競(jìng)賽中使用 PyTorch 框架,而在自然語言處理(NLP)或者時(shí)間序列競(jìng)賽中采用 TensorFlow 或 Keras。當(dāng)我在做數(shù)據(jù)分析時(shí),我會(huì)使用 seaborn 庫以及 scipy 家族中的那些工具。此外,scikit-learn 和 XGB 也是非常有效的工具。
6. 你對(duì)超參數(shù)的調(diào)優(yōu)方式是什么?
我會(huì)嘗試根據(jù)對(duì)數(shù)據(jù)和算法的理論理解來調(diào)整參數(shù),如果我無法解釋為什么結(jié)果會(huì)更好或者更差,那么我會(huì)感到不安。在深度學(xué)習(xí)競(jìng)賽中,我會(huì)經(jīng)常檢索相關(guān)論文,并試圖找出這些作者們?cè)谙嗨频那樾蜗率窃趺醋龅摹6?,我?huì)比較參數(shù)更改前后的結(jié)果,例如預(yù)測(cè)分布、受影響的樣本等等。
7. 你采用什么方法來使得交叉驗(yàn)證與最終提交能盡可能穩(wěn)定?
一個(gè)好的交叉驗(yàn)證集是成功的一半。如果我找不到評(píng)估模型的好方法,我是不會(huì)繼續(xù)下一步的。
為了建立一個(gè)穩(wěn)定的交叉驗(yàn)證集,你必須很好地理解數(shù)據(jù)集和將面臨的挑戰(zhàn)。我還會(huì)檢驗(yàn)并確保驗(yàn)證集具有與訓(xùn)練集類似的分布,我會(huì)盡力確保我的模型在我的本地交叉驗(yàn)證集和公共排行榜上都能獲得提升。
在某些時(shí)間序列比賽中,我會(huì)將 aside data 作為驗(yàn)證集保留一段時(shí)間。
我經(jīng)常以保守的方式選擇最終提交結(jié)果,我總是選擇對(duì)我的安全模型(Safe model)的進(jìn)行加權(quán)平均集成,并傾向于相對(duì)冒險(xiǎn)的那一個(gè)(在我看來,更多的參數(shù)等于更多風(fēng)險(xiǎn))。但是,我從來不選擇我無法解釋的結(jié)果進(jìn)行提交,即便這個(gè)結(jié)果有可能在公共排行榜上得到更高的分?jǐn)?shù)。
8. 簡(jiǎn)單總結(jié)一下,哪些特質(zhì)幫助你贏得了競(jìng)賽?
好的交叉驗(yàn)證集,從其它競(jìng)賽中獲取經(jīng)驗(yàn),閱讀相關(guān)論文,講究紀(jì)律和堅(jiān)韌不舍。
9. 哪類 Kaggle 競(jìng)賽你最喜歡,為什么?
自然保護(hù)和醫(yī)療相關(guān)的比賽是我最喜歡的,我覺得我應(yīng)該做點(diǎn)什么來讓我們生活的地球變得更加美好。
10. 機(jī)器學(xué)習(xí)中最令你興奮的領(lǐng)域是什么?
我對(duì)深度學(xué)習(xí)的各種進(jìn)展都很感興趣。我想用深度學(xué)習(xí)解決除了計(jì)算機(jī)視覺以及自然語言處理之外的問題,所以我會(huì)嘗試在我參加的比賽和我的工作中使用它們。
11. 在解決數(shù)據(jù)科學(xué)問題時(shí),你的領(lǐng)域?qū)I(yè)知識(shí)發(fā)揮了多大的作用?
實(shí)話實(shí)說,我不認(rèn)為我的專業(yè)領(lǐng)域知識(shí)發(fā)揮了極大作用,原因如下:
1)Kaggle 官方會(huì)非常細(xì)致地準(zhǔn)備數(shù)據(jù)集,這對(duì)于所有人都是公平的;
2)想要簡(jiǎn)單地通過使用成熟的方法贏得比賽非常困難,特別是在深度學(xué)習(xí)比賽中,因此我們需要更多創(chuàng)造性的解決方案;
3)數(shù)據(jù)更加重要,我們可能需要閱讀一些相關(guān)的材料。
但是有一些例外。在 Planet Amazon competition 中,我確實(shí)從自己之前的熱帶雨林經(jīng)驗(yàn)中獲得了一些想法,但這些經(jīng)驗(yàn)在技術(shù)上而言,不能稱為領(lǐng)域?qū)I(yè)知識(shí)。
12. 你認(rèn)為自己最有創(chuàng)意的技巧、發(fā)現(xiàn)或者方法是什么?
在最開始的時(shí)候一定要準(zhǔn)備好解決方案文檔。我會(huì)強(qiáng)迫自己寫一份清單,里面包括目前所面臨的挑戰(zhàn),我應(yīng)該閱讀的解決方案和論文,以及可能遇到的風(fēng)險(xiǎn),所有可能有效的交叉驗(yàn)證策略,可能有用的數(shù)據(jù)增強(qiáng)策略。而且,我會(huì)不斷更新文檔。大部分的文件最終都成為了我的獲勝策略。
13. 你在現(xiàn)在的工作中是如何使用數(shù)據(jù)科學(xué)的,在 Kaggle 上的競(jìng)賽經(jīng)驗(yàn)是否對(duì)此有幫助?
我們嘗試使用機(jī)器學(xué)習(xí)來解決各種銀行業(yè)務(wù)問題:預(yù)測(cè)銀行網(wǎng)點(diǎn)的訪客數(shù)量,預(yù)測(cè) ATM 應(yīng)該準(zhǔn)備的現(xiàn)金,產(chǎn)品推薦,操作風(fēng)險(xiǎn)控制等等。
在 Kaggle 中的競(jìng)賽也改變了我的工作方式,當(dāng)我想找到解決問題的方案時(shí),我會(huì)嘗試去尋找類似的 Kaggle 競(jìng)賽,因?yàn)樗鼈兪菍氋F的資源,并且我還建議我的同事們研究類似的獲獎(jiǎng)解決方案,說不定可以從中獲得靈感。
14. 你對(duì)權(quán)衡模型復(fù)雜度和訓(xùn)練測(cè)試時(shí)間有何看法?
我的看法是:
1)當(dāng)正確率最重要時(shí),不應(yīng)該過度關(guān)注模型的復(fù)雜性。我們必須充分利用經(jīng)過數(shù)月的努力才獲得的訓(xùn)練數(shù)據(jù)。
2)現(xiàn)在如果只使用多個(gè)弱模型的集成是很難去贏得比賽的。如果你想成為第一名,通常需要有非常好的單一模型。當(dāng)我想在比賽中獲得第一名的時(shí)候,我經(jīng)常強(qiáng)迫自己設(shè)計(jì)不同的模型,這些模型可以在公共排行榜上取得前 10 名甚至是前 3 的成績(jī)。
3)以我自己的經(jīng)驗(yàn),我可以在競(jìng)賽中設(shè)計(jì)多個(gè)模型來探索這個(gè)問題的上限,然后選擇一個(gè)簡(jiǎn)單的模型使其在實(shí)際情況下可行。我總是盡最大努力為競(jìng)賽組織者提供一個(gè)簡(jiǎn)單的例子,然后在獲勝者采訪電話中與他們進(jìn)行討論。我發(fā)現(xiàn)一些組織者甚至使用我們的解決方案和思想來解決他們面臨的一些其他問題。
4)可以發(fā)現(xiàn),當(dāng)訓(xùn)練、測(cè)試運(yùn)行時(shí)間很重要時(shí),Kaggle 有很多機(jī)制來確保性能:kernel 競(jìng)爭(zhēng)、團(tuán)隊(duì)規(guī)模限制、添加更多在打分時(shí)沒有計(jì)算的數(shù)據(jù)等。我相信 Kaggle 也會(huì)根據(jù)挑戰(zhàn)的目標(biāo)而改進(jìn)規(guī)則。
15. 你是如何在 Kaggle 競(jìng)賽中越來越領(lǐng)先的?
有趣的競(jìng)賽和 Kaggle 中強(qiáng)大的競(jìng)爭(zhēng)對(duì)手是我變得越來越強(qiáng)的原因。
在這里有這么多優(yōu)秀的對(duì)手,想要贏得比賽非常困難,他們把我推到了極限。我去年曾試圖獨(dú)自完成盡可能多的比賽,然后我必須猜測(cè)出其他競(jìng)爭(zhēng)對(duì)手會(huì)怎么做。要做到這一點(diǎn),我必須閱讀大量材料并且構(gòu)建多功能模型。在比賽之后,我還會(huì)閱讀來自其他競(jìng)爭(zhēng)對(duì)手的所有解決方案。
16. 最近你最關(guān)注哪些機(jī)器學(xué)習(xí)研究?
我期待今年可以參與一項(xiàng)深度強(qiáng)化學(xué)習(xí)競(jìng)賽。
17. 你僅僅花了 15 個(gè)月就占領(lǐng)排行榜榜首,這是如何做到的?
首先,第一名是衡量我在 Kaggle 上學(xué)到了多少東西以及運(yùn)氣好壞的標(biāo)準(zhǔn)。
我在前幾次競(jìng)賽中,試圖將近年來學(xué)到的理論轉(zhuǎn)化為技巧,并且從其他人那里學(xué)到很多東西。
在我對(duì) Kaggle 競(jìng)賽有了一定了解之后,我開始思考如何以系統(tǒng)化的方式進(jìn)行比賽,因?yàn)槲以谲浖こ谭矫嬗性S多年的經(jīng)驗(yàn)。
就這樣大約半年后,我首次拿到第一名,變得更加自信。我想我可能在半年內(nèi)成為一名特級(jí)大師。在 Planet Amazon competition 比賽中,我以第一名作為目標(biāo)。
然后我覺得我應(yīng)該繼續(xù)使用之前提到的策略和方法,并且取得了更多的成功。在贏得 Cdiscount 競(jìng)賽后,我到達(dá)用戶排名榜前列。
受益于 Kaggle 平臺(tái),我從其他人那里學(xué)到了很多東西,Kaggle 的排名系統(tǒng)也在我的進(jìn)步中發(fā)揮了重要作用。同時(shí)我也感到非常幸運(yùn),因?yàn)槲覐奈聪脒^我可以連續(xù)獲得 6 個(gè)獎(jiǎng)項(xiàng),在許多比賽中我的目標(biāo)都是前 10 名或者前 1%。我不認(rèn)為我可以再次復(fù)現(xiàn)這樣的高光時(shí)刻。
但是,我來參加競(jìng)賽的目的并不是為了一個(gè)好排名,我把每場(chǎng)比賽都視為學(xué)習(xí)的機(jī)會(huì),我會(huì)嘗試從我不太熟悉的領(lǐng)域挑選比賽,這樣做的結(jié)果就是我在去年強(qiáng)迫自己閱讀了數(shù)百篇論文。
18. 你之前提到了自己喜歡閱讀往期比賽中高分團(tuán)隊(duì)的解決方案。你還有沒有什么想特別強(qiáng)調(diào)的?
我尊重所有的贏家和精彩解決方案的貢獻(xiàn)者,我知道他們付出了多少努力。我總是以敬佩的態(tài)度閱讀這些解決方案。
這里有一些來自 Data Science Bowl 2017 的令人難忘的洞見:PyTorch、醫(yī)學(xué)圖像的 3D 分割、來自 Web 流量時(shí)間序列預(yù)測(cè)的解決方案,它使用來自自然語言處理的序列模型來解決時(shí)間序列問題,另外還有 Tom (https://www.kaggle.com/tvdwiele)和 Heng (https://www.kaggle.com/hengck23)的優(yōu)秀解決方案。
via:blog.kaggle.com,雷鋒網(wǎng) AI 研習(xí)社編譯整理。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。