編者按:美國統(tǒng)計(jì)協(xié)會統(tǒng)計(jì)計(jì)算分會的網(wǎng)站最近發(fā)布了2016年John Chambers統(tǒng)計(jì)軟件獎(jiǎng)的獲獎(jiǎng)名單,何通和陳天奇以作品XGBoost共同獲得該獎(jiǎng)。何通是我校數(shù)學(xué)與計(jì)算科學(xué)學(xué)院2013屆統(tǒng)計(jì)學(xué)本科畢業(yè)生,目前在加拿大Simon Fraser大學(xué)計(jì)算機(jī)學(xué)院攻讀碩士研究生。為了揭秘其獲獎(jiǎng)背后的故事,近日,記者以視頻電話的形式采訪了何通。
我校數(shù)學(xué)與計(jì)算科學(xué)學(xué)院2013屆統(tǒng)計(jì)學(xué)本科畢業(yè)生何通
關(guān)于獲獎(jiǎng)作品
記:今年John Chambers統(tǒng)計(jì)軟件獎(jiǎng)中你們團(tuán)隊(duì)的獲獎(jiǎng)作品是叫做XGBoost的機(jī)器學(xué)習(xí)工具。您能否簡單介紹一下,機(jī)器學(xué)習(xí)(Machine Learning)是什么?
何:機(jī)器學(xué)習(xí)(Machine Learning)就是計(jì)算機(jī)從數(shù)據(jù)中學(xué)習(xí)出規(guī)律和模式,以應(yīng)用在新數(shù)據(jù)上進(jìn)行預(yù)測的一種算法,其中,“機(jī)器”指的是電子計(jì)算機(jī),“學(xué)習(xí)”是在輸入的數(shù)據(jù)中發(fā)現(xiàn)結(jié)構(gòu)與規(guī)律,從而對其進(jìn)行總結(jié)的過程。機(jī)器學(xué)習(xí),其實(shí)就是把人類思考、歸納經(jīng)驗(yàn)的過程,轉(zhuǎn)化為計(jì)算機(jī)處理數(shù)據(jù)、計(jì)算得出模型的過程。而這一模型,能夠以近似于人的方式,靈活解決很多復(fù)雜的問題。
例如在股票市場中,通過機(jī)器學(xué)習(xí),人們可以預(yù)測第二天的股價(jià),從而決定是否應(yīng)該買賣股票。這是如何做到的呢?我們現(xiàn)在知道的信息只有今天和前幾天的股價(jià),而機(jī)器學(xué)習(xí)能夠通過搜集相關(guān)領(lǐng)域數(shù)據(jù),把股價(jià)的變化規(guī)律總結(jié)為數(shù)學(xué)模型。只要股價(jià)連續(xù)漲四五天,那么模型就會默認(rèn)為這是一個(gè)規(guī)律,并把它記錄下來。如果股票漲了四天,第五天卻下跌了,那模型就會默認(rèn)這才是規(guī)律——漲了四天就會往下跌。模型列出來,就相當(dāng)于找到了模式、特征或規(guī)律,拿它套用在所掌握的數(shù)據(jù)上,便可預(yù)測未來的股價(jià)。模型可能還會從股價(jià)中得到其他規(guī)律,比如什么時(shí)候是股價(jià)的最高點(diǎn)和最低點(diǎn)等等。以此類推,不同模型應(yīng)用于不同領(lǐng)域,可以找到不同的規(guī)律。如果這個(gè)模型訓(xùn)練得好,我們的預(yù)測可能就比較準(zhǔn)確。
除了商業(yè)領(lǐng)域,機(jī)器學(xué)習(xí)還可以應(yīng)用于治安管理。通過統(tǒng)計(jì)市內(nèi)犯罪活動的情況,發(fā)生的地理位置(街區(qū)、商圈),結(jié)合曾經(jīng)有過的犯罪活動信息,便可以預(yù)測犯罪活動最可能發(fā)生的地點(diǎn)。因此,機(jī)器學(xué)習(xí)有很大的應(yīng)用市場。
記:機(jī)器學(xué)習(xí)和我們生活中的聊天通訊工具、搜索引擎有什么關(guān)系?
何:使用QQ時(shí),聊天窗口上會顯示廣告。系統(tǒng)事先檢測分析了你的身份及個(gè)人信息,據(jù)此決定給你投放哪一類廣告。如果發(fā)現(xiàn)你是男性用戶,它可能就會給你推薦游戲、體育相關(guān)的廣告;女性用戶,它可能會推薦給你購物、化妝品或藝術(shù)相關(guān)的廣告;學(xué)生用戶,它可能會給你推薦出國留學(xué)中介的廣告等等。這些廣告的發(fā)布過程,其實(shí)是根據(jù)你的個(gè)人信息做選擇的過程,也是依靠數(shù)學(xué)模型來完成的。
再比如網(wǎng)絡(luò)上有各種類型的廣告,他們通過獲取不同群體對廣告點(diǎn)擊率的高低,給相應(yīng)群體推薦最有可能被點(diǎn)擊的廣告。此外,除了廣告功能,搜索引擎的另一個(gè)重要功能是對網(wǎng)頁進(jìn)行排序。用戶搜索關(guān)鍵詞時(shí),搜索結(jié)果會顯示出很多網(wǎng)頁,哪些網(wǎng)頁排在前面,哪些排在后面,就是一個(gè)“學(xué)習(xí)”的過程。谷歌公司1998年提出了一種叫做PageRank的算法,依據(jù)此為搜索結(jié)果的網(wǎng)頁做排序。這樣命名,是因?yàn)楣雀璧膭?chuàng)始人就叫Page,同時(shí)網(wǎng)頁的英文也是Page,一語雙關(guān)。當(dāng)然,搜索引擎發(fā)展到今天,做的已經(jīng)不僅僅是排序了,它還需要“讀懂”你輸入的問題。例如,你輸入“中山大學(xué)的校長是誰”,它就會嘗試去理解你說的這句話。這也與機(jī)器學(xué)習(xí)相關(guān),也叫做“自然語言處理”。
記:XGBoost最主要的亮點(diǎn)是什么?它問世一年左右了,是否將應(yīng)用在工業(yè)界?
何:主要有兩點(diǎn)。第一點(diǎn)是我們在以前類似的數(shù)學(xué)模型的基礎(chǔ)上作了改進(jìn),提高了它的準(zhǔn)確率;第二點(diǎn)是軟件的代碼是用C++重新寫的,執(zhí)行速度非常快。如果是用現(xiàn)在這種多核、多線程等可以并行的CPU,速度可以提升到原來的20倍。
XGBoost問世于2014年夏天。有人用它寫論文,也有很多公司用它為公司的模型做服務(wù)。我在微博上看到一個(gè)說法,那些做機(jī)器學(xué)習(xí)的創(chuàng)業(yè)公司,有好幾個(gè)是通過XGBoost融到幾千萬的創(chuàng)業(yè)投資的。而且,XGBoost是完全開源的,使用我們的軟件目前不需要支付費(fèi)用。
關(guān)于獲獎(jiǎng)與獎(jiǎng)項(xiàng)
記:您是如何與這個(gè)獎(jiǎng)項(xiàng)結(jié)緣的?
何:這不算是一個(gè)比賽,而是每年都有的一個(gè)獎(jiǎng)項(xiàng),大家可以提交自己的統(tǒng)計(jì)軟件去申請,前提是,統(tǒng)計(jì)軟件已經(jīng)發(fā)布,且用戶體驗(yàn)良好。許多有名的前輩都拿過這個(gè)獎(jiǎng)項(xiàng)。“統(tǒng)計(jì)之都”創(chuàng)始人謝益輝是中國人民大學(xué)的本科生、碩士。2009年出國讀博之前,他就靠自己寫的R語言程序包(package)成為了這個(gè)獎(jiǎng)項(xiàng)的得主。本科時(shí)我對這個(gè)獎(jiǎng)項(xiàng)已經(jīng)有所耳聞,但當(dāng)時(shí)對這個(gè)領(lǐng)域并沒有太深入的了解,未曾想有一天自己做出的統(tǒng)計(jì)軟件作品也能申請到這個(gè)獎(jiǎng)項(xiàng)。
記:那您能簡單介紹一下,參與開發(fā)這個(gè)統(tǒng)計(jì)軟件和申請獎(jiǎng)項(xiàng)的過程嗎?
何:2014年夏天,我們發(fā)布了這個(gè)軟件;2015年,我們提交了評獎(jiǎng)申請。第一個(gè)版本發(fā)布的時(shí)候,我剛剛就讀研究生。
最開始,我們把它發(fā)布在一個(gè)有關(guān)機(jī)器學(xué)習(xí)的網(wǎng)站上——Kaggle社區(qū)。當(dāng)時(shí)社區(qū)還舉行了一個(gè)Higgs競賽(Higgs Boson Machine Learning Challenge),我們也參賽了。雖然這個(gè)軟件當(dāng)時(shí)還沒有得到很好的優(yōu)化,但是在1700多支隊(duì)伍的激烈競爭中能夠躋身比賽前三十名,也算是超出了我們的預(yù)期。參賽的一千多人都用過這個(gè)工具。出眾的效率與較高的預(yù)測準(zhǔn)確度,讓它在比賽論壇中引起了參賽選手們的廣泛關(guān)注。XGBoost口碑非常好,我們確實(shí)是以成績說話,這就是為什么我們想拿它申請這個(gè)獎(jiǎng)項(xiàng)的原因。
從整個(gè)開發(fā)的過程來看,也算比較順利。陳天奇是底層計(jì)算的主要作者,他碰到的困難可能稍微多一些。我的工作主要是做一個(gè)R語言程序包發(fā)布到專門的網(wǎng)站上。這需要遵守非常多的規(guī)章,有時(shí)候甚至需要準(zhǔn)備一個(gè)很多年前的系統(tǒng),確保你的R語言程序包能在上面運(yùn)行。主要的困難有兩個(gè),一是需要找到一個(gè)系統(tǒng)來測試代碼是否已在上面成功運(yùn)行,另一則是減少并解決它更新測試系統(tǒng)時(shí)出現(xiàn)的漏洞,這需要我們根據(jù)它的測試系統(tǒng)來調(diào)整它的代碼,使它適應(yīng)新的環(huán)境。
曾經(jīng)有一段時(shí)間,網(wǎng)站上的XGBoost由于出現(xiàn)未及時(shí)修補(bǔ)的漏洞,被強(qiáng)制下架了三、四個(gè)月,這應(yīng)該是其間遇到的最大一次挫折。
關(guān)于個(gè)人經(jīng)歷
記:您在讀本科期間,是否有參加過類似的業(yè)余科研項(xiàng)目?設(shè)計(jì)XGBoost是在您本身的科研領(lǐng)域內(nèi),還是出自您的興趣而額外進(jìn)行的研究?現(xiàn)在回憶本科學(xué)習(xí)階段,對后面繼續(xù)深造及獲獎(jiǎng)有什么影響嗎?
何:我的本科是統(tǒng)計(jì)學(xué)專業(yè)。大三、大四時(shí)跟過王學(xué)欽老師、尤娜老師做科研。王老師給我們上過機(jī)器學(xué)習(xí)相關(guān)的課程,還邀請過中國人民大學(xué)吳喜之教授來講授機(jī)器學(xué)習(xí)。我的畢業(yè)論文是尤娜老師指導(dǎo)的,論文的方向是貝葉斯統(tǒng)計(jì),也和機(jī)器學(xué)習(xí)很相近。
我目前在計(jì)算機(jī)學(xué)院讀研究生,但實(shí)際上是多學(xué)科交叉領(lǐng)域,而且現(xiàn)在的研究并沒有用到這個(gè)統(tǒng)計(jì)軟件。我研究的領(lǐng)域和XGBoost還是稍有區(qū)別的,但是它們背后的思維和數(shù)學(xué)原理是相通的,只是應(yīng)用的場景和方向不一樣。在這個(gè)統(tǒng)計(jì)軟件的制作過程中,我學(xué)到的數(shù)學(xué)知識及寫代碼、做開發(fā)的經(jīng)歷,對我以后做相關(guān)研究都有幫助,這是一個(gè)相互促進(jìn)的過程。
其實(shí)有一些統(tǒng)計(jì)學(xué)的知識基礎(chǔ)的話,在計(jì)算機(jī)學(xué)院讀機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘也是非常熱門的。很多時(shí)候做研究需要數(shù)學(xué)能力。如果你有統(tǒng)計(jì)學(xué)的背景的話,就很容易理解別人論文里模型的思路是什么。對模型進(jìn)行改進(jìn)時(shí),以前學(xué)的知識也會起到引導(dǎo)的作用,讓你更快地找到方法。總的來說,我覺得本科學(xué)過的數(shù)學(xué)、統(tǒng)計(jì)學(xué)知識是很有幫助的。
記:開發(fā)這樣一個(gè)XGBoost是需要很好的編程基礎(chǔ)的。王學(xué)欽老師回憶,您本科時(shí)期編程技巧就非常高超。那您平時(shí)是怎么訓(xùn)練自己的編程能力的?對有志于投身這個(gè)領(lǐng)域的師弟、師妹們有什么寄語?
何:統(tǒng)計(jì)學(xué)專業(yè)對編程的要求很少。高中時(shí),我碰巧接觸過信息學(xué)競賽,已有一些編程基礎(chǔ),比如C語言。大一、大二時(shí),學(xué)過R語言。有了這些基礎(chǔ),真正做起來就比較快。師弟師妹如果有心培養(yǎng)自己這方面的能力,我建議,要盡量把學(xué)到的任何一個(gè)模型都用基礎(chǔ)的R語言代碼實(shí)現(xiàn)一遍,即使不用任何的程序包,也要能夠做到和程序包接近的效果。
在我看來,數(shù)學(xué)要學(xué)好,編程也要學(xué)好。編程是一個(gè)需要實(shí)踐的東西。如果只是把編程做出來,沒有經(jīng)過任何實(shí)踐的檢驗(yàn),沒有把實(shí)際數(shù)據(jù)輸入運(yùn)行,就可能會出現(xiàn)一些偏差和混亂。把每一個(gè)學(xué)到的模型都寫一遍,不但有助于編程,而且能讓你更好地理解模型本身。
在實(shí)踐的過程中,你會發(fā)現(xiàn)有很多你不了解的涉及數(shù)學(xué)的內(nèi)容,比如說做優(yōu)化,其背后的優(yōu)化函數(shù)是非常大的課題,從網(wǎng)上找到的不同人寫的代碼可能差別非常大,方法也不一樣。你要是能夠找出背后的東西是什么,你會對模型本身有更多理解。在實(shí)踐中學(xué)到更多的東西,而不僅僅只是學(xué)到編程的知識。能不能做到多實(shí)踐,關(guān)鍵在于自己有沒有足夠的動力。