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