人工智能、機器學習與深度學習 // Keras之父淺談


最近幾年,人工智能(AI)一直是媒體大肆炒作的熱點話題。機器學習、深度學習和人工智能都出現在不計其數的文章中。我們的未來被描繪成擁有智能聊天機器人、自動駕駛汽車和虛擬助手,這一未來有時被渲染成可怕的景象,有時則被描繪爲烏托邦,人類的工作將十分稀少,大部分經濟活動都由機器人或人工智能體(AI agent)來完成。


我們的未來充滿風險,而你如果想在其中發揮積極的作用,就需要成爲人工智能體的開發者之一。先不要忙着拒絕,讀完本文,你會知道人工智能沒有想象中那麼難!


那麼我們首先來回答下列問題:到目前爲止,深度學習已經取得了哪些進展?深度學習有多重要?接下來我們要做什麼?媒體炒作是否可信?

本文將介紹關於人工智能、機器學習以及深度學習的必要背景。


人工智能、機器學習與深度學習

首先,在提到人工智能時,我們需要明確定義所討論的內容。什麼是人工智能、機器學習與深度學習(見下圖)?這三者之間有什麼關係?


人工智能、機器學習與深度學習 // Keras之父淺談


人工智能、機器學習與深度學習



1. 人工智能

人工智能誕生於20 世紀50 年代,當時計算機科學這一新興領域的少數先驅開始提出疑問:計算機是否能夠“思考”?我們今天仍在探索這一問題的答案。人工智能的簡潔定義如下:努力將通常由人類完成的智力任務自動化。因此,人工智能是一個綜合性的領域,不僅包括機器學習與深度學習,還包括更多不涉及學習的方法。例如,早期的國際象棋程序僅包含程序員精心編寫的硬編碼規則,並不屬於機器學習。在相當長的時間內,許多專家相信,只要程序員精心編寫足夠多的明確規則來處理知識,就可以實現與人類水平相當的人工智能。這一方法被稱爲符號主義人工智能(symbolic AI),從20 世紀50 年代到80 年代末是人工智能的主流範式。

在20 世紀80 年代的專家系統(expert system)熱潮中,這一方法的熱度達到了頂峯。

雖然符號主義人工智能適合用來解決定義明確的邏輯問題,比如下國際象棋,但它難以給出明確的規則來解決更加複雜、模糊的問題,比如圖像分類、語音識別和語言翻譯。於是出現了一種新的方法來替代符號主義人工智能,這就是機器學習(machine learning)。


2. 機器學習

在維多利亞時代的英格蘭,埃達• 洛夫萊斯伯爵夫人是查爾斯• 巴貝奇的好友兼合作者,後者發明了分析機(Analytical Engine),即第一臺通用的機械式計算機。雖然分析機這一想法富有遠見,並且相當超前,但它在19 世紀三四十年代被設計出來時並沒有打算用作通用計算機,因爲當時還沒有“通用計算”這一概念。它的用途僅僅是利用機械操作將數學分析領域的某些計算自動化,因此得名“分析機”。1843 年,埃達• 洛夫萊斯伯爵夫人對這項發明評論道:“分析機談不上能創造什麼東西。它只能完成我們命令它做的任何事情……它的職責是幫助我們去實現我們已知的事情。”

隨後,人工智能先驅阿蘭• 圖靈在其1950 年發表的具有里程碑意義的論文“計算機器和智能”a 中,引用了上述評論並將其稱爲“洛夫萊斯伯爵夫人的異議”。圖靈在這篇論文中介紹了圖靈測試以及日後人工智能所包含的重要概念。在引述埃達• 洛夫萊斯伯爵夫人的同時,圖靈還思考了這樣一個問題:通用計算機是否能夠學習與創新?他得出的結論是“能”。

機器學習的概念就來自於圖靈的這個問題:對於計算機而言,除了“我們命令它做的任何事情”之外,它能否自我學習執行特定任務的方法?計算機能否讓我們大吃一驚?如果沒有程序員精心編寫的數據處理規則,計算機能否通過觀察數據自動學會這些規則?

圖靈的這個問題引出了一種新的編程範式。在經典的程序設計(即符號主義人工智能的範式)中,人們輸入的是規則(即程序)和需要根據這些規則進行處理的數據,系統輸出的是答案(見圖1-2)。利用機器學習,人們輸入的是數據和從這些數據中預期得到的答案,系統輸出的是規則。這些規則隨後可應用於新的數據,並使計算機自主生成答案。



人工智能、機器學習與深度學習 // Keras之父淺談


機器學習:一種新的編程範式


機器學習系統是訓練出來的,而不是明確地用程序編寫出來的。將與某個任務相關的許多示例輸入機器學習系統,它會在這些示例中找到統計結構,從而最終找到規則將任務自動化。

舉個例子,你想爲度假照片添加標籤,並且希望將這項任務自動化,那麼你可以將許多人工打好標籤的照片輸入機器學習系統,系統將學會將照片與特定標籤聯繫在一起的統計規則。

雖然機器學習在20 世紀90 年代纔開始蓬勃發展,但它迅速成爲人工智能最受歡迎且最成功的分支領域。這一發展的驅動力來自於速度更快的硬件與更大的數據集。機器學習與數理統計密切相關,但二者在幾個重要方面有所不同。不同於統計學,機器學習經常用於處理複雜的大型數據集(比如包含數百萬張圖像的數據集,每張圖像又包含數萬個像素),用經典的統計分析(比如貝葉斯分析)來處理這種數據集是不切實際的。因此,機器學習(尤其是深度學習)呈現出相對較少的數學理論(可能太少了),並且是以工程爲導向的。這是一門需要上手實踐的學科,想法更多地是靠實踐來證明,而不是靠理論推導。

3. 從數據中學習表示

爲了給出深度學習的定義並搞清楚深度學習與其他機器學習方法的區別,我們首先需要知道機器學習算法在做什麼。前面說過,給定包含預期結果的示例,機器學習將會發現執行一項數據處理任務的規則。因此,我們需要以下三個要素來進行機器學習。

‰ 輸入數據點。例如,你的任務是語音識別,那麼這些數據點可能是記錄人們說話的聲音文件。如果你的任務是爲圖像添加標籤,那麼這些數據點可能是圖像。

‰ 預期輸出的示例。對於語音識別任務來說,這些示例可能是人們根據聲音文件整理生成的文本。對於圖像標記任務來說,預期輸出可能是“狗”“貓”之類的標籤。

‰ 衡量算法效果好壞的方法。這一衡量方法是爲了計算算法的當前輸出與預期輸出的差距。

衡量結果是一種反饋信號,用於調節算法的工作方式。這個調節步驟就是我們所說的學習。

機器學習模型將輸入數據變換爲有意義的輸出,這是一個從已知的輸入和輸出示例中進行“學習”的過程。因此,機器學習和深度學習的核心問題在於有意義地變換數據,換句話說,在於學習輸入數據的有用表示(representation)——這種表示可以讓數據更接近預期輸出。在進一步討論之前,我們需要先回答一個問題:什麼是表示?這一概念的核心在於以一種不同的方式來查看數據(即表徵數據或將數據編碼)。例如,彩色圖像可以編碼爲RGB(紅- 綠- 藍)格式或HSV(色相- 飽和度- 明度)格式,這是對相同數據的兩種不同表示。在處理某些任務時,使用某種表示可能會很困難,但換用另一種表示就會變得很簡單。舉個例子,對於“選擇圖像中所有紅色像素”這個任務,使用RGB 格式會更簡單,而對於“降低圖像飽和度”這個任務,使用HSV 格式則更簡單。機器學習模型都是爲輸入數據尋找合適的表示——對數據進行變換,使其更適合手頭的任務(比如分類任務)。

我們來具體說明這一點。考慮x 軸、y 軸和在這個(x, y) 座標系中由座標表示的一些點,如下圖所示。


人工智能、機器學習與深度學習 // Keras之父淺談


一些樣本數據


可以看到,圖中有一些白點和一些黑點。假設我們想要開發一個算法,輸入一個點的座標(x, y),就能夠判斷這個點是黑色還是白色。在這個例子中:

‰ 輸入是點的座標;

‰ 預期輸出是點的顏色;

‰ 衡量算法效果好壞的一種方法是,正確分類的點所佔的百分比。

這裏我們需要的是一種新的數據表示,可以明確區分白點與黑點。可用的方法有很多,這裏用的是座標變換,如下圖所示。


人工智能、機器學習與深度學習 // Keras之父淺談



在這個新的座標系中,點的座標可以看作數據的一種新的表示。這種表示很棒!利用這種新的表示,用一條簡單的規則就可以描述黑/ 白分類問題:“x>0 的是黑點”或“x<0 的是白點”。

這種新的表示基本上解決了該分類問題。

在這個例子中,我們人爲定義了座標變換。但是,如果我們嘗試系統性地搜索各種可能的座標變換,並用正確分類的點所佔百分比作爲反饋信號,那麼我們做的就是機器學習。機器學習中的學習指的是,尋找更好數據表示的自動搜索過程。

所有機器學習算法都包括自動尋找這樣一種變換:這種變換可以根據任務將數據轉化爲更加有用的表示。這些操作可能是前面提到的座標變換,也可能是線性投影(可能會破壞信息)、平移、非線性操作(比如“選擇所有x>0 的點”),等等。機器學習算法在尋找這些變換時通常沒有什麼創造性,而僅僅是遍歷一組預先定義好的操作,這組操作叫作假設空間(hypothesis space)。

這就是機器學習的技術定義:在預先定義好的可能性空間中,利用反饋信號的指引來尋找輸入數據的有用表示。這個簡單的想法可以解決相當多的智能任務,從語音識別到自動駕駛都能解決。

現在你理解了學習的含義,下面我們來看一下深度學習的特殊之處。


4. 深度學習之“深度”

深度學習是機器學習的一個分支領域:它是從數據中學習表示的一種新方法,強調從連續的層(layer)中進行學習,這些層對應于越來越有意義的表示。“深度學習”中的“深度”指的並不是利用這種方法所獲取的更深層次的理解,而是指一系列連續的表示層。數據模型中包含多少層,這被稱爲模型的深度(depth)。這一領域的其他名稱包括分層表示學習(layeredrepresentations learning)和層級表示學習(hierarchical representations learning)。現代深度學習通常包含數十個甚至上百個連續的表示層,這些表示層全都是從訓練數據中自動學習的。與此相反,其他機器學習方法的重點往往是僅僅學習一兩層的數據表示,因此有時也被稱爲淺層學習(shallow learning)。

在深度學習中,這些分層表示幾乎總是通過叫作神經網絡(neural network)的模型來學習得到的。神經網絡的結構是逐層堆疊。神經網絡這一術語來自於神經生物學,然而,雖然深度學習的一些核心概念是從人們對大腦的理解中汲取部分靈感而形成的,但深度學習模型不是大腦模型。沒有證據表明大腦的學習機制與現代深度學習模型所使用的相同。你可能會讀到一些流行科學的文章,宣稱深度學習的工作原理與大腦相似或者是根據大腦的工作原理進行建模的,但事實並非如此。對於這一領域的新人來說,如果認爲深度學習與神經生物學存在任何關係,那將使人困惑,只會起到反作用。你無須那種“就像我們的頭腦一樣”的神祕包裝,最好也忘掉讀過的深度學習與生物學之間的假想聯繫。就我們的目的而言,深度學習是從數據中學習表示的一種數學框架。

深度學習算法學到的表示是什麼樣的?我們來看一個多層網絡(見下圖)如何對數字圖像進行變換,以便識別圖像中所包含的數字。


人工智能、機器學習與深度學習 // Keras之父淺談


用於數字分類的深度神經網絡


如下圖所示,這個網絡將數字圖像轉換成與原始圖像差別越來越大的表示,而其中關於最終結果的信息卻越來越豐富。你可以將深度網絡看作多級信息蒸餾操作:信息穿過連續的過濾器,其純度越來越高(即對任務的幫助越來越大)。

這就是深度學習的技術定義:學習數據表示的多級方法。這個想法很簡單,但事實證明,非常簡單的機制如果具有足夠大的規模,將會產生魔法般的效果。


人工智能、機器學習與深度學習 // Keras之父淺談


數字圖像分類模型學到的深度表示


5. 用三張圖理解深度學習的工作原理

現在你已經知道,機器學習是將輸入(比如圖像)映射到目標(比如標籤“貓”),這一過程是通過觀察許多輸入和目標的示例來完成的。你還知道,深度神經網絡通過一系列簡單的數據變換(層)來實現這種輸入到目標的映射,而這些數據變換都是通過觀察示例學習到的。下面來具體看一下這種學習過程是如何發生的。

神經網絡中每層對輸入數據所做的具體操作保存在該層的權重(weight)中,其本質是一串數字。用術語來說,每層實現的變換由其權重來參數化(parameterize,見下圖)。權重有時也被稱爲該層的參數(parameter)。在這種語境下,學習的意思是爲神經網絡的所有層找到一組權重值,使得該網絡能夠將每個示例輸入與其目標正確地一一對應。但重點來了:一個深度神經網絡可能包含數千萬個參數。找到所有參數的正確取值可能是一項非常艱鉅的任務,特別是考慮到修改某個參數值將會影響其他所有參數的行爲。


人工智能、機器學習與深度學習 // Keras之父淺談


神經網絡是由其權重來參數化


想要控制一件事物,首先需要能夠觀察它。想要控制神經網絡的輸出,就需要能夠衡量該輸出與預期值之間的距離。這是神經網絡損失函數(loss function)的任務,該函數也叫目標函數(objective function)。損失函數的輸入是網絡預測值與真實目標值(即你希望網絡輸出的結果),然後計算一個距離值,衡量該網絡在這個示例上的效果好壞(見下圖)。


人工智能、機器學習與深度學習 // Keras之父淺談


損失函數用來衡量網絡輸出結果的質量


深度學習的基本技巧是利用這個距離值作爲反饋信號來對權重值進行微調,以降低當前示例對應的損失值(見下圖)。這種調節由優化器(optimizer)來完成,它實現了所謂的反向傳播(backpropagation)算法,這是深度學習的核心算法。下一章中會詳細地解釋反向傳播的工作原理。


人工智能、機器學習與深度學習 // Keras之父淺談


將損失值作爲反饋信號來調節權重


一開始對神經網絡的權重隨機賦值,因此網絡只是實現了一系列隨機變換。其輸出結果自然也和理想值相去甚遠,相應地,損失值也很高。但隨着網絡處理的示例越來越多,權重值也在向正確的方向逐步微調,損失值也逐漸降低。這就是訓練循環(training loop),將這種循環重複足夠多的次數(通常對數千個示例進行數十次迭代),得到的權重值可以使損失函數最小。具有最小損失的網絡,其輸出值與目標值儘可能地接近,這就是訓練好的網絡。再次強調,這是一個簡單的機制,一旦具有足夠大的規模,將會產生魔法般的效果。


本文節選自《Python深度學習》



人工智能、機器學習與深度學習 // Keras之父淺談


Deep Learning with Python

作者:弗朗索瓦•肖萊

譯者:張亮(hysic)

  • Keras 之父、Google 人工智能研究員 François Chollet 著作

  • 原版豆瓣評分 9.3,深度學習領域力作
  • 原版亞馬遜語音與音頻處理暢銷榜榜首圖書
  • 30 多個代碼示例,帶你全面掌握如何用深度學習解決實際問題
  • Keras 框架速成的不二之選
  • 夯實深度學習基礎,在實踐中培養對深度神經網絡的良好直覺
  • 無須機器學習經驗和高等數學背景

本書詳盡介紹了用 Python 和 Keras 進行深度學習的探索實踐,包括計算機視覺、自然語言處理、產生式模型等應用,示例步驟講解詳細透徹。立足於人工智能的可達性和大衆化,讀者無須具備機器學習相關背景知識即可展開閱讀。在學習完本書後,讀者將具備搭建自己的深度學習環境、建立圖像識別模型、生成圖像和文字等能力。

相关文章