Deep Learning with Python 讀書筆記6.26 I 什麼是深度學習

我感覺這樣記錄,對於我來說挺好的。因爲我看兩端對齊的語句容易走神,這樣記錄閱讀的話,就很少出現之前的情況。

我寫的初衷,也是自己來看,所以感覺寫的不好的,請保留下意見,謝謝。

代碼縮進情況,字體重複情況,因爲我能看懂,就沒改。

 

 

裏面的每一個字我都看過,加粗 括號  下劃線 等均是我的筆記。

 

 

 

 

前  言
你拿起這本書的時候,可能已經知道深度學習近年來在人工智能領域所取得的非凡進展。
在圖像識別和語音轉錄的任務上,五年前的模型還幾乎無法使用,如今的模型的表現已經超越
了人類。
這種突飛猛進的影響幾乎蔓延到所有行業。但是,想要將深度學習技術部署到它能解決的
所有問題上,就需要讓儘可能多的人接觸這門技術,其中包括非專家,即既不是研究人員也不
是研究生的那些人。想要讓深度學習充分發揮其全部潛能,就需要徹底推廣給大衆。
2015 3 月,我發佈了 Keras 深度學習框架的第一版,當時還沒有想過人工智能的大衆化。
我在機器學習領域已經做了多年的研究,創造 Keras 是爲了幫我自己做實驗。但在 20152016 年,
數萬名新人進入了深度學習領域,其中很多人都選擇了 Keras,因爲它是最容易上手的框架(現
在仍然是)。看到大量新人以意想不到的強大方式使用 Keras,我開始密切關注人工智能的可達
性和大衆化。我意識到,這些技術傳播得越廣,就會變得越有用、越有價值。可達性很快成爲
Keras 開發過程中的一個明確目標,在短短几年內,Keras 開發者社區已經在這方面取得了了不
起的成就。我們讓數萬人掌握了深度學習,他們反過來用這些技術來解決那些重要的問題,而
我們是最近才知道這些問題的。
你手裏拿的這本書,也是爲了讓儘可能多的人能夠使用深度學習而寫的。Keras 一直需要一
個配套教程,同時涵蓋深度學習的基礎知識、Keras 使用模式以及深度學習的最佳實踐。本書是
我盡最大努力製作的這麼一本教程。本書的重點是用盡可能容易理解的方式來介紹深度學習背
後的概念及其實現。我這麼做沒有貶低任何事情的意思,我堅信深度學習中沒有難以理解的東西。
希望本書對你有價值,能夠幫助構建智能應用程序並解決那些對你很重要的問題。
 
在過去的幾年裏,人工智能(AI)一直是媒體大肆炒作的熱點話題。機器學習、深度學習
和人工智能都出現在不計其數的文章中,而這些文章通常都發表於非技術出版物。我們的未來
被描繪成擁有智能聊天機器人、自動駕駛汽車和虛擬助手,這一未來有時被渲染成可怕的景象,
有時則被描繪爲烏托邦,人類的工作將十分稀少,大部分經濟活動都由機器人或人工智能體
AI agent)來完成。對於未來或當前的機器學習從業者來說,重要的是能夠從噪聲中識別出信號,
從而在過度炒作的新聞稿中發現改變世界的重大進展。我們的未來充滿風險,而你可以在其中
發揮積極的作用:讀完本書後,你將會成爲人工智能體的開發者之一。那麼我們首先來回答下
列問題:到目前爲止,深度學習已經取得了哪些進展?深度學習有多重要?接下來我們要做什
麼?媒體炒作是否可信?
本章將介紹關於人工智能、機器學習以及深度學習的必要背景。
1.1 人工智能、機器學習與深度學習
首先,在提到人工智能時,我們需要明確定義所討論的內容。什麼是人工智能、機器學習
與深度學習(見圖 1-1)?這三者之間有什麼關係?
 
1.1.1 人工智能
人工智能誕生於 20 世紀 50 年代,當時計算機科學這一新興領域的少數先驅開始提出疑問:
計算機是否能夠“思考”?我們今天仍在探索這一問題的答案。人工智能的簡潔定義如下:努
力將通常由人類完成的智力任務自動化。因此,人工智能是一個綜合性的領域,不僅包括機器
學習與深度學習,還包括更多不涉及學習的方法。例如,早期的國際象棋程序僅包含程序員精
心編寫的硬編碼規則,並不屬於機器學習。在相當長的時間內,許多專家相信,只要程序員精
心編寫足夠多的明確規則來處理知識,就可以實現與人類水平相當的人工智能。這一方法被稱
爲符號主義人工智能(symbolic AI),從 20 世紀 50 年代到 80 年代末是人工智能的主流範式。
20 世紀 80 年代的專家系統expert system)熱潮中,這一方法的熱度達到了頂峯。
雖然符號主義人工智能適合用來解決定義明確的邏輯問題,比如下國際象棋,但它難以給
出明確的規則來解決更加複雜、模糊的問題,比如圖像分類、語音識別和語言翻譯。於是出現
了一種新的方法來替代符號主義人工智能,這就是機器學習(machine learning)。
1.1.2 機器學習
在維多利亞時代的英格蘭,埃達 洛夫萊斯伯爵夫人是查爾斯 巴貝奇的好友兼合作者,後
者發明了分析機Analytical Engine),即第一臺通用的機械式計算機。雖然分析機這一想法富
有遠見,並且相當超前,但它在 19 世紀三四十年代被設計出來時並沒有打算用作通用計算機,
因爲當時還沒有“通用計算”這一概念。它的用途僅僅是利用機械操作將數學分析領域的某些
計算自動化,因此得名“分析機”。1843 年,埃達 洛夫萊斯伯爵夫人對這項發明評論道:“分
析機談不上能創造什麼東西。它只能完成我們命令它做的任何事情……它的職責是幫助我們去
實現我們已知的事情。”
隨後,人工智能先驅阿蘭 圖靈在其 1950 年發表的具有里程碑意義的論文“計算機器和智
能”a 中,引用了上述評論並將其稱爲“洛夫萊斯伯爵夫人的異議”。圖靈在這篇論文中介紹了
靈測試以及日後人工智能所包含的重要概念。在引述埃達 洛夫萊斯伯爵夫人的同時,圖靈還
思考了這樣一個問題:通用計算機是否能夠學習與創新?他得出的結論是“能”。
機器學習的概念就來自於圖靈的這個問題:對於計算機而言,除了“我們命令它做的任何
事情”之外,它能否自我學習執行特定任務的方法?計算機能否讓我們大喫一驚?如果沒有程
序員精心編寫的數據處理規則,計算機能否通過觀察數據自動學會這些規則?
圖靈的這個問題引出了一種新的編程範式。在經典的程序設計(即符號主義人工智能的範
式)中,人們輸入的是規則(即程序)和需要根據這些規則進行處理的數據,系統輸出的是答案
(見圖 1-2)。利用機器學習,人們輸入的是數據和從這些數據中預期得到的答案,系統輸出的是
規則。這些規則隨後可應用於新的數據,並使計算機自主生成答案。
機器學習系統是訓練出來的,而不是明確地用程序編寫出來的。將與某個任務相關的許多
示例輸入機器學習系統,它會在這些示例中找到統計結構,從而最終找到規則將任務自動化。
舉個例子,你想爲度假照片添加標籤,並且希望將這項任務自動化,那麼你可以將許多人工打
好標籤的照片輸入機器學習系統,系統將學會將照片與特定標籤聯繫在一起的統計規則。
雖然機器學習在 20 世紀 90 年代纔開始蓬勃發展,但它迅速成爲人工智能最受歡迎且最成
功的分支領域。這一發展的驅動力來自於速度更快的硬件與更大的數據集。機器學習與數理統
計密切相關,但二者在幾個重要方面有所不同。不同於統計學,機器學習經常用於處理複雜的
大型數據集(比如包含數百萬張圖像的數據集,每張圖像又包含數萬個像素),用經典的統計分
析(比如貝葉斯分析)來處理這種數據集是不切實際的。因此,機器學習(尤其是深度學習)
呈現出相對較少的數學理論(可能太少了),並且是以工程爲導向的。這是一門需要上手實踐的
學科,想法更多地是靠實踐來證明,而不是靠理論推導。
1.1.3 從數據中學習表示
爲了給出深度學習的定義並搞清楚深度學習與其他機器學習方法的區別,我們首先需要知
道機器學習算法在什麼。前面說過,給定包含預期結果的示例,機器學習將會發現執行一項
數據處理任務的規則。因此,我們需要以下三個要素來進行機器學習。
輸入數據點例如,你的任務是語音識別,那麼這些數據點可能是記錄人們說話的聲音
文件。如果你的任務是爲圖像添加標籤,那麼這些數據點可能是圖像。
預期輸出的示例。對於語音識別任務來說,這些示例可能是人們根據聲音文件整理生成
的文本。對於圖像標記任務來說,預期輸出可能是“狗”“貓”之類的標籤。
衡量算法效果好壞的方法。這一衡量方法是爲了計算算法的當前輸出與預期輸出的差距。
衡量結果是一種反饋信號,用於調節算法的工作方式。這個調節步驟就是我們所說的學習
機器學習模型將輸入數據變換爲有意義的輸出,這是一個從已知的輸入和輸出示例中進行
“學習”的過程。因此,機器學習和深度學習的核心問題在於有意義地變換數據,換句話說,在
於學習輸入數據的有用表示representation)——這種表示可以讓數據更接近預期輸出。在進一
步討論之前,我們需要先回答一個問題:什麼是表示?這一概念的核心在於以一種不同的方式
來查看數據(即表徵數據或將數據編碼)。例如,彩色圖像可以編碼爲 RGB(紅 - - 藍)格
式或 HSV(色相 - 飽和度 - 明度)格式,這是對相同數據的兩種不同表示。在處理某些任務時,
使用某種表示可能會很困難,但換用另一種表示就會變得很簡單。舉個例子,對於“選擇圖像
中所有紅色像素”這個任務,使用 RGB 格式會更簡單,而對於“降
低圖像飽和度”這個任務,使用 HSV 格式則更簡單。機器學習模型
都是爲輸入數據尋找合適的表示——對數據進行變換,使其更適合
手頭的任務(比如分類任務)。
我們來具體說明這一點。考慮 x 軸、y 軸和在這個 (x, y) 座標系
中由座標表示的一些點,如圖 1-3 所示。
可以看到,圖中有一些白點和一些黑點。假設我們想要開發一
個算法,輸入一個點的座標 (x, y),就能夠判斷這個點是黑色還是白
色。在這個例子中:
輸入是點的座標;
預期輸出是點的顏色;
衡量算法效果好壞的一種方法是,正確分類的點所佔的百分比。
這裏我們需要的是一種新的數據表示,可以明確區分白點與黑點。可用的方法有很多,這
裏用的是座標變換,如圖 1-4 所示
 
 
在這個新的座標系中,點的座標可以看作數據的一種新的表示。這種表示很棒!利用這種
新的表示,用一條簡單的規則就可以描述黑 / 白分類問題:“x>0 的是黑點”或“x<0 的是白點”。
這種新的表示基本上解決了該分類問題。
在這個例子中,我們人爲定義了座標變換。但是,如果我們嘗試系統性地搜索各種可能的
座標變換,並用正確分類的點所佔百分比作爲反饋信號,那麼我們做的就是機器學習。機器學
習中的學習指的是,尋找更好數據表示的自動搜索過程。
所有機器學習算法都包括自動尋找這樣一種變換:這種變換可以根據任務將數據轉化爲更加
有用的表示。這些操作可能是前面提到的座標變換,也可能是線性投影(可能會破壞信息)、平移、
非線性操作(比如“選擇所有 x>0 的點”),等等。機器學習算法在尋找這些變換時通常沒有什麼
創造性,而僅僅是遍歷一組預先定義好的操作,這組操作叫作假設空間hypothesis space)。
這就是機器學習的技術定義:在預先定義好的可能性空間中,利用反饋信號的指引來尋找
輸入數據的有用表示。這個簡單的想法可以解決相當多的智能任務,從語音識別到自動駕駛都
能解決。
現在你理解了學習的含義,下面我們來看一下深度學習的特殊之處。
1.1.4 深度學習之“深度”
深度學習是機器學習的一個分支領域:它是從數據中學習表示的一種新方法,強調從連續
的層(layer)中進行學習,這些層對應于越來越有意義的表示。“深度學習”中的“深度”指
的並不是利用這種方法所獲取的更深層次的理解,而是指一系列連續的表示層。數據模型中
包含多少層,這被稱爲模型的深度depth)。這一領域的其他名稱包括分層表示學習layered
representations learning)和層級表示學習hierarchical representations learning)。現代深度學習
通常包含數十個甚至上百個連續的表示層,這些表示層全都是從訓練數據中自動學習的。與此
相反,其他機器學習方法的重點往往是僅僅學習一兩層的數據表示,因此有時也被稱爲淺層學
shallow learning)。
在深度學習中,這些分層表示幾乎總是通過叫作神經網絡neural network)的模型來學習
得到的。神經網絡的結構是逐層堆疊。神經網絡這一術語來自於神經生物學,然而,雖然深度
學習的一些核心概念是從人們對大腦的理解中汲取部分靈感而形成的,但深度學習模型不是
腦模型。沒有證據表明大腦的學習機制與現代深度學習模型所使用的相同。你可能會讀到一些
流行科學的文章,宣稱深度學習的工作原理與大腦相似或者是根據大腦的工作原理進行建模的,
但事實並非如此。對於這一領域的新人來說,如果認爲深度學習與神經生物學存在任何關係,
那將使人困惑,只會起到反作用。你無須那種“就像我們的頭腦一樣”的神祕包裝,最好也忘
掉讀過的深度學習與生物學之間的假想聯繫。就我們的目的而言,深度學習是從數據中學習表
示的一種數學框架。
深度學習算法學到的表示是什麼樣的?我們來看一個多層網絡(見圖 1-5)如何對數字圖像
進行變換,以便識別圖像中所包含的數字。
如圖 1-6 所示,這個網絡將數字圖像轉換成與原始圖像差別越來越大的表示,而其中關於
最終結果的信息卻越來越豐富。你可以將深度網絡看作多級信息蒸餾操作:信息穿過連續的過
濾器,其純度越來越高(即對任務的幫助越來越大)。
這就是深度學習的技術定義學習數據表示的多級方法。這個想法很簡單,但事實證明,
非常簡單的機制如果具有足夠大的規模,將會產生魔法般的效果。
1.1.5 用三張圖理解深度學習的工作原理
現在你已經知道,機器學習是將輸入(比如圖像)映射到目標(比如標籤“貓”),這一過
程是通過觀察許多輸入和目標的示例來完成的。你還知道,深度神經網絡通過一系列簡單的數
據變換(層)來實現這種輸入到目標的映射,而這些數據變換都是通過觀察示例學習到的。下
面來具體看一下這種學習過程是如何發生的。
神經網絡中每層對輸入數據所做的具體操作保存在該層的權重weight)中,其本質是一
串數字。用術語來說,每層實現的變換由其權重來參數化parameterize,見圖 1-7)。權重有時
也被稱爲該層的參數parameter)。在這種語境下,學習的意思是爲神經網絡的所有層找到一組
權重值,使得該網絡能夠將每個示例輸入與其目標正確地一一對應。但重點來了:一個深度神
經網絡可能包含數千萬個參數。找到所有參數的正確取值可能是一項非常艱鉅的任務,特別是
考慮到修改某個參數值將會影響其他所有參數的行爲。
想要控制一件事物,首先需要能夠觀察它。想要控制神經網絡的輸出,就需要能夠衡量該
輸出與預期值之間的距離。這是神經網絡損失函數loss function)的任務,該函數也叫目標
函數objective function。損失函數的輸入是網絡預測值與真實目標值(即你希望網絡輸出的
結果),然後計算一個距離值,衡量該網絡在這個示例上的效果好壞(見圖 1-8)。
 
深度學習的基本技巧是利用這個距離值作爲反饋信號來對權重值進行微調,以降低當前示
例對應的損失值(見圖 1-9。這種調節由優化器optimizer)來完成,它實現了所謂的反向
傳播backpropagation)算法,這是深度學習的核心算法。下一章中會詳細地解釋反向傳播的工
作原理。
一開始對神經網絡的權重隨機賦值,因此網絡只是實現了一系列隨機變換。其輸出結果自
然也和理想值相去甚遠,相應地,損失值也很高。但隨着網絡處理的示例越來越多,權重值也
在向正確的方向逐步微調,損失值也逐漸降低。這就是訓練循環training loop),將這種循環重
復足夠多的次數(通常對數千個示例進行數十次迭代),得到的權重值可以使損失函數最小。具
有最小損失的網絡,其輸出值與目標值儘可能地接近,這就是訓練好的網絡。再次強調,這是
一個簡單的機制,一旦具有足夠大的規模,將會產生魔法般的效果。
1.1.6 深度學習已經取得的進展
雖然深度學習是機器學習一個相當有年頭的分支領域,但在 21 世紀前十年才崛起。在隨後
的幾年裏,它在實踐中取得了革命性進展,在視覺和聽覺等感知問題上取得了令人矚目的成果,
而這些問題所涉及的技術,在人類看來是非常自然、非常直觀的,但長期以來卻一直是機器難
以解決的。
特別要強調的是,深度學習已經取得了以下突破,它們都是機器學習歷史上非常困難的領域:
接近人類水平的圖像分類
接近人類水平的語音識別
接近人類水平的手寫文字轉錄
更好的機器翻譯
更好的文本到語音轉換
數字助理,比如谷歌即時(Google Now)和亞馬遜 Alexa
接近人類水平的自動駕駛
更好的廣告定向投放,Google、百度、必應都在使用
更好的網絡搜索結果
能夠回答用自然語言提出的問題
在圍棋上戰勝人類
我們仍然在探索深度學習能力的邊界。我們已經開始將其應用於機器感知和自然語言理解
之外的各種問題,比如形式推理。如果能夠成功的話,這可能預示着深度學習將能夠協助人類
進行科學研究、軟件開發等活動。
1.1.7 不要相信短期炒作
雖然深度學習近年來取得了令人矚目的成就,但人們對這一領域在未來十年間能夠取得的
成就似乎期望過高。雖然一些改變世界的應用(比如自動駕駛汽車)已經觸手可及,但更多的
應用可能在長時間內仍然難以實現,比如可信的對話系統、達到人類水平的跨任意語言的機器
翻譯、達到人類水平的自然語言理解。我們尤其不應該把達到人類水平的通用智能human-level
general intelligence)的討論太當回事。在短期內期望過高的風險是,一旦技術上沒有實現,那
麼研究投資將會停止,而這會導致在很長一段時間內進展緩慢。
這種事曾經發生過。人們曾對人工智能極度樂觀,隨後是失望與懷疑,進而導致資金匱乏。
這種循環發生過兩次,最早始於 20 世紀 60 年代的符號主義人工智能。在早期的那些年裏,人
們激動地預測着人工智能的未來。馬文 閔斯基是符號主義人工智能方法最有名的先驅和支持
者之一,他在 1967 年宣稱:“在一代人的時間內……將基本解決創造‘人工智能’的問題。”三
年後的 1970 年,他做出了更爲精確的定量預測:“在三到八年的時間裏,我們將擁有一臺具有
人類平均智能的機器。”在 2016 年,這一目標看起來仍然十分遙遠,遙遠到我們無法預測需要
多長時間才能實現。但在 20 世紀 60 年代和 70 年代初,一些專家卻相信這一目標近在咫尺(正
如今天許多人所認爲的那樣)。幾年之後,由於這些過高的期望未能實現,研究人員和政府資金
均轉向其他領域,這標誌着第一次人工智能冬天AI winter)的開始(這一說法來自“核冬天”,
因爲當時是冷戰高峯之後不久)。
這並不是人工智能的最後一個冬天。20 世紀 80 年代,一種新的符號主義人工智能——
家系統expert system)——開始在大公司中受到追捧。最初的幾個成功案例引發了一輪投資熱
潮,進而全球企業都開始設立人工智能部門來開發專家系統。1985 年前後,各家公司每年在這
項技術上的花費超過 10 億美元。但到了 20 世紀 90 年代初,這些系統的維護費用變得很高,難
以擴展,並且應用範圍有限,人們逐漸對其失去興趣。於是開始了第二次人工智能冬天。
我們可能正在見證人工智能炒作與讓人失望的第三次循環,而且我們仍處於極度樂觀的階
段。最好的做法是降低我們的短期期望,確保對這一技術領域不太瞭解的人能夠清楚地知道深
度學習能做什麼、不能做什麼。
1.1.8 人工智能的未來
雖然我們對人工智能的短期期望可能不切實際,但長遠來看前景是光明的。我們纔剛剛開
始將深度學習應用於許多重要的問題,從醫療診斷到數字助手,在這些問題上深度學習都發揮
了變革性作用。過去五年裏,人工智能研究一直在以驚人的速度發展,這在很大程度上是由於
人工智能短短的歷史中前所未見的資金投入,但到目前爲止,這些進展卻很少能夠轉化爲改變
世界的產品和流程。深度學習的大多數研究成果尚未得到應用,至少尚未應用到它在各行各業
中能夠解決的所有問題上。你的醫生和會計師都還沒有使用人工智能。你在日常生活中可能也
不會用到人工智能。當然,你可以向智能手機提出簡單的問題並得到合理的回答,也可以在亞
馬遜網站上得到相當有用的產品推薦,還可以在谷歌相冊(Google Photos)網站搜索“生日”
並立刻找到上個月你女兒生日聚會的照片。與過去相比,這些技術已大不相同,但這些工具仍
然只是日常生活的陪襯。人工智能仍需進一步轉變爲我們工作、思考和生活的核心。
眼下,我們似乎很難相信人工智能會對世界產生巨大影響,因爲它還沒有被廣泛地部署應
用——正如 1995 年,我們也難以相信互聯網在未來會產生的影響。當時,大多數人都沒有認識
到互聯網與他們的關係,以及互聯網將如何改變他們的生活。今天的深度學習和人工智能也是
如此。但不要懷疑:人工智能即將到來。在不遠的未來,人工智能將會成爲你的助手,甚至成
爲你的朋友。它會回答你的問題,幫助你教育孩子,並關注你的健康。它還會將生活用品送到
你家門口,並開車將你從 A 地送到 B 地。它還會是你與日益複雜的、信息密集的世界之間的接口。
更爲重要的是,人工智能將會幫助科學家在所有科學領域(從基因學到數學)取得突破性進展,
從而幫助人類整體向前發展。
在這個過程中,我們可能會經歷一些挫折,也可能會遇到新的人工智能冬天,正如互聯網
行業那樣,在 19981999 年被過度炒作,進而在 21 世紀初遭遇破產,並導致投資停止。但我
們最終會實現上述目標。人工智能最終將應用到我們社會和日常生活的幾乎所有方面,正如今
天的互聯網一樣。
不要相信短期的炒作,但一定要相信長期的願景。人工智能可能需要一段時間才能充分發
揮其潛力。這一潛力的範圍大到難以想象,但人工智能終將到來,它將以一種奇妙的方式改變
我們的世界。
1.2 深度學習之前:機器學習簡史
深度學習已經得到了人工智能歷史上前所未有的公衆關注度和產業投資,但這並不是機器
學習的第一次成功。可以這樣說,當前工業界所使用的絕大部分機器學習算法都不是深度學習
算法。深度學習不一定總是解決問題的正確工具:有時沒有足夠的數據,深度學習不適用;有
時用其他算法可以更好地解決問題。如果你第一次接觸的機器學習就是深度學習,那你可能會
發現手中握着一把深度學習“錘子”,而所有機器學習問題看起來都像是“釘子”。爲了避免陷
入這個誤區,唯一的方法就是熟悉其他機器學習方法並在適當的時候進行實踐。
關於經典機器學習方法的詳細討論已經超出了本書範圍,但我們將簡要回顧這些方法,並
介紹這些方法的歷史背景。這樣我們可以將深度學習放入機器學習的大背景中,並更好地理解
深度學習的起源以及它爲什麼如此重要。
1.2.1 概率建模
概率建模probabilistic modeling)是統計學原理在數據分析中的應用。它是最早的機器學
習形式之一,至今仍在廣泛使用。其中最有名的算法之一就是樸素貝葉斯算法。
樸素貝葉斯是一類基於應用貝葉斯定理的機器學習分類器,它假設輸入數據的特徵都是獨
立的。這是一個很強的假設,或者說“樸素的”假設,其名稱正來源於此。這種數據分析方法
比計算機出現得還要早,在其第一次被計算機實現(很可能追溯到 20 世紀 50 年代)的幾十年
前就已經靠人工計算來應用了。貝葉斯定理和統計學基礎可以追溯到 18 世紀,你學會了這兩點
就可以開始使用樸素貝葉斯分類器了。
另一個密切相關的模型是 logistic 迴歸logistic regression,簡稱 logreg),它有時被認爲是
現代機器學習的“hello world”。不要被它的名稱所誤導——logreg 是一種分類算法,而不是回
歸算法。與樸素貝葉斯類似,logreg 的出現也比計算機早很長時間,但由於它既簡單又通用,
至今仍然很有用。面對一個數據集,數據科學家通常會首先嚐試使用這個算法,以便初步熟悉
手頭的分類任務。
1.2.2 早期神經網絡
神經網絡早期的迭代方法已經完全被本章所介紹的現代方法所取代,但仍有助於我們瞭解
深度學習的起源。雖然人們早在 20 世紀 50 年代就將神經網絡作爲玩具項目,並對其核心思想
進行研究,但這一方法在數十年後才被人們所使用。在很長一段時間內,一直沒有訓練大型神
經網絡的有效方法。這一點在 20 世紀 80 年代中期發生了變化,當時很多人都獨立地重新發現
了反向傳播算法——一種利用梯度下降優化來訓練一系列參數化運算鏈的方法(本書後面將給
出這些概念的具體定義),並開始將其應用於神經網絡。
貝爾實驗室於 1989 年第一次成功實現了神經網絡的實踐應用,當時 Yann LeCun 將卷積
神經網絡的早期思想與反向傳播算法相結合,並將其應用於手寫數字分類問題,由此得到名爲
LeNet 的網絡,在 20 世紀 90 年代被美國郵政署採用,用於自動讀取信封上的郵政編碼。
1.2.3 核方法
上節所述神經網絡取得了第一次成功,並在 20 世紀 90 年代開始在研究人員中受到一定的
重視,但一種新的機器學習方法在這時聲名鵲起,很快就使人們將神經網絡拋諸腦後。這種方
法就是核方法kernel method)。核方法是一組分類算法,其中最有名的就是支持向量機SVM
support vector machine)。雖然 Vladimir Vapnik Alexey Chervonenkis 早在 1963 年就發表了較
早版本的線性公式 a,但 SVM 的現代公式由 Vladimir Vapnik Corinna Cortes 20 世紀 90 年代
初在貝爾實驗室提出,並發表於 1995 b
SVM 的目標是通過在屬於兩個不同類別的兩組數據點之間找到良好決策邊界decision
boundary,見圖 1-10)來解決分類問題。決策邊界可以看作一條直線或一個平面,將訓練數據
劃分爲兩塊空間,分別對應於兩個類別。對於新數據點的分類,你只需判斷它位於決策邊界的
哪一側。
SVM 通過兩步來尋找決策邊界。
(1) 將數據映射到一個新的高維表示,這時決策邊界可以用一個超平面來表示(如果數據像
1-10 那樣是二維的,那麼超平面就是一條直線)。
(2) 儘量讓超平面與每個類別最近的數據點之間的距離最大化,從而計算出良好決策邊界(分
割超平面),這一步叫作間隔最大化maximizing the margin)。這樣決策邊界可以很好
地推廣到訓練數據集之外的新樣本。
將數據映射到高維表示從而使分類問題簡化,這一技巧可能聽起來很不錯,但在實踐中通
常是難以計算的。這時就需要用到核技巧kernel trick,核方法正是因這一核心思想而得名)。
其基本思想是:要想在新的表示空間中找到良好的決策超平面,你不需要在新空間中直接計算
點的座標,只需要在新空間中計算點對之間的距離,而利用核函數(kernel function)可以高效
地完成這種計算。核函數是一個在計算上能夠實現的操作,將原始空間中的任意兩點映射爲這
兩點在目標表示空間中的距離,完全避免了對新表示進行直接計算。核函數通常是人爲選擇的,
而不是從數據中學到的——對於 SVM 來說,只有分割超平面是通過學習得到的。
SVM 剛剛出現時,在簡單的分類問題上表現出了最好的性能。當時只有少數機器學習方法
得到大量的理論支持,並且適合用於嚴肅的數學分析,因而非常易於理解和解釋,SVM 就是其
中之一。由於 SVM 具有這些有用的性質,很長一段時間裏它在實踐中非常流行。
但是,SVM 很難擴展到大型數據集,並且在圖像分類等感知問題上的效果也不好。SVM
是一種比較淺層的方法,因此要想將其應用於感知問題,首先需要手動提取出有用的表示(這
叫作特徵工程),這一步驟很難,而且不穩定。
1.2.4 決策樹、隨機森林與梯度提升機
決策樹decision tree)是類似於流程圖的結構,可以對輸入數據點進行分類或根據給定輸
入來預測輸出值(見圖 1-11)。決策樹的可視化和解釋都很簡單。在 21 世紀前十年,從數據中
學習得到的決策樹開始引起研究人員的廣泛關注。到了 2010 年,決策樹經常比核方法更受歡迎。
特別是隨機森林random forest)算法,它引入了一種健壯且實用的決策樹學習方法,即
首先構建許多決策樹,然後將它們的輸出集成在一起。隨機森林適用於各種各樣的問題——
對於任何淺層的機器學習任務來說,它幾乎總是第二好的算法。廣受歡迎的機器學習競賽網站
Kaggle 2010 年上線後,隨機森林迅速成爲平臺上人們的最愛,直到 2014 年才被梯度提升機
所取代。與隨機森林類似,梯度提升機gradient boosting machine)也是將弱預測模型(通常
是決策樹)集成的機器學習技術。它使用了梯度提升方法,通過迭代地訓練新模型來專門解決
之前模型的弱點,從而改進任何機器學習模型的效果。將梯度提升技術應用於決策樹時,得到
的模型與隨機森林具有相似的性質,但在絕大多數情況下效果都比隨機森林要好。它可能是目
前處理非感知數據最好的算法之一(如果非要加個“之一”的話)。和深度學習一樣,它也是
Kaggle 競賽中最常用的技術之一。
1.2.5 回到神經網絡
雖然神經網絡幾乎被整個科學界完全忽略,但仍有一些人在繼續研究神經網絡,並在 2010
年左右開始取得重大突破。這些人包括:多倫多大學 Geoffrey Hinton 的小組、蒙特利爾大學的
Yoshua Bengio、紐約大學的 Yann LeCun 和瑞士的 IDSIA
2011 年,來自 IDSIA Dan Ciresan 開始利用 GPU 訓練的深度神經網絡贏得學術性的圖像
分類競賽,這是現代深度學習第一次在實踐中獲得成功。但真正的轉折性時刻出現在 2012 年,
當年 Hinton 小組參加了每年一次的大規模圖像分類挑戰賽 ImageNetImageNet 挑戰賽在當時
以困難著稱,參賽者需要對 140 萬張高分辨率彩色圖像進行訓練,然後將其劃分到 1000 個不同
的類別中。2011 年,獲勝的模型基於經典的計算機視覺方法,其 top-5 精度 a 只有 74.3%。到了
2012 年,由 Alex Krizhevsky 帶領並由 Geoffrey Hinton 提供建議的小組,實現了 83.6% top-5
精度——這是一項重大突破。此後,這項競賽每年都由深度卷積神經網絡所主導。到了 2015 年,
獲勝者的精度達到了 96.4%,此時 ImageNet 的分類任務被認爲是一個已經完全解決的問題。
2012 年以來,深度卷積神經網絡(convnet)已成爲所有計算機視覺任務的首選算法。更
一般地說,它在所有感知任務上都有效。在 2015 年和 2016 年的主要計算機視覺會議上,幾乎
所有演講都與 convnet 有關。與此同時,深度學習也在許多其他類型的問題上得到應用,比如自
然語言處理。它已經在大量應用中完全取代了 SVM 與決策樹。舉個例子,歐洲核子研究中心
CERN)多年來一直使用基於決策樹的方法來分析來自大型強子對撞機(LHCATLAS 探測器
的粒子數據,但 CERN 最終轉向基於 Keras 的深度神經網絡,因爲它的性能更好,而且在大型
數據集上易於訓練。
1.2.6 深度學習有何不同
深度學習發展得如此迅速,主要原因在於它在很多問題上都表現出更好的性能。但這並不
是唯一的原因。深度學習還讓解決問題變得更加簡單,因爲它將特徵工程完全自動化,而這曾
經是機器學習工作流程中最關鍵的一步。
先前的機器學習技術(淺層學習)僅包含將輸入數據變換到一兩個連續的表示空間,通常
使用簡單的變換,比如高維非線性投影(SVM)或決策樹。但這些技術通常無法得到複雜問題
所需要的精確表示。因此,人們必須竭盡全力讓初始輸入數據更適合用這些方法處理,也必須
手動爲數據設計好的表示層。這叫作特徵工程。與此相反,深度學習完全將這個步驟自動化:
利用深度學習,你可以一次性學習所有特徵,而無須自己手動設計。這極大地簡化了機器學習
工作流程,通常將複雜的多階段流程替換爲一個簡單的、端到端的深度學習模型。
你可能會問,如果問題的關鍵在於有多個連續表示層,那麼能否重複應用淺層方法,以實
現和深度學習類似的效果?在實踐中,如果連續應用淺層學習方法,其收益會隨着層數增加迅
速降低,因爲三層模型中最優的第一表示層並不是單層或雙層模型中最優的第一表示層。深度
學習的變革性在於,模型可以在同一時間共同學習所有表示層,而不是依次連續學習(這被稱
貪婪學習)。通過共同的特徵學習,一旦模型修改某個內部特徵,所有依賴於該特徵的其他特
徵都會相應地自動調節適應,無須人爲干預。一切都由單一反饋信號來監督:模型中的每一處
變化都是爲了最終目標服務。這種方法比貪婪地疊加淺層模型更加強大,因爲它可以通過將複雜、
抽象的表示拆解爲很多箇中間空間(層)來學習這些表示,每個中間空間僅僅是前一個空間的
簡單變換。
深度學習從數據中進行學習時有兩個基本特徵:第一,通過漸進的、逐層的方式形成越來
越複雜的表示;第二,對中間這些漸進的表示共同進行學習,每一層的變化都需要同時考慮上
下兩層的需要。總之,這兩個特徵使得深度學習比先前的機器學習方法更加成功。
1.2.7 機器學習現狀
要想了解機器學習算法和工具的現狀,一個好方法是看一下 Kaggle 上的機器學習競賽。
Kaggle 上的競爭非常激烈(有些比賽有數千名參賽者,並提供數百萬美元的獎金),而且涵蓋
了各種類型的機器學習問題,所以它提供了一種現實方法來評判哪種方法有效、哪種方法無效。
那麼哪種算法能夠可靠地贏得競賽呢?頂級參賽者都使用哪些工具?
2016 年和 2017 年,Kaggle 上主要有兩大方法:梯度提升機和深度學習。具體而言,梯
度提升機用於處理結構化數據的問題,而深度學習則用於圖像分類等感知問題。使用前一種方
法的人幾乎都使用優秀的 XGBoost 庫,它同時支持數據科學最流行的兩種語言:Python R
使用深度學習的 Kaggle 參賽者則大多使用 Keras 庫,因爲它易於使用,非常靈活,並且支持
Python
要想在如今的應用機器學習中取得成功,你應該熟悉這兩種技術:梯度提升機,用於淺層
學習問題;深度學習,用於感知問題。用術語來說,你需要熟悉 XGBoost Keras,它們是目
前主宰 Kaggle 競賽的兩個庫。有了本書,你已經向這個目標邁出了一大步。
1.3 爲什麼是深度學習,爲什麼是現在
深度學習用於計算機視覺的兩個關鍵思想,即卷積神經網絡和反向傳播,在 1989 年就已經
爲人們所知。長短期記憶(LSTMlong short-term memory)算法是深度學習處理時間序列的
基礎,它在 1997 年就被開發出來了,而且此後幾乎沒有發生變化。那麼爲什麼深度學習在
2012 年之後纔開始取得成功?這二十年間發生了什麼變化?
總的來說,三種技術力量在推動着機器學習的進步:
硬件
數據集和基準
算法上的改進
由於這一領域是靠實驗結果而不是理論指導的,所以只有當合適的數據和硬件可用於嘗試
新想法時(或者將舊想法的規模擴大,事實往往也是如此),纔可能出現算法上的改進。機器學
習不是數學或物理學,靠一支筆和一張紙就能實現重大進展。它是一門工程科學。
20 世紀 90 年代和 21 世紀前十年,真正的瓶頸在於數據和硬件。但在這段時間內發生了
下面這些事情:互聯網高速發展,並且針對遊戲市場的需求開發出了高性能圖形芯片。
1.3.1 硬件
1990 年到 2010 年,非定製 CPU 的速度提高了約 5000 倍。因此,現在可以在筆記本電
腦上運行小型深度學習模型,但在 25 年前是無法實現的。
但是,對於計算機視覺或語音識別所使用的典型深度學習模型,所需要的計算能力要比筆
記本電腦的計算能力高几個數量級。在 20 世紀前十年裏,NVIDIA AMD 等公司投資數十億
美元來開發快速的大規模並行芯片(圖形處理器,GPU),以便爲越來越逼真的視頻遊戲提供圖
形顯示支持。這些芯片是廉價的、單一用途的超級計算機,用於在屏幕上實時渲染複雜的3D場景。
這些投資爲科學界帶來了好處。2007 年,NVIDIA 推出了 CUDA,作爲其 GPU 系列的編程接口。
少量 GPU 開始在各種高度並行化的應用中替代大量 CPU 集羣,並且最早應用於物理建模。深
度神經網絡主要由許多小矩陣乘法組成,它也是高度並行化的。2011 年前後,一些研究人員開
始編寫神經網絡的 CUDA 實現,而 Dan Ciresana Alex Krizhevskyb 屬於第一批人。
這樣,遊戲市場資助了用於下一代人工智能應用的超級計算。有時候,大事件都是從遊戲
開始的。今天,NVIDIA TITAN X(一款遊戲 GPU,在 2015 年底售價 1000 美元)可以實現單
精度 6.6 TFLOPS 的峯值,即每秒進行 6.6 萬億次 float32 運算。這比一臺現代筆記本電腦的
速度要快約 350 倍。使用一塊 TITAN X 顯卡,只需幾天就可以訓練出幾年前贏得 ILSVRC 競賽
ImageNet 模型。與此同時,大公司還在包含數百個 GPU 的集羣上訓練深度學習模型,這種
類型的 GPU 是專門針對深度學習的需求開發的,比如 NVIDIA Tesla K80。如果沒有現代 GPU
這種集羣的超級計算能力是不可能實現的。
此外,深度學習行業已經開始超越 GPU,開始投資於日益專業化的高效芯片來進行深度學
習。2016 年,Google 在其年度 I/O 大會上展示了張量處理器(TPU)項目,它是一種新的芯片
設計,其開發目的完全是爲了運行深度神經網絡。據報道,它的速度比最好的 GPU 還要快 10 倍,
而且能效更高。
1.3.2 數據
人工智能有時被稱爲新的工業革命。如果深度學習是這場革命的蒸汽機,那麼數據就是煤炭,
即驅動智能機器的原材料,沒有煤炭一切皆不可能。就數據而言,除了過去 20 年裏存儲硬件的
指數級增長(遵循摩爾定律),最大的變革來自於互聯網的興起,它使得收集與分發用於機器學
習的超大型數據集變得可行。如今,大公司使用的圖像數據集、視頻數據集和自然語言數據集,
如果沒有互聯網的話根本無法收集。例如,Flickr 網站上用戶生成的圖像標籤一直是計算機視覺
的數據寶庫。YouTube 視頻也是一座寶庫。維基百科則是自然語言處理的關鍵數據集。
如果有一個數據集是深度學習興起的催化劑的話,那麼一定是 ImageNet 數據集。它包含
140 萬張圖像,這些圖像已經被人工劃分爲 1000 個圖像類別(每張圖像對應 1 個類別)。但
ImageNet 的特殊之處不僅在於其數量之大,還在於與它相關的年度競賽 a
正如 Kaggle 2010 年以來所展示的那樣,公開競賽是激勵研究人員和工程師挑戰極限的
極好方法。研究人員通過競爭來挑戰共同基準,這極大地促進了近期深度學習的興起。
1.3.3 算法
除了硬件和數據之外,直到 20 世紀前十年的末期,我們仍沒有可靠的方法來訓練非常深
的神經網絡。因此,神經網絡仍然很淺,僅使用一兩個表示層,無法超越更爲精確的淺層方法,
比如 SVM 和隨機森林。關鍵問題在於通過多層疊加的梯度傳播。隨着層數的增加,用於訓練神
經網絡的反饋信號會逐漸消失。
這一情況在 20092010 年左右發生了變化,當時出現了幾個很簡單但很重要的算法改進,
可以實現更好的梯度傳播。
更好的神經層激活函數activation function)。
更好的權重初始化方案weight-initialization scheme),一開始使用逐層預訓練的方法,
不過這種方法很快就被放棄了。
更好的優化方案optimization scheme),比如 RMSProp Adam
只有這些改進可以訓練 10 層以上的模型時,深度學習纔開始大放異彩。
最後,在 2014 年、2015 年和 2016 年,人們發現了更先進的有助於梯度傳播的方法,比如
批標準化、殘差連接和深度可分離卷積。今天,我們可以從頭開始訓練上千層的模型。
1.3.4 新的投資熱潮
隨着深度學習於 20122013 年在計算機視覺領域成爲新的最優算法,並最終在所有感知任
務上都成爲最優算法,業界領導者開始注意到它。接下來就是逐步升溫的業界投資熱潮,遠遠
超出了人工智能歷史上曾經出現過的任何投資。
2011 年,就在深度學習大放異彩之前,在人工智能方面的風險投資總額大約爲 1900 萬美元,
幾乎全都投給了淺層機器學習方法的實際應用。到了 2014 年,這一數字已經漲到了驚人的 3.94
億美元。這三年裏創辦了數十家創業公司,試圖從深度學習炒作中獲利。與此同時,Google
Facebook、百度、微軟等大型科技公司已經在內部研究部門進行投資,其金額很可能已經超過
了風險投資的現金流。其中只有少數金額被公之於衆:2013 年,Google 收購了深度學習創業公
DeepMind,報道稱收購價格爲 5 億美元,這是歷史上對人工智能公司的最高收購價格。2014
年,百度在硅谷啓動了深度學習研究中心,爲該項目投資 3 億美元。2016 年,深度學習硬件創
業公司 Nervana Systems 被英特爾收購,收購價格逾 4 億美元。
機器學習,特別是深度學習,已成爲這些科技巨頭產品戰略的核心。2015 年末,Google
席執行官 Sundar Pichai 表示:“機器學習這一具有變革意義的核心技術將促使我們重新思考做所
有事情的方式。我們用心將其應用於所有產品,無論是搜索、廣告、YouTube 還是 Google Play
我們尚處於早期階段,但你將會看到我們系統性地將機器學習應用於所有這些領域。”a
由於這波投資熱潮,短短五年間從事深度學習的人數從幾千人漲到數萬人,研究進展也達
到了驚人的速度。目前沒有跡象表明這種趨勢會在短期內放緩。
1.3.5 深度學習的大衆化
有許多新面孔進入深度學習領域,而主要的驅動因素之一是該領域所使用工具集的大衆
化。在早期,從事深度學習需要精通 C++ CUDA,而它們只有少數人才能掌握。如今,具
有基本的 Python 腳本技能,就可以從事高級的深度學習研究。這主要得益於 Theano 及隨後的
TensorFlow 的開發,以及 Keras 等用戶友好型庫的興起。Theano TensorFlow 是兩個符號式的
張量運算的 Python 框架,都支持自動求微分,這極大地簡化了新模型的實現過程。Keras 等用
戶友好型庫則使深度學習變得像操縱樂高積木一樣簡單。Keras 在 2015 年初發布,並且很快就
成爲大量創業公司、研究生和研究人員轉向該領域的首選深度學習解決方案。
1.3.6 這種趨勢會持續嗎
深度神經網絡成爲企業投資和研究人員紛紛選擇的正確方法,它究竟有何特別之處?換句
話說,深度學習是否只是難以持續的曇花一現? 20 年後我們是否仍在使用深度神經網絡?
深度學習有幾個重要的性質,證明了它確實是人工智能的革命,並且能長盛不衰。20 年後
我們可能不再使用神經網絡,但我們那時所使用的工具都是直接來自於現代深度學習及其核心
概念。這些重要的性質可大致分爲以下三類。
簡單。深度學習不需要特徵工程,它將複雜的、不穩定的、工程量很大的流程替換爲簡
單的、端到端的可訓練模型,這些模型通常只用到五六種不同的張量運算。
可擴展。深度學習非常適合在GPU或TPU上並行計算,因此可以充分利用摩爾定律。此外,
深度學習模型通過對小批量數據進行迭代來訓練,因此可以在任意大小的數據集上進行
訓練。(唯一的瓶頸是可用的並行計算能力,而由於摩爾定律,這一限制會越來越小。)
多功能與可複用。與之前的許多機器學習方法不同,深度學習模型無須從頭開始就可以
在附加數據上進行訓練,因此可用於連續在線學習,這對於大型生產模型而言是非常重
要的特性。此外,訓練好的深度學習模型可用於其他用途,因此是可以重複使用的。舉
個例子,可以將一個對圖像分類進行訓練的深度學習模型應用於視頻處理流程。這樣我
們可以將以前的工作重新投入到日益複雜和強大的模型中。這也使得深度學習可以適用
於較小的數據集。
深度學習數年來一直備受關注,我們還沒有發現其能力的界限。每過一個月,我們都會學
到新的用例和工程改進,從而突破先前的侷限。在一次科學革命之後,科學發展的速度通常會
遵循一條 S 形曲線:首先是一個快速發展時期,接着隨着研究人員受到嚴重限制而逐漸穩定下來,
然後進一步的改進又逐漸增多。深度學習在 2017 年似乎處於這條 S 形曲線的前半部分,在未來
幾年將會取得更多進展。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章