0
本文作者: 亞萌 | 2016-12-25 17:56 |
編者按:12月18日,KDD China技術峰會在深圳舉行,雷鋒網(wǎng)根據(jù)周志華教授當天會上所做報告《關于機器學習研究的討論》,摘取其中亮點內(nèi)容整理成本文,由亞萌、亞峰、宗仁聯(lián)合編輯。此前,在今年10月21日CNCC 2016大會上,周志華教授也曾做了一次精彩演講,感興趣的讀者可以點擊鏈接《CNCC 2016 | 周志華 57 張 PPT 揭開機器學習本質(zhì)》。
周志華, 南京大學教授,校學術委員會委員,計算機軟件新技術國家重點實驗室常務副主任。AAAI Fellow, IEEE Fellow, IAPR Fellow,中國計算機學會會士,新晉ACM Fellow、AAAS Fellow。美國東部時間2016年12月8日, ACM 正式公布了今年Fellow 名單,南京大學周志華教授當選,成為全部53名新Fellow中唯一的中國本土學者。周志華教授是長江學者特聘教授、國家杰出青年科學基金獲得者。主要從事人工智能、機器學習、數(shù)據(jù)挖掘等領域的研究。著有《Ensemble Methods: Foundations and Algorithms》、《機器學習》。在本領域頂級期刊會議發(fā)表論文百余篇,被引用2萬余次。獲發(fā)明專利14項,多種技術在企業(yè)應用中取得成效。任《Frontiers in Computer Science》執(zhí)行主編及多種國內(nèi)外學術期刊副主編、編委;亞洲機器學習大會創(chuàng)始人,國際人工智能聯(lián)合大會(IJCAI)顧問委員會成員,IEEE 數(shù)據(jù)挖掘大會(ICDM)等數(shù)十次國內(nèi)外學術會議主席;IEEE 計算智能學會數(shù)據(jù)挖掘技術委員會主席等。曾獲國家自然科學二等獎、兩次教育部自然科學一等獎、亞太數(shù)據(jù)挖掘卓越貢獻獎等。
如今,機器學習已經(jīng)無處不在。我們現(xiàn)實生活中碰到的分類、預測、預報等各種各樣的問題,如果是利用計算機以數(shù)據(jù)驅(qū)動的方式去解決,那這個背后其實是在做機器學習。
但是我們要注意,機器學習雖然能力很強,但它并不是一個萬能的東西。至少有兩件事,我們經(jīng)常都要提醒自己,機器學習可能是做不了的。
第一種情況,如果我們的拿到的數(shù)據(jù)特征信息不夠充分,那么機器學習可能就幫不上忙。這件事大家可能都很容易理解,當我們解決一個問題,你需要三個變量,但實際上你手上只有一個,還有兩個信息根本沒收集到,那這肯定是做不了的。
第二種情況,就是這個數(shù)據(jù)樣本的信息非常不充分,那么這種情況也基本上解決不了問題。比如大家經(jīng)常在說,我們現(xiàn)在地震預報為什么做得不好。其實地震預報抽象出來看,也可以通過機器學習來解決,只不過我們的數(shù)據(jù)實在太少了。因為在你事先做了地質(zhì)勘探,最后這個地方又發(fā)生了地震,這樣的情況是非常非常罕見的。所以沒有數(shù)據(jù),機器學習也就幫不上太多忙。
在工業(yè)界,有很多的工程師經(jīng)常會提這樣的一個問題,就是我們現(xiàn)在機器學習里面有很多算法,但是哪一類方法最好呢?如果你對機器學習有比較多的了解,那么就會知道一個很重要的定理,叫做“沒有免費的午餐”。
這個定理告訴我們,如果算法A在某個問題上比算法B更好一些,那么一定在另外某個問題上,兩個算法的優(yōu)劣是反過來的,即算法B更好。這樣的理論對任何一個算法甚至包括隨機猜測,都是成立的。就是說我們拿任何一個算法和隨機猜測比的話,你都一定能找到在某個問題上,這個算法還不如隨機猜測。所以我們在針對一個具體的任務時,要使用什么算法或技術,一定要具體問題具體分析。
而機器學習里面我們說到的“問題”呢,可能跟大家一般理解的“問題”的意義不太一樣。大家一般認為,比如說“推薦”可能就是一個“問題”,但是在機器學習里面,其實我們不是這樣看的。一個“問題”,一定是說輸入描述的屬性確定了,這個數(shù)據(jù)的分布是怎么樣,這時候才定義出來一個“問題”。所以哪怕都是推薦,文本推薦、電影推薦甚至不同公司用自己手上數(shù)據(jù)做的電影推薦,這其實從機器學習的角度來看可能都是不一樣的“問題”。
這時候就有另外一件事,有時候就會有公司的工程師說,你看我現(xiàn)在掌握了機器學習十大算法、二十大算法,我把它們都用得很熟,那么來一個問題之后,我把這些算法全部試一遍,然后找到最好的算法就行了。如果發(fā)現(xiàn)試一遍,這些都不Work,那就認為機器學習是騙人的。
但是如果大家有了剛才那樣的理解之后,其實就知道,這樣看待機器學習是不行的。因為我們在現(xiàn)實生活中碰到的問題,可能是無限多的情況,而如果你只是套用這些有限多種的方法,那一定有些東西是解決不了的。我們用機器學習解決問題更多的時候像一個裁縫,一定要量體裁衣,針對某個問題專門設計有效的方法,這樣才能得到一個更好的結果。所以,按需設計、度身定制,是在做機器學習應用的時候特別重要的一點。有這樣能力的人不多,這可能也是很多大企業(yè)要把機器學習專家挖過去的一個原因。
機器學習本身,是一個有著深厚理論基礎的學科。最主要的是計算學習理論,其中最基本的理論模型,叫做“概率近似正確模型”。雖然這個模型很簡單,但非常重要。
機器學習做的是什么事情呢?
我們拿到一些數(shù)據(jù)x,然后建立一個模型f,就是f(x)。
我們希望這個模型f特別準確,也就是f(x)和真實結果y非常接近,那么怎么算接近呢?我們希望f(x)和y的區(qū)別很小,小于一個很小的值epsilon。
我們不能保證每次預測都完美,只能希望以大概率得到好結果,所謂大概率就是比1-\delta更大的概率,這里\delta是個很小的值。
所以可以看出,機器學習做的事情,是你給我數(shù)據(jù)之后,希望能夠以很高的概率給出一個好模型。在這個意義上我們做的很多事情是可以有理論保證的。比如說我們可以估算,需要多大規(guī)模的數(shù)據(jù)樣本,才能對某個問題做到什么樣的程度。如果你對這個問題的要求非常高,但是要達到這個效果所需要的樣本規(guī)模大到無法滿足,那這個問題就是不可學習的。所以在“概率近似正確”的意義下,要做出一個什么樣的模型,把問題能解決得多好,我們是可以從理論上去探討它的,并且是可以有理論的保證。但這件事情,在今天可能會發(fā)生一些變化,我待會在后面談一談。
那么深度學習,如果從技術上來看是一個什么東西呢?其實它就是一個神經(jīng)網(wǎng)絡。以往我們有很多神經(jīng)網(wǎng)絡的研究,那么我這邊畫了非常簡單的一個3層網(wǎng)絡,這個里面的一個圓圈就是我們所謂的一個神經(jīng)元。如果從生物機理來說的話,一個神經(jīng)元收到很多其它神經(jīng)元發(fā)來的電位信號,信號經(jīng)過放大到達它這里,如果這個累積信號比它自己的電位高了,那這個神經(jīng)元就被激活了。這個現(xiàn)象其實在1943年的時候,就有芝加哥大學的兩位學者創(chuàng)立了M-P 模型,把它形式化出來。你看,一個神經(jīng)元接受到很多x,經(jīng)過w加權輸入到它,如果這個加權的和大于θ,它就激活產(chǎn)生y,其實這個寫出來是很簡單的一條公式。
我們可以看到其實神經(jīng)網(wǎng)絡本質(zhì)上,是一個簡單函數(shù)通過多層嵌套疊加形成的一個數(shù)學模型,背后其實是數(shù)學和工程在做支撐。而神經(jīng)生理學起的作用,可以說是給了一點點啟發(fā),但是遠遠不像現(xiàn)在很多人說的神經(jīng)網(wǎng)絡研究受到神經(jīng)生理學的“指導”,或者是“模擬腦”。再比如說我們在深度學習里面仍然用的非常多的一個算法,BP(反向傳播)算法,這個是1986年被重新發(fā)明出來的,這個算法完全是從數(shù)學上推導出來的,它和神經(jīng)生理學基本沒有聯(lián)系。
今天我們再看使用最多的深度學習模型之一:卷積神經(jīng)網(wǎng)絡,它也是這樣很多層。只不過在這個里邊,除了原來的這些基本操作之后,還引入了一些操作,比如說這個信號處理里面的卷積,卷積其實是起到了一定的時間、空間的平移不變性。還有這個采樣,把一個區(qū)域的值用一個值代替,這是數(shù)據(jù)挖掘里對噪聲進行平滑的基本技術,也是縮減計算量的基本技術。所以這些都是常見的操作,融合進去了。
但是特別要注意的是,其實CNN這個東西新不新呢?并不新。它第一次被完整地發(fā)表出來,是在1995年,然后這個東西成功地被用于手寫體字符識別,是在1998年。那為什么今天才會熱起來呢?這有一些原因,我們下面要繼續(xù)探討它。在探討它之前,我要說一點,就是現(xiàn)在有很多媒體,常說深度學習是“模擬人腦”,其實這個說法不太對。我們可以說最早的神經(jīng)網(wǎng)絡受到一點點啟發(fā),但完全不能說是“模擬人腦”之類的。那么深度學習的層數(shù)很深了,是不是就模擬了呢?我在此引用一下Yann LeCun的說法,大家都知道LeCun是國際上深度學習領域非常著名的3位學者之一,他對“深度學習造成人工智能威脅”的說法不贊成。他尤其這樣說:
對深度神經(jīng)網(wǎng)絡,“我最不喜歡的描述是‘它像大腦一樣工作’。我不喜歡人們這樣說的原因是,雖然深度學習從生命的生物機理中獲得靈感,但它與大腦的實際工作原理差別非常非常巨大。將它與大腦進行類比給它賦予了一些神奇的光環(huán),這種描述是很危險的,這將導致天花亂墜的宣傳,大家在要求一些不切實際的事情?!?/p>
其實確實是這樣,如果我們把深度學習就當做一個數(shù)學模型去理解,可能還可以相對多明白一些,因為神經(jīng)機理本身就說不清楚。
那么深度學習技術發(fā)展發(fā)表的那么早,為什么今天才特別熱呢?有幾個問題很重要。
第一個問題,我們今天用到的深度學習模型到底有多深?
比如2015年,微軟亞洲研究院參加ImageNet比賽,獲得冠軍的網(wǎng)絡用到152層,到今天的話有很多網(wǎng)絡已經(jīng)上千層了。這個上千層的網(wǎng)絡里涉及到的參數(shù)的數(shù)目是幾十億甚至上百億個,是非常大型的一個模型。
第二個問題,為什么要做到這么深呢?
其實在機器學習理論里面,我們很早就知道,如果你能夠提升一個模型的復雜度,那么可以提升其學習能力。比如說對神經(jīng)網(wǎng)絡這樣的模型,我們怎么樣提升它的復雜度呢?很明顯的就有兩個辦法,一個辦法,是把網(wǎng)絡加寬,另外一個辦法,是把它加深。但是如果從提升復雜度的角度來說,加深會更有用。因為你加寬的話其實是增加了基函數(shù)的個數(shù),加深的話,不光增加了函數(shù)個數(shù),還增加了函數(shù)嵌套的層數(shù)。所以從泛函表達上,它的能力是會更好。所以“加深”對增強模型的復雜度和學習能力更有用。
第三個問題,那既然你們早就知道“加深”能夠增強學習能力,為什么早一點不去做?
這個很重要的一點就是,機器的學習能力增強并不見得一定是好事。因為大家知道,機器學習所做的,是你給我一些數(shù)據(jù),我從這些數(shù)據(jù)里面希望把一般的規(guī)律學出來,用來處理今后的新數(shù)據(jù)。但是有時候,我可能會把所給數(shù)據(jù)的自身特性學出來,錯誤地當成一般規(guī)律,這時候就會犯錯。那這種情況在機器學習里面叫做“過擬合”,所以我們一直是在和“過擬合”作斗爭。那過擬合是怎么發(fā)生的呢?以往理論告訴你,主要因為你的模型過于復雜。這就好比說我們在解決一個問題的時候,你把這個問題想得過度復雜化了,你反倒會犯錯誤,這就是“過擬合”。
所以以往大家都不希望用太復雜的模型,機器學習界設計了很多技術來緩解過擬合,例如決策樹剪枝、神經(jīng)網(wǎng)絡提早停止,SVM正則化等等,但實際上最簡單有效的是什么?就是使用更多的數(shù)據(jù)。因為你想,你給我1000個數(shù)據(jù),我可能學出來的是特性,不是一般規(guī)律,但是從1000萬個數(shù)據(jù)里面學出來的,很可能就是一般規(guī)律了。
所以,為什么這么復雜的模型在今天特別有用呢?
第一個原因,是我們有了大量的訓練數(shù)據(jù)。沒有大數(shù)據(jù)的話,這個東西是不會有那么多用處的。
第二個原因,這么大的模型,我們一定要有很強的計算設備才能算出來,今天我們恰恰也有了。
不管是GPU,還是CPU集群,還包括今天有這么多人去研究機器學習的平臺,做機器學習技術的底層支撐。如果我們只做簡單模型的話,可能這些計算設備和技巧上的努力就不是那么重要。
第三個原因,就是這里面要使用大量的“竅門”(Trick)。
大家如果用過深度學習網(wǎng)絡的,你就會知道,第一個人說我在某模型上加了一層性能更好,可能第二個人會告訴你,在我的任務上把這層網(wǎng)絡減掉才更好。很多都是這樣。更關鍵的是,什么時候有效、什么地方無效,不知道。所以正統(tǒng)機器學習界來看這些東西不能稱為“方法”,因為道理不清楚,只能稱為“竅門”。
深度學習里面有大量的Trick,所以今天來看就有點像老中醫(yī)在治病一樣,雖然能治病,但是什么東西是有用的,什么是沒有用的,什么是起副作用的,都不太清楚,籠統(tǒng)地混到一起,有些渾水摸魚的味道。這里面理論研究遠遠沒有跟上,因為應用嘗試比較容易?,F(xiàn)在有很多深度學習架構,讓大家很方便,新手學習個十天半個月就可以上手調(diào)試不同的模型做應用了,性能有提高就很快發(fā)表文章。但是理論研究的門檻很高,先要訓練四五年可能才能開始做事情。這就造成很多應用方面的嘗試,報道說這樣好、那樣好,但是能做理論的人很少,來不及去研究,而且因為很少有共性的東西。不同的人哪怕用的都是CNN,其實模型完全不同,做理論的也不知道從哪里去下手才不是浪費時間。這些問題要解決,需要有更多的人沉下心來研究基礎問題,基礎問題弄明白了,反過來可以更大地促進應用。
PS:長按二維碼加入KDD China 會員
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。