Reza Zadeh是斯坦福大學工程計算和數(shù)學研究所顧問教授,也是Databricks公司技術(shù)顧問,他主要專注于機器學習理論和應用,分布式計算,以及離散應用數(shù)學。近日,他接受了oreilly網(wǎng)站的采訪,嘗試談論了人工智能的各方面。
神經(jīng)網(wǎng)絡已卷土重來,并且作為一種新方法,在機器學習中發(fā)揮著越來越重要的角色
通過利用已有算法的監(jiān)督學習解決方案,最偉大成就已經(jīng)實現(xiàn)
Spark是一種特別適合分布式機器學習的環(huán)境
說說你在斯坦福的工作吧
在斯坦福大學,我設計并教授分布式算法和優(yōu)化,此外我還教授一門離散數(shù)學和算法的課程。在離散數(shù)學課程里,我是完全從理論角度來教算法的,這意味著我所教授的算法完全不依賴于任何編程語言或框架,我們會直接把許多理論和證明寫在白板上。
但是如果想要更實際些的話,那就得來我的分布式算法課了,我們會在Spark編程環(huán)境下工作,而我?guī)缀鯐ㄒ话霑r間在Spark上面。在這個平臺上,我所教授的,設計分布式算法和機器學習的理論都可以執(zhí)行,而且非常具體。
2006年我來到Google負責MapReduce編程模型,實際上之前Hadoop已經(jīng)廣為人知,也非常流行了,但在Google,MapReduce已經(jīng)十分成熟。當時我只有18歲,也非常看好這個項目。于是,我花了很多時間在MapReduce上構(gòu)建、思考算法,甚至在離開Google之后的很長一段時間依然持續(xù)這么做。后來有了Spark計算框架,它是開源的,大家都可以了解其核心,為其做貢獻。我感覺Spark的時代已經(jīng)到來了,因為對絕大多數(shù)分布式計算來說,彈性分布式數(shù)據(jù)集是非常抽象的。
機器學習的進化
從你在Google工作,到現(xiàn)在Spark計算框架上工作,應該有機會看到機器學習的進化吧,因為它們和分布式計算的聯(lián)系都非常緊密,你會如何描述這種進化呢?
從上世紀90年代開始,機器學習已經(jīng)過了一些過渡時期。從1995年到2005年,很多人專注在自然語言,搜索,以及信息檢索領(lǐng)域。機器學習工具比如今我們使用的要更加簡單,他們包括邏輯回歸分析,SVMs(支持向量機),支持向量機內(nèi)核,網(wǎng)頁排名等。利用這些技術(shù),Google獲得了巨大成功,比如Google News就非常成功,還有Gmai垃圾郵件分類器,它利用易分布式算法進行排名和文本分類。到了上世紀90年代中期,這些技術(shù)已經(jīng)變得十分成熟了。
大約在2005年左右,神經(jīng)網(wǎng)絡又開始卷土重來。神經(jīng)網(wǎng)絡其實算是上世紀80年代的技術(shù),一些人甚至認為它起源于上世紀60年代,得益于計算機視覺的技術(shù)的最新進展,讓(卷積)神經(jīng)網(wǎng)絡的使用顯得卓有成效。事實上,神經(jīng)網(wǎng)絡已經(jīng)開始在其他應用上“大展宏圖”,包括自然語言處理和機器翻譯等領(lǐng)域。
但是有一個問題:在所有提及的機器學習分布式模型中,神經(jīng)網(wǎng)絡可能是最具挑戰(zhàn)性的。那些早期模型都已經(jīng)訓練成功被分布。我們不需要太過麻煩,就能使用100臺機器,并訓練一個邏輯回歸或支持向量機,但是開發(fā)一個分布式神經(jīng)網(wǎng)絡學習設置卻難的多。
那么,猜猜看現(xiàn)在神經(jīng)網(wǎng)絡這塊誰做的最成功?到目前為止,唯一的公司就是Google。他們是這一領(lǐng)域里的先驅(qū)?,F(xiàn)在就像是回到了2005年,當時Google發(fā)布了MapReduce,每個人都爭相建立同樣的基礎設施。Google實現(xiàn)了分布神經(jīng)網(wǎng)絡,也得到了更多回報,如今,每個人都希望他們也能像Google一樣獲得成功,但是好事兒不會發(fā)生兩次。
為什么一個支持向量機或邏輯回歸比神經(jīng)網(wǎng)絡更容易實現(xiàn)分布?
首先,評估一個支持向量機要簡單得多。當你學習了一個支持向量機模型或邏輯回歸模型(或者任何一個線性模型)之后,實際評估就會非??臁1热缯f你構(gòu)建一個垃圾郵件分類器,一個新電子郵件過來后,把它歸到垃圾郵件還是非垃圾郵件只需要花很短時間就能完成,因為它只是一個點積(線性代數(shù)術(shù)語)。
但是當涉及神經(jīng)網(wǎng)絡,你的計算量將會大大增加,即便你已經(jīng)學習了相關(guān)模型,但仍然要搞明白該模型的輸出。而且,這還不是最大的問題,通常一個支持向量機應對一百萬個參數(shù)還游刃有余,但是我所見過一個成功的最小神經(jīng)網(wǎng)絡,涉及的參數(shù)就多達600萬個,而且這還是最小的。另一個問題是訓練算法并沒有從最優(yōu)化理論中獲得太多好處。我們所使用的絕大多數(shù)線性模型基本上都有數(shù)學理論支持,并且可以確定何時完成訓練。這種模式可以確保你能發(fā)現(xiàn)最好的模型,但是神經(jīng)網(wǎng)絡現(xiàn)有的最優(yōu)化算法無法支持這樣的保證。在你訓練了一個神經(jīng)網(wǎng)絡之后,其實無法判斷出它是否是最好的模型。一旦這樣,你就會不自覺的去想是否還會有更好的模型,因此就會不斷訓練下去。
當神經(jīng)網(wǎng)絡變得越來越強大,你會不會看到他們越來越多地被歸入到過去曾是線性的工作方法類別之中呢?
是的,我是這樣認為的。事實上,這種狀況現(xiàn)在就正在發(fā)生??傆幸恍┚€性模型問題,僅能靠線性來辨別。為了讓非線性參與,你不得不增加或改變一些功能,因此就會涉及到大量工作。舉個例子,計算機視覺科學家花了十年時間開發(fā)、調(diào)試一種名為SIFT的功能,可以支持圖像分類和其他使用線性方法的視覺任務。但之后,神經(jīng)網(wǎng)絡出現(xiàn)了,篩選功能變得不再必要,作為訓練的一部分,神經(jīng)網(wǎng)絡的解決方法是讓這些功能自動化。
但是我認為,現(xiàn)在說神經(jīng)網(wǎng)絡可以去到所有功能建設技術(shù)似乎還為時過早。而且,我也不認為會發(fā)生這種情況,線性模型和優(yōu)秀的人為驅(qū)動功能引擎總會有它的一席之地。就像這次參加神經(jīng)信息處理系統(tǒng)進展大會的研究人員,他們絕大多數(shù)已經(jīng)開始評估自己應用程序的神經(jīng)網(wǎng)絡。大家都在測試他們的應用程序是否能夠從神經(jīng)網(wǎng)絡的非線性模式中獲益。
這絕不是說我們之前就沒有過非線性模式,實際上,我們有許多非線性模式。但問題是,神經(jīng)網(wǎng)絡碰巧出現(xiàn),而且異常強大,在一些應用程序上,它更奏效,因此才會值得嘗試。這也是很多人正在做的事情。目前為止,在語音識別,計算機視覺,以及機器翻譯上神經(jīng)網(wǎng)絡的應用都非常成功。它還可以應用在許多難度更大的任務上,因此未來還是十分令人興奮的。
神經(jīng)網(wǎng)絡的關(guān)鍵是什么?
相對于傳統(tǒng)的線性和非線性方法,為什么神經(jīng)網(wǎng)絡會如此強大?
當你有一個線性模型,每一個功能要么對你有幫助,要么對你有傷害,這種假設是線性模型中固有的。因此線性模型要么功能異常強大,用類1表示;要么則毫無用處,用類2表示。所有的解決方案,要么導致該功能獲得巨大的價值;要么價值變得微不足道。你永遠不會有這么一個狀態(tài)說,在這個區(qū)間,該功能就是代表類1;但是在另一個區(qū)間,它代表類2。
線性和非線性方法局限性很大。也就是說,如果你分析圖片,舉個例子,尋找狗狗的照片,它很可能會進入到一個特定的子集里面,比如只顯示有一只狗的照片,或是顯示某一像素和其他類型的圖片。在線性模式里面,你無法確定復雜的關(guān)系集。相比于線性模型,非線性模型可能會顯得更強大一些,但是這種模式同樣難以訓練。我們會再一次進入到所謂最優(yōu)化理論的問題之中,這也是我們在很長一段時間里認為神經(jīng)網(wǎng)絡還不是足夠好的原因之一,因為他們會“過擬合”,通俗的說,就是太過強大。我們無法做預測,也無法確保最優(yōu)化方案?;蛟S,這可能就是為什么神經(jīng)網(wǎng)絡從當下暫時消失的原因吧。
在神經(jīng)網(wǎng)絡理論中,機器學習有很多分支和方法,你能總結(jié)一些關(guān)鍵方法嗎?
到目前為止,最成功的方法是監(jiān)督學習方法,它使用了一個比較老的算法,稱為反向傳播,構(gòu)建了一個擁有許多不同輸出的神經(jīng)網(wǎng)絡。
讓我們看下一個神經(jīng)網(wǎng)絡構(gòu)建,這個網(wǎng)絡已經(jīng)非常流行了,叫做卷積神經(jīng)網(wǎng)絡。這個理念是機器學習研究人員構(gòu)建了一個多層架構(gòu)的模型,每一層都可以用不同的方法處理之前一層的連接。
在第一層,你有一個窗口,上面會給圖像分配權(quán)值,它也變成了該層的輸入。由于權(quán)值“卷積”,該層也被稱為卷積層,它會自我重疊。接著后面會有若干個不同類型的層,每層都有不同的屬性,絕大多數(shù)都是非線性的。
最后一層會有1萬個潛在神經(jīng)元輸入,那些激活的神經(jīng)輸出,每一個都對應了一個特殊的標簽,可以用來識別圖像。第一類可能是一只貓,第二類可能是一輛車,以此推到所有一萬個類,這樣一張“圖像網(wǎng)”就出來了。如果第一個神經(jīng)元(一只貓)與1萬個神經(jīng)元中絕大多數(shù)都匹配,那么這張圖像就能被識別出來,是一張貓的圖像。
這種監(jiān)督學習方法的缺點是,在訓練的時候,你必須要在圖像上應用標簽,這是一輛車,這是一個動物園等。
沒錯,那么無監(jiān)督學習方法呢?
無監(jiān)督學習方法還不是那么受歡迎,它涉及到“自編碼器”。這種神經(jīng)網(wǎng)絡不會用來分類圖像,但是可以壓縮圖像。同我剛才提及的方法來讀取圖像,識別一個權(quán)值,并在一個卷積層內(nèi)用像素填滿。其他若干層也這樣,包括相比于其它層小的多的中間層。這樣做的話,相關(guān)的神經(jīng)元會變得很少,基本上,你讀取圖像時會進入到一個瓶頸,之后從另一邊走出來,并嘗試重新構(gòu)建該圖像。
在無監(jiān)督學習訓練下,不需要打標簽,因為你所做的就是把圖像放入到神經(jīng)網(wǎng)絡的兩端,然后訓練網(wǎng)絡適應圖像,特別是訓練中間層。一旦你這么做了,那么就擁有了一個知道如何壓縮圖像的神經(jīng)網(wǎng)絡。無監(jiān)督學習方法可以給你提供能應用在其他分類器的功能,因此如果你有哪怕一點點標簽訓練數(shù)據(jù),沒問題,它一樣可以為你提供大量圖像。你可以把這些圖像看做是無標簽訓練數(shù)據(jù),并使用這些圖像構(gòu)建一個“自編輯器”,然后從這個自編輯器中導出一些功能,這些功能適合使用一些訓練數(shù)據(jù),以此找到對特殊模型敏感的自動編碼神經(jīng)網(wǎng)絡中的神經(jīng)元。
是什么讓你投身Spark?你覺得它是領(lǐng)先的技術(shù)集合嗎?
之前我就認識Spark的創(chuàng)造者Matei Zaharia,我們都是滑鐵盧大學的校友。實際上,我們還是Google的同屆實習生,他當時負責開發(fā)者生產(chǎn)力工具,與大數(shù)據(jù)一點兒關(guān)系都沒有。Matei Zaharia在Google工作期間根本沒有接觸過MapReduce,那是我專注的領(lǐng)域,但最后由他負責收尾的確讓人覺得有趣。
之后Matei跳槽去了Facebook,在那里他負責Hadoop,并獲得了成功。在那段時間里,我不斷思考分布式機器學習,但什么計算框架都沒有想出來,包括Hadoop在內(nèi),而此時Spark計算框架映入了我的眼簾,我感到非常興奮。
能跟我們談談Spark究竟是什么嗎?它是如何運作的,為什么對分布式機器學習來說,Spark非常有用?
Spark是一種集群計算環(huán)境,可以為你提供分布式矢量,這種矢量與我們在獨立機器上編程所使用的矢量非常相似。在常規(guī)矢量下,有很多事情是做不到的,舉個例子,僅通過目錄,你無法做到隨機訪問,但是如果有兩個矢量交集就能做到這一點,你可以并集,也可以分類,還可以做很多常規(guī)矢量無法做到的事情。
Spark讓機器學習變得簡單,其中一個原因是它可以盡可能多的在內(nèi)存中保存數(shù)據(jù)的重要部分,而且無需寫入磁盤。在一個分布式環(huán)境下,獲取故障恢復的常規(guī)方法是進行磁盤寫入,在網(wǎng)絡中使用分布式文件系統(tǒng)對一個磁盤復制三次。
Spark之所以非常適合機器學習,是因為數(shù)據(jù)進入到內(nèi)存之后,就可以保存其中。如果它不適合內(nèi)存,也沒關(guān)系,有需要時它就會離開磁盤。但關(guān)鍵是,它能夠適應內(nèi)存,對于任何一個需要處理多次數(shù)據(jù)的進程來說,比如機器學習,都非常棒。幾乎每個機器學習算法都需要處理海量數(shù)據(jù),而且是十倍,百倍的數(shù)據(jù)。
你覺得Spark和MapReduce比較呢?是否有一處可以讓它們兩者能夠處理不同的工作負荷或職責?
我必須要明確表達一下,在很長一段時間里,Hadoop都是作為一個生態(tài)系統(tǒng)在茁壯成長。我不認為Hadoop生態(tài)系統(tǒng)的MapReduce組件也會這樣。
如果要回答你的問題的話,我的答案是不,我不認為他們能夠處理不同的工作負荷或職責。老實說,我認為如果你啟動一項新工作,除非你已經(jīng)有了需要維護的代碼群,否則使用MapReduce一點兒意義都沒有。如果現(xiàn)在還用MapReduce的話,似乎顯得有點二了,換而言之,如果你能寫C++代碼,寫集合代碼是毫無意義的。
Spark未來會朝何處發(fā)展?
RZ:目前來說,Spark本身是非常穩(wěn)定的。目前,或許也是未來幾年可能會發(fā)生的最大變化,或者說最大提升吧,就是Spark的代碼庫。機器學習代碼庫,圖像處理代碼庫,SQL代碼庫,以及流媒體代碼庫,所有這些都在快速發(fā)展,至少在未來兩年內(nèi),它每一個變化都令人興奮。Spark所有的功能都是我想要的,而且很高興看到它執(zhí)行起來也非常便捷。同時,對于社區(qū)驅(qū)動的貢獻我也感到由衷的高興,如今在網(wǎng)站上開發(fā)者社區(qū)對Spark進行支持,這樣對長尾用戶來說是非常有幫助的。
隨著時間的溝渠,我認為Spark會成為一個真正的分布式引擎,幫助我們大規(guī)模構(gòu)建機器學習算法。
-
神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
42文章
4779瀏覽量
101079 -
算法
+關(guān)注
關(guān)注
23文章
4629瀏覽量
93230 -
機器學習
+關(guān)注
關(guān)注
66文章
8438瀏覽量
132967
發(fā)布評論請先 登錄
相關(guān)推薦
評論