第六章 深度学习(上中)
其他的深度學習模型
在整本書中,我們聚焦在解決 MNIST 數字分類問題上。這一“下金蛋的”問題讓我們深入理解了一些強大的想法:隨機梯度下降,BP,卷積網絡,正規化等等。但是該問題卻也是相當狹窄的。如果你研讀過神經網絡的研究論文,那么會遇到很多這本書中未曾討論的想法:RNN,Boltzmann Machine,生成式模型,遷移學習,強化學習等等……等等!(太多了)神經網絡是一個廣闊的領域。然而,很多重要的想法都是我們書中探討過的那些想法的變種,在有了本書的知識基礎上,可能需要一些額外的努力,便可以理解這些新的想法了。所以在本節,我們給出這些想法的一些介紹。介紹本身不會非常細節化,可能也不會很深入——倘若要達成這兩點,這本書就得擴展相當多內容了。因此,我們接下來的討論是偏重思想性的啟發,嘗試去激發這個領域的產生豐富的概念,并將一些豐富的想法關聯于前面已經介紹過的概念。我也會提供一些其他學習資源的連接。當然,鏈接給出的很多想法也會很快被超過,所以推薦你學會搜索最新的研究成果。盡管這樣,我還是很期待眾多本質的想法能夠受到足夠久的關注。
Recurrent Neural Networks (RNNs):在前饋神經網絡中,單獨的輸入完全確定了剩下的層上的神經元的激活值。可以想象,這是一幅靜態的圖景:網絡中的所有事物都被固定了,處于一種“冰凍結晶”的狀態。但假如,我們允許網絡中的元素能夠以動態方式不斷地比那話。例如,隱藏神經元的行為不是完全由前一層的隱藏神經元,而是同樣受制于更早的層上的神經元的激活值。這樣肯定會帶來跟前饋神經網絡不同的效果。也可能隱藏和輸出層的神經元的激活值不會單單由當前的網絡輸入決定,而且包含了前面的輸入的影響。
擁有之類時間相關行為特性的神經網絡就是遞歸神經網絡,常寫作 RNN。當然有不同的方式來從數學上給出 RNN 的形式定義。你可以參考維基百科上的RNN介紹來看看 RNN。在我寫作本書的時候,維基百科上介紹了超過 13 種不同的模型。但除了數學細節,更加一般的想法是,RNN 是某種體現出了隨時間動態變化的特性的神經網絡。也毫不奇怪,RNN 在處理時序數據和過程上效果特別不錯。這樣的數據和過程正是語音識別和自然語言處理中常見的研究對象。
RNN 被用來將傳統的算法思想,比如說 Turing 機或者編程語言,和神經網絡進行聯系上。這篇 2014 年的論文提出了一種 RNN 可以以 python 程序的字符級表達作為輸入,用這個表達來預測輸出。簡單說,網絡通過學習來理解某些 python 的程序。第二篇論文 同樣是 2014 年的,使用 RNN 來設計一種稱之為 “神經 Turing 機” 的模型。這是一種通用機器整個結構可以使用梯度下降來訓練。作者訓練 NTM 來推斷對一些簡單問題的算法,比如說排序和復制。
不過正如在文中提到的,這些例子都是極其簡單的模型。學會執行 print(398345+42598) 并不能讓網絡稱為一個正常的python解釋器!對于這些想法,我們能推進得多遠也是未知的。結果都充滿了好奇。歷史上,神經網絡已經在傳統算法上失敗的模式識別問題上取得了一些成功。另外,傳統的算法也在神經網絡并不擅長的領域里占據上風。今天沒有人會使用神經網絡來實現 Web 服務器或者數據庫程序。研究出將神經網絡和傳統的算法結合的模型一定是非常棒的。RNN 和 RNN 給出的啟發可能會給我們不少幫助。
RNN 同樣也在其他問題的解決中發揮著作用。在語音識別中,RNN 是特別有效的。例如,基于 RNN 的方法,已經在音位識別中取得了準確度的領先。同樣在開發人類語言的上改進模型中得到應用。更好的語言模型意味著能夠區分出發音相同的那些詞。例如,好的語言模型,可以告訴我們“to infinity and beyond”比“two infinity and beyond”更可能出現,盡管兩者的發音是相同的。RNN 在某些語言的標準測試集上刷新了記錄。
在語音識別中的這項研究其實是包含于更寬泛的不僅僅是 RNN而是所有類型的深度神經網絡的應用的一部分。例如,基于神經網絡的方法在大規模詞匯的連續語音識別中獲得極佳的結果。另外,一個基于深度網絡的系統已經用在了 Google 的 Android 操作系統中(詳見Vincent Vanhoucke's 2012-2015 papers)
我剛剛講完了 RNN 能做的一小部分,但還未提及他們如何工作。可能你并不詫異在前饋神經網絡中的很多想法同樣可以用在 RNN 中。尤其是,我們可以使用梯度下降和 BP 的直接的修改來訓練 RNN。還有其他一些在前饋神經網絡中的想法,如正規化技術,卷積和代價函數等都在 RNN 中非常有效。還有我們在書中講到的很多技術都可以適配一下 RNN 場景。
Long Short-term Memory units(LSTMs):影響 RNN 的一個挑戰是前期的模型會很難訓練,甚至比前饋神經網絡更難。原因就是我們在上一章提到的不穩定梯度的問題。回想一下,這個問題的通常表現就是在反向傳播的時候梯度越變越小。這就使得前期的層學習非常緩慢。在 RNN 中這個問題更加糟糕,因為梯度不僅僅通過層反向傳播,還會根據時間進行反向傳播。如果網絡運行了一段很長的時間,就會使得梯度特別不穩定,學不到東西。幸運的是,可以引入一個成為 long short-term memory 的單元進入 RNN 中。LSTM 最早是由 Hochreiter 和 Schmidhuber 在 1997 年提出,就是為了解決這個不穩定梯度的問題。LSTM 讓 RNN 訓練變得相當簡單,很多近期的論文(包括我在上面給出的那些)都是用了 LSTM 或者相關的想法。
深度信念網絡,生成式模型和 Boltzmann 機:對深度學習的興趣產生于 2006 年,最早的論文就是解釋如何訓練稱為 深度信念網絡 (DBN)的網絡。
參見 Geoffrey Hinton, Simon Osindero 和 Yee-Whye Teh 在 2006 年的 A fast learning algorithm for deep belief nets , 及 Geoffrey Hinton 和 Ruslan Salakhutdinov 在2006 年的相關工作Reducing the dimensionality of data with neural networks
DBN 在之后一段時間內很有影響力,但近些年前饋網絡和 RNN 的流行,蓋過了 DBN 的風頭。盡管如此,DBN 還是有幾個有趣的特性。
一個就是 DBN 是一種生成式模型。在前饋網絡中,我們指定了輸入的激活函數,然后這些激活函數便決定了網絡中后面的激活值。而像 DBN 這樣的生成式模型可以類似這樣使用,但是更加有用的可能就是指定某些特征神經元的值,然后進行“反向運行”,產生輸入激活的值。具體講,DBN 在手寫數字圖像上的訓練同樣可以用來生成和手寫數字很像的圖像。換句話說,DBN 可以學習寫字的能力。所以,生成式模型更像人類的大腦:不僅可以讀數字,還能夠寫出數字。用 Geoffrey Hinton 本人的話就是:“要識別對象的形狀,先學會生成圖像。” (to recognize shapes,first learn to generate images)
另一個是 DBN 可以進行無監督和半監督的學習。例如,在使用 圖像數據學習時,DBN 可以學會有用的特征來理解其他的圖像,即使,訓練圖像是無標記的。這種進行非監督學習的能力對于根本性的科學理由和實用價值(如果完成的足夠好的話)來說都是極其有趣的。
所以,為何 DBN 在已經獲得了這些引人注目的特性后,仍然逐漸消失在深度學習的浪潮中呢?部分原因在于,前饋網絡和 RNN 已經獲得了很多很好的結果,例如在圖像和語音識別的標準測試任務上的突破。所以大家把注意力轉到這些模型上并不奇怪,這其實也是很合理的。然而,這里隱藏著一個推論。研究領域里通常是贏者通吃的規則,所以,幾乎所有的注意力集中在最流行的領域中。這會給那些進行目前還不很流行方向上的研究人員很大的壓力,雖然他們的研究長期的價值非常重要。我個人的觀點是 DBN 和其他的生成式模型應該獲得更多的注意。并且我對今后如果 DBN 或者相關的模型超過目前流行的模型也毫不詫異。欲了解 DBN,參考這個DBN 綜述。還有這篇文章也很有用。雖然沒有主要地將 DBN,但是已經包含了很多關于 DBN 核心組件的受限 Boltzmann 機的有價值的信息。
其他想法:在神經網絡和深度學習中還有其他哪些正在進行的研究?恩,其實還有很多大量的其他美妙的工作。熱門的領域包含使用神經網絡來做自然語言處理 natural language processing、機器翻譯 machine translation,和更加驚喜的應用如 音樂信息學 music informatics。當然其他還有不少。在讀者完成本書的學習后,應該可以跟上其中若干領域的近期工作,可能你還需要填補一些背景知識的缺漏。
在本節的最后,我再提一篇特別有趣的論文。這篇文章將深度卷積網絡和一種稱為強化學習的技術來學習玩電子游戲 play video games well(參考這里 this followup)。其想法是使用卷積網絡來簡化游戲界面的像素數據,將數據轉化成一組特征的簡化集合,最終這些信息被用來確定采用什么樣的操作:“上”、“下”、“開火”等。特別有趣的是單一的網絡學會 7 款中不同的經典游戲,其中 3 款網絡的表現已經超過了人類專家。現在,這聽起來是噱頭,當然他們的標題也挺抓眼球的——“Playing Atari with reinforcement learning”。但是透過表象,想想系統以原始像素數據作為輸入,它甚至不知道游戲規則!從數據中學會在幾種非常不同且相當敵對的場景中做出高質量的決策,這些場景每個都有自己復雜的規則集合。所以這的解決是非常干凈利落的。
神經網絡的未來
意圖驅動的用戶接口:有個很古老的笑話是這么說的:“一位不耐煩的教授對一個困惑的學生說道,‘不要光聽我說了什么,要聽懂我說的含義。’”。歷史上,計算機通常是扮演了笑話中困惑的學生這樣的角色,對用戶表示的完全不知曉。而現在這個場景發生了變化。我仍然記得自己在 Google 搜索的打錯了一個查詢,搜索引擎告訴了我“你是否要的是[這個正確的查詢]?”,然后給出了對應的搜索結果。Google 的 CEO Larry Page 曾經描述了最優搜索引擎就是準確理解用戶查詢的含義,并給出對應的結果。
這就是意圖驅動的用戶接口的愿景。在這個場景中,不是直接對用戶的查詢詞進行結果的反饋,搜索引擎使用機器學習技術對大量的用戶輸入數據進行分析,研究查詢本身的含義,并通過這些發現來進行合理的動作以提供最優的搜索結果。
而意圖驅動接口這樣的概念也不僅僅用在搜索上。在接下來的數十年,數以千計的公司會將產品建立在機器學習來設計滿足更高的準確率的用戶接口上,準確地把握用戶的意圖。現在我們也看到了一些早期的例子:如蘋果的Siri;Wolfram Alpha;IBM 的 Watson;可以對照片和視頻進行注解的系統;還有更多的。
大多數這類產品會失敗。啟發式用戶接口設計非常困難,我期望有更多的公司會使用強大的機器學習技術來構建無聊的用戶接口。最優的機器學習并不會在你自己的用戶接口設計很糟糕時發揮出作用。但是肯定也會有能夠勝出的產品。隨著時間推移,人類與計算機的關系也會發生重大的改變。不久以前,比如說,2005 年——用戶從計算機那里得到的是準確度。因此,很大程度上計算機很古板的;一個小小的分號放錯便會完全改變和計算機的交互含義。但是在以后數十年內,我們期待著創造出意圖驅動的用戶借款購,這也會顯著地改變我們在與計算機交互的期望體驗。
機器學習,數據科學和創新的循環:當然,機器學習不僅僅會被用來建立意圖驅動的接口。另一個有趣的應用是數據科學中,機器學習可以找到藏在數據中的“確知的未知”。這已經是非常流行的領域了,也有很多的文章和書籍介紹了這一點,所以本文不會涉及太多。但我想談談比較少討論的一點,這種流行的后果:長期看來,很可能機器學習中最大的突破并不會任何一種單一的概念突破。更可能的情況是,最大的突破是,機器學習研究會獲得豐厚的成果,從應用到數據科學及其他領域。如果公司在機器學習研究中投入 1 美元,則有 1 美元加 10 美分的回報,那么機器學習研究會有很充足的資金保證。換言之,機器學習是驅動幾個主要的新市場和技術成長的領域出現的引擎。結果就是出現擁有精通業務的的大團隊,能夠獲取足夠的資源。這樣就能夠將機器學習推向更新的高度,創造出更多市場和機會,一種高級創新的循壞。
神經網絡和深度學習的角色:我已經探討過機器學習會成為一個技術上的新機遇創建者。那么神經網絡和深度學習作為一種技術又會有什么樣獨特的貢獻呢?
為了更好地回答這個問題,我們來來看看歷史。早在 1980 年代,人們對神經網絡充滿了興奮和樂觀,尤其是在 BP 被大家廣泛知曉后。而在 1990 年代,這樣的興奮逐漸冷卻,機器學習領域的注意力轉移到了其他技術上,如 SVM。現在,神經網絡卷土重來,刷新了幾乎所有的記錄,在很多問題上也都取得了勝利。但是誰又能說,明天不會有一種新的方法能夠擊敗神經網絡?或者可能神經網絡研究的進程又會阻滯,等不來沒有任何的進展?
所以,可能更好的方式是看看機器學習的未來而不是單單看神經網絡。還有個原因是我們對神經網絡的理解還是太少了。為何神經網絡能夠這么好地泛化?為何在給定大規模的學習的參數后,采取了一些方法后可以避免過匹配?為何神經網絡中隨機梯度下降很有效?在數據集擴展后,神經網絡又能達到什么樣的性能?如,如果 ImageNet 擴大 10 倍,神經網絡的性能會比其他的機器學習技術好多少?這些都是簡單,根本的問題。當前,我們都對它們理解的很少。所以,要說神經網絡在機器學習的未來要扮演什么樣的角色,很難回答。
我會給出一個預測:我相信,深度學習會繼續發展。學習概念的層次特性、構建多層抽象的能力,看起來能夠從根本上解釋世界。這也并不是說未來的深度學習研究者的想法發生變化。我們看到了,在那些使用的神經單元、網絡的架構或者學習算法上,都出現了重大轉變。如果我們不再將最終的系統限制在神經網絡上時,這些轉變將會更加巨大。但人們還是在進行深度學習的研究。
神經網絡和深度學習將會主導人工智能? 本書集中在使用神經網絡來解決具體的任務,如圖像分類。現在更進一步,問:通用思維機器會怎么樣?神經網絡和深度學習能夠幫助我們解決(通用)人工智能(AI)的問題么?如果可以,以目前深度學習領域的發展速度,我們能夠期待通用 AI 在未來的發展么?
認真探討這個問題可能又需要另寫一本書。不過,我們可以給點意見。其想法基于 Conway's law:
任何設計了一個系統的組織…… 最終會不可避免地產生一個設計,其結構本身是這個組織的社會結構
所以,打個比方,Conway 法則告訴我們波音 747 客機的設計會鏡像在設計波音 747 那時的波音及其承包商的組織結構。或者,簡單舉例,假設一個公司開發一款復雜的軟件應用。如果應用的 dashboard 會集成一些機器學習算法,設計 dashboard 的人員最好去找公司的機器學習專家討論一下。Conway 法則就是這種觀察的描述,可能更加宏大。
第一次聽到 Conway 法則,很多人的反應是:“好吧,這不是很顯然么?” 或者 “這是不是不對啊?” 讓我來對第二個觀點進行分析。作為這個反對的例子,我們可以看看波音的例子:波音的審計部門會在哪里展示 747 的設計?他們的清潔部門會怎么樣?內部的食品供應?結果就是組織的這些部門可能不會顯式地出現在 747 所在的任何地方。所以我們應該理解 Conway 法則就是僅僅指那些顯式地設計和工程的組織部門。
而對另一個反對觀點,就是 Conway 法則是很膚淺,顯而易見的?對那些常常違背 Conway 法則運行的組織來說,可能是這樣子,但我認為并非如此。構建新產品的團隊通常會被不合適的員工擠滿或者缺乏具備關鍵能力的人員。想想那些包含無用卻復雜特征的產品,或者那些有明顯重大缺陷的產品——例如,糟糕的用戶界面。這兩種情況的問題通常都是因所需構建好產品的團隊和實際上組成的團隊之間的不匹配產生的。Conway 法則可能是顯而易見的,但是并不是說就可以隨隨便便忽略這個法則。
Conway 法則應用在系統的設計和工程中,我們需要很好地理解可能的系統的組成結構,以及如何來構建這些部件。由于 AI 還不具備這樣的特性:我們不知道組成部分究竟是哪些,所以 Conway 法則不能直接應用在 AI 的開發過程中。因此,我們甚至不能確定哪些是最為根本的問題。換言之,AI 更是一個科學問題而非工程問題。想像我們開始設計 747,并不了解噴氣引擎和空氣動力學的原理。也就難以確定自己團隊需要哪種類型的專家。正如 Werner von Braun 指出的,“基礎研究就是我們并不知道自己正在做的研究究竟是什么”。那么有沒有 Conway 法則在更為科學而非工程的問題上的版本呢?
為了正好地回答這個問題,我們可以看看醫學的歷史。在人類早期,醫學是像 Galen 和 Hippocrates 這樣的實踐者的領域,他們研究整個人體。但是隨著我們知識的增長,人類便被強迫進行專業分工了。我們發現很多深刻(deep)的新觀點:如疾病的微生物理論,或者對抗體工作機制的理解,又或者心臟、肺、血管和動脈的理解,所有這些知識形成了完整的心血管疾病系統。這樣深刻的理解形成了諸如流行病學、免疫學和圍繞在心血管疾病系統交叉關聯的領域的集群。所以我們的知識結構形成了醫學的社會結構。這點在免疫學上顯現的尤其明顯:認識到免疫系統的存在和具備研究的價值是非凡的洞察。這樣,我們就有了醫學的完整領域——包含專家、會議、獎項等等——圍繞在某種不可見的事物周圍,可以說,這并非一個清晰的概念。
深刻(deep)這里并沒有給出關于這個概念的嚴格定義,粗略地指對于整個豐富研究領域來說基礎性的概念和想法。BP 算法和疾病的微生物理論就是關于深刻很好的例子。
這種特點也在不同的科學分支上廣泛存在:不僅僅是醫學,在物理學、數學、化學等等領域都存在這樣的情況。這些領域開始時顯現出一整塊的知識,只有一點點深刻的觀點。早期的專家可以掌握所有的知識。但隨著時間流逝,這種一整塊的特性就發生的演變。我們發現很多深刻的新想法,對任何一個人來說都是太多以至于難以掌握所有的想法。所以,這個領域的社會結構就開始重新組織,圍繞著這些想法分離。我們現在看到的就是領域被不斷地細分,子領域按照一種復雜的、遞歸的、自指的社會結構進行分解,而這些組織關系也反映了最深刻的那些想法之間的聯系。因此,知識結構形成了科學的社會組織關系。但這些社會關系反過來也會限制和幫助決定那些可以發現的事物。這就是 Conway 法則在科學上變體版本。
那么,這又會對深度學習或者 AI 有什么影響呢?
因為在 AI 發展早期,存在對它的爭論,一方認為,“這并不是很難的一件事,我們已經有[超級武器]了。”,反對方認為,“超級武器并不足夠”。深度學習就是最新的超級武器,更早的有邏輯、Prolog或者專家系統,或者當時最牛的技術。這些論點的問題就是他們并以較好的方式沒有告訴你這些給定的候選超級武器如何強大。當然,我們已經花了一章來回顧深度學習可以解決具備相當挑戰性的問題的證據。看起來令人興奮,前景光明。但是那些像 Prolog 或者Eurisko 或者專家系統在它們的年代也同樣如此。所以,那些觀點或者方法看起來很有前景并沒有什么用。我們如何區分出深度學習和早期的方法的本質差異呢?Conway 法則給出了一個粗略和啟發性的度量,也就是評價和這些方法相關的社會關系的復雜性。
所以,這就帶來了兩個需要回答的問題。第一,根據這種社會復雜性度量,方法集和深度學習關聯的強度是怎么樣的?第二,我們需要多么強大的理論來構建一個通用的人工智能?
對第一個問題:我們現在看深度學習,這是一個激情澎湃卻又相對單一的領域。有一些深刻的想法,一些主要的學術會議,其中若干會議之間也存在著很多重疊。然后,一篇篇的論文在不斷地提升和完善同樣的一些基本想法:使用 SGD(或者類似的變體)來優化一個代價函數。這些想法非常成功。但是我們現在還沒有看到子領域的健康發展,每個人在研究自己的深刻想法,將深度學習推向很多的方向。所以,根據社會復雜性度量,忽略文字游戲,深度學習仍然是一個相當粗淺的領域。現在還是可以完全地掌握該領域大多數的深刻想法的。
第二個問題:一個想法集合需要如何復雜和強大才能達到 AI?當然,對這個問題的答案是:無人知曉。但在附錄部分,我討論了一些已有的觀點。我比較樂觀地認為,將會使用很多很多深刻的觀點來構建 AI。所以,Conway 法則告訴我們,為了達到這樣的目標,我們必需看到很多交叉關聯的學科,以一種復雜和可能會很奇特的結構的出現,這種結構也映射出了那些最深刻洞察之間的關系。目前在使用神經網絡和深度學習中,這樣的社會結構還沒有出現。并且,我也堅信離真正使用深度學習來發展通用 AI 還有至少幾十年的距離。
催生這個可能看起來很易見的試探性的并不確定的論斷已經帶給我很多的困擾。毫無疑問,這將會讓那些寄望于獲得確定性的人們變得沮喪。讀了很多網絡上的觀點,我發現很多人在大聲地下結論,對 AI 持有非常樂觀的態度,但很多是缺少確鑿證據和站不住腳的推斷的。我很坦白的觀點是:現在下這樣樂觀的結論還為之過早。正如一個笑話所講,如果你問一個科學家,某個發現還有多久才會出現,他們會說 10 年(或者更多),其實真正的含義就是“我不知道”。AI,像受控核聚變和其他技術一樣,已經發展遠超 10 年已經 60 多年了。另一方面,我們在深度學習中確確實實在做的其實就是還沒有發現極限的強大技術,還有哪些相當開放的根本性問題。這是令人興奮異常的創造新事物的機遇。
文/Not_GOD(簡書作者)
原文鏈接:http://www.jianshu.com/p/10d70c5ceb39
總結
以上是生活随笔為你收集整理的第六章 深度学习(上中)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第六章 深度学习(上)
- 下一篇: 第六章 深度学习(中下)