機器學習進化史:從線性模型到神經網絡

 

【深度】機器學習進化史:從線性模型到神經網絡

本文做者:天諾 2015-05-05 16:54
導語:Reza Zadeh是斯坦福大學工程計算和數學研究所顧問教授,他主要專一於機器學習理論和應用,分佈式計算。若是你對人工智能感興趣,那他講述的機器學習進化史你必定要看。

【深度】機器學習進化史:從線性模型到神經網絡

Reza Zadeh是斯坦福大學工程計算和數學研究所顧問教授,也是Databricks公司技術顧問,他主要專一於機器學習理論和應用,分佈式計算,以及離散應用數學。近日,他接受了oreilly網站的採訪,嘗試談論了人工智能的各方面。html

  • 神經網絡已捲土重來,而且做爲一種新方法,在機器學習中發揮着愈來愈重要的角色算法

  • 經過利用已有算法的監督學習解決方案,最偉大成就已經實現編程

  • Spark是一種特別適合分佈式機器學習的環境網絡

說說你在斯坦福的工做吧

在斯坦福大學,我設計並教授分佈式算法和優化,此外我還教授一門離散數學和算法的課程。在離散數學課程裏,我是徹底從理論角度來教算法的,這意味着我所教授的算法徹底不依賴於任何編程語言或框架,咱們會直接把許多理論和證實寫在白板上。架構

可是若是想要更實際些的話,那就得來個人分佈式算法課了,咱們會在Spark編程環境下工做,而我幾乎會花一半時間在Spark上面。在這個平臺上,我所教授的,設計分佈式算法和機器學習的理論均可以執行,並且很是具體。app

2006年我來到Google負責MapReduce編程模型,實際上以前Hadoop已經廣爲人知,也很是流行了,但在Google,MapReduce已經十分紅熟。當時我只有18歲,也很是看好這個項目。因而,我花了不少時間在MapReduce上構建、思考算法,甚至在離開Google以後的很長一段時間依然持續這麼作。後來有了Spark計算框架,它是開源的,你們均可以瞭解其核心,爲其作貢獻。我感受Spark的時代已經到來了,由於對絕大多數分佈式計算來講,彈性分佈式數據集是很是抽象的。框架

機器學習的進化

從你在Google工做,到如今Spark計算框架上工做,應該有機會看到機器學習的進化吧,由於它們和分佈式計算的聯繫都很是緊密,你會如何描述這種進化呢?

從上世紀90年代開始,機器學習已通過了一些過渡時期。從1995年到2005年,不少人專一在天然語言,搜索,以及信息檢索領域。機器學習工具好比今咱們使用的要更加簡單,他們包括邏輯迴歸分析,SVMs(支持向量機),支持向量機內核,網頁排名等。利用這些技術,Google得到了巨大成功,好比Google News就很是成功,還有Gmai垃圾郵件分類器,它利用易分佈式算法進行排名和文本分類。到了上世紀90年代中期,這些技術已經變得十分紅熟了。iphone

大約在2005年左右,神經網絡又開始捲土重來。神經網絡其實算是上世紀80年代的技術,一些人甚至認爲它起源於上世紀60年代,得益於計算機視覺的技術的最新進展,讓(卷積)神經網絡的使用顯得卓有成效。事實上,神經網絡已經開始在其餘應用上「大展宏圖」,包括天然語言處理和機器翻譯等領域。機器學習

可是有一個問題:在全部說起的機器學習分佈式模型中,神經網絡多是最具挑戰性的。那些早期模型都已經訓練成功被分佈。咱們不須要太過麻煩,就能使用100臺機器,並訓練一個邏輯迴歸或支持向量機,可是開發一個分佈式神經網絡學習設置卻難的多。編程語言

那麼,猜猜看如今神經網絡這塊誰作的最成功?到目前爲止,惟一的公司就是Google。他們是這一領域裏的先驅。如今就像是回到了2005年,當時Google發佈了MapReduce,每一個人都爭相創建一樣的基礎設施。Google實現了分佈神經網絡,也獲得了更多回報,現在,每一個人都但願他們也能像Google同樣得到成功,可是好事兒不會發生兩次。

爲何一個支持向量機或邏輯迴歸比神經網絡更容易實現分佈?

首先,評估一個支持向量機要簡單得多。當你學習了一個支持向量機模型或邏輯迴歸模型(或者任何一個線性模型)以後,實際評估就會很是快。好比說你構建一個垃圾郵件分類器,一個新電子郵件過來後,把它歸到垃圾郵件仍是非垃圾郵件只須要花很短期就能完成,由於它只是一個點積(線性代數術語)。

可是當涉及神經網絡,你的計算量將會大大增長,即使你已經學習了相關模型,但仍然要搞明白該模型的輸出。並且,這還不是最大的問題,一般一個支持向量機應對一百萬個參數還遊刃有餘,可是我所見過一個成功的最小神經網絡,涉及的參數就多達600萬個,並且這仍是最小的。另外一個問題是訓練算法並無從最優化理論中得到太多好處。咱們所使用的絕大多數線性模型基本上都有數學理論支持,而且能夠肯定什麼時候完成訓練。這種模式能夠確保你能發現最好的模型,可是神經網絡現有的最優化算法沒法支持這樣的保證。在你訓練了一個神經網絡以後,其實沒法判斷出它是不是最好的模型。一旦這樣,你就會不自覺的去想是否還會有更好的模型,所以就會不斷訓練下去。

當神經網絡變得愈來愈強大,你會不會看到他們愈來愈多地被納入到過去曾是線性的工做方法類別之中呢?

是的,我是這樣認爲的。事實上,這種情況如今就正在發生。總有一些線性模型問題,僅能靠線性來辨別。爲了讓非線性參與,你不得不增長或改變一些功能,所以就會涉及到大量工做。舉個例子,計算機視覺科學家花了十年時間開發、調試一種名爲SIFT的功能,能夠支持圖像分類和其餘使用線性方法的視覺任務。但以後,神經網絡出現了,篩選功能變得再也不必要,做爲訓練的一部分,神經網絡的解決方法是讓這些功能自動化。

可是我認爲,如今說神經網絡能夠去到全部功能建設技術彷佛還爲時過早。並且,我也不認爲會發生這種狀況,線性模型和優秀的人爲驅動功能引擎總會有它的一席之地。就像此次參加神經信息處理系統進展大會的研究人員,他們絕大多數已經開始評估本身應用程序的神經網絡。你們都在測試他們的應用程序是否可以從神經網絡的非線性模式中獲益。

這毫不是說咱們以前就沒有過非線性模式,實際上,咱們有許多非線性模式。但問題是,神經網絡碰巧出現,並且異常強大,在一些應用程序上,它更奏效,所以纔會值得嘗試。這也是不少人正在作的事情。目前爲止,在語音識別,計算機視覺,以及機器翻譯上神經網絡的應用都很是成功。它還能夠應用在許多難度更大的任務上,所以將來仍是十分使人興奮的。

【深度】機器學習進化史:從線性模型到神經網絡

神經網絡的關鍵是什麼?

相對於傳統的線性和非線性方法,爲何神經網絡會如此強大?

當你有一個線性模型,每個功能要麼對你有幫助,要麼對你有傷害,這種假設是線性模型中固有的。所以線性模型要麼功能異常強大,用類1表示;要麼則毫無用處,用類2表示。全部的解決方案,要麼致使該功能得到巨大的價值;要麼價值變得微不足道。你永遠不會有這麼一個狀態說,在這個區間,該功能就是表明類1;可是在另外一個區間,它表明類2。

線性和非線性方法侷限性很大。也就是說,若是你分析圖片,舉個例子,尋找狗狗的照片,它極可能會進入到一個特定的子集裏面,好比只顯示有一隻狗的照片,或是顯示某一像素和其餘類型的圖片。在線性模式裏面,你沒法肯定複雜的關係集。相比於線性模型,非線性模型可能會顯得更強大一些,可是這種模式一樣難以訓練。咱們會再一次進入到所謂最優化理論的問題之中,這也是咱們在很長一段時間裏認爲神經網絡還不是足夠好的緣由之一,由於他們會「過擬合」,通俗的說,就是太過強大。咱們沒法作預測,也沒法確保最優化方案。或許,這可能就是爲何神經網絡從當下暫時消失的緣由吧。

在神經網絡理論中,機器學習有不少分支和方法,你能總結一些關鍵方法嗎?

到目前爲止,最成功的方法是監督學習方法,它使用了一個比較老的算法,稱爲反向傳播,構建了一個擁有許多不一樣輸出的神經網絡。

讓咱們看下一個神經網絡構建,這個網絡已經很是流行了,叫作卷積神經網絡。這個理念是機器學習研究人員構建了一個多層架構的模型,每一層均可以用不一樣的方法處理以前一層的鏈接。

在第一層,你有一個窗口,上面會給圖像分配權值,它也變成了該層的輸入。因爲權值「卷積」,該層也被稱爲卷積層,它會自我重疊。接着後面會有若干個不一樣類型的層,每層都有不一樣的屬性,絕大多數都是非線性的。

最後一層會有1萬個潛在神經元輸入,那些激活的神經輸出,每個都對應了一個特殊的標籤,能夠用來識別圖像。第一類多是一隻貓,第二類多是一輛車,以此推到全部一萬個類,這樣一張「圖像網」就出來了。若是第一個神經元(一隻貓)與1萬個神經元中絕大多數都匹配,那麼這張圖像就能被識別出來,是一張貓的圖像。

這種監督學習方法的缺點是,在訓練的時候,你必需要在圖像上應用標籤,這是一輛車,這是一個動物園等。

沒錯,那麼無監督學習方法呢?

無監督學習方法還不是那麼受歡迎,它涉及到「自編碼器」。這種神經網絡不會用來分類圖像,可是能夠壓縮圖像。同我剛纔說起的方法來讀取圖像,識別一個權值,並在一個卷積層內用像素填滿。其餘若干層也這樣,包括相比於其它層小的多的中間層。這樣作的話,相關的神經元會變得不多,基本上,你讀取圖像時會進入到一個瓶頸,以後從另外一邊走出來,並嘗試從新構建該圖像。

在無監督學習訓練下,不須要打標籤,由於你所作的就是把圖像放入到神經網絡的兩端,而後訓練網絡適應圖像,特別是訓練中間層。一旦你這麼作了,那麼就擁有了一個知道如何壓縮圖像的神經網絡。無監督學習方法能夠給你提供能應用在其餘分類器的功能,所以若是你有哪怕一點點標籤訓練數據,沒問題,它同樣能夠爲你提供大量圖像。你能夠把這些圖像看作是無標籤訓練數據,並使用這些圖像構建一個「自編輯器」,而後從這個自編輯器中導出一些功能,這些功能適合使用一些訓練數據,以此找到對特殊模型敏感的自動編碼神經網絡中的神經元。

【深度】機器學習進化史:從線性模型到神經網絡

是什麼讓你投身Spark?你以爲它是領先的技術集合嗎?

以前我就認識Spark的創造者Matei Zaharia,咱們都是滑鐵盧大學的校友。實際上,咱們仍是Google的同屆實習生,他當時負責開發者生產力工具,與大數據一點兒關係都沒有。Matei Zaharia在Google工做期間根本沒有接觸過MapReduce,那是我專一的領域,但最後由他負責收尾的確讓人以爲有趣。

以後Matei跳槽去了Facebook,在那裏他負責Hadoop,並得到了成功。在那段時間裏,我不斷思考分佈式機器學習,但什麼計算框架都沒有想出來,包括Hadoop在內,而此時Spark計算框架映入了個人眼簾,我感到很是興奮。

能跟咱們談談Spark到底是什麼嗎?它是如何運做的,爲何對分佈式機器學習來講,Spark很是有用?

Spark是一種集羣計算環境,能夠爲你提供分佈式矢量,這種矢量與咱們在獨立機器上編程所使用的矢量很是類似。在常規矢量下,有不少事情是作不到的,舉個例子,僅經過目錄,你沒法作到隨機訪問,可是若是有兩個矢量交集就能作到這一點,你能夠並集,也能夠分類,還能夠作不少常規矢量沒法作到的事情。

Spark讓機器學習變得簡單,其中一個緣由是它能夠儘量多的在內存中保存數據的重要部分,並且無需寫入磁盤。在一個分佈式環境下,獲取故障恢復的常規方法是進行磁盤寫入,在網絡中使用分佈式文件系統對一個磁盤複製三次。

Spark之因此很是適合機器學習,是由於數據進入到內存以後,就能夠保存其中。若是它不適合內存,也不要緊,有須要時它就會離開磁盤。但關鍵是,它可以適應內存,對於任何一個須要處理屢次數據的進程來講,好比機器學習,都很是棒。幾乎每一個機器學習算法都須要處理海量數據,並且是十倍,百倍的數據。

你以爲Spark和MapReduce比較呢?是否有一處可讓它們二者可以處理不一樣的工做負荷或職責?

我必需要明確表達一下,在很長一段時間裏,Hadoop都是做爲一個生態系統在茁壯成長。我不認爲Hadoop生態系統的MapReduce組件也會這樣。

若是要回答你的問題的話,個人答案是不,我不認爲他們可以處理不一樣的工做負荷或職責。老實說,我認爲若是你啓動一項新工做,除非你已經有了須要維護的代碼羣,不然使用MapReduce一點兒意義都沒有。若是如今還用MapReduce的話,彷佛顯得有點二了,換而言之,若是你能寫C++代碼,寫集合代碼是毫無心義的。

Spark將來會朝何處發展?

RZ:目前來講,Spark自己是很是穩定的。目前,或許也是將來幾年可能會發生的最大變化,或者說最大提高吧,就是Spark的代碼庫。機器學習代碼庫,圖像處理代碼庫,SQL代碼庫,以及流媒體代碼庫,全部這些都在快速發展,至少在將來兩年內,它每個變化都使人興奮。Spark全部的功能都是我想要的,並且很高興看到它執行起來也很是便捷。同時,對於社區驅動的貢獻我也感到由衷的高興,現在在網站上開發者社區對Spark進行支持,這樣對長尾用戶來講是很是有幫助的。

隨着時間的溝渠,我認爲Spark會成爲一個真正的分佈式引擎,幫助咱們大規模構建機器學習算法。

via radar

雷鋒網原創文章,未經受權禁止轉載。詳情見轉載須知

相關文章
相關標籤/搜索