[譯] 從金屬巨人到深度學習

Xat_MassacrE發表於2017-07-20

從金屬巨人到深度學習

AI(人工智慧)簡史

塔羅斯是一個青銅巨人戰士,被創造出來守護克里特島,抵禦海盜和入侵者的攻擊。他每天繞克里特島三週,他凶狠的外表迫使海盜去別的地方尋找寶藏。但是在他凶狠外表的背後,塔羅斯根本算不上一個戰士。他只是一個機器人。一個按照戰士的樣子做出來的稻草人。但是我們仍然相信造物主給類似塔羅斯這樣的生物注入了非常真實的思考、情感、想法和智慧。這當然是無稽之談。塔羅斯僅僅是人類歷史長河最近的一個關於智慧思想的夢想:創造生物的渴望,創造像我們自己一樣智慧生物的夢想。

用作家 Pamela McCorduck 的話來說就是:"一個模仿上帝的古老願望。"

科學家、數學家、哲學家和作家們一直在尋找創造“會思考的機器”的祕訣。比人類本身更好的”會思考的機器“。

從創造出塔羅斯這樣會動的機器開始,人類中的創造者已經不滿足於簡單的模仿,而是開始尋求內在的真實。無意識的機器人讓它們窺見了智慧應該是什麼樣子,但是這種創造物並不能揭示智慧的實質。因此,他們不得不考慮智慧最為明顯的表現:人類的思想。

經濟學人說的那樣:“為了啟蒙,審視內心”。

但是很快我們發現,人類區別與低等生物的主要原因並不是我們腦容量的大小,也不是我們在地球上生存的經驗,而是我們強大的處理各種推理任務的能力。所以當我們構思出第一臺可程式設計的計算機時,並沒有什麼好驚訝的,並且這個計算機還可以模擬任何正式的推理過程,至少要和人類一樣,經考證,單詞 "computer" 第一次被使用是在 1940 年代的英格蘭,當時它的意思是”一個會計算的機器“。

起初,發展的很慢。馬克一號 —1940 年代最先進的機器誕生了 — 它是由數千個機械元件構成的重達 10,000 磅的龐然大物。使用了 500 英里的電線給它供電,但是即使是這樣精心製作的配置,每秒鐘也只能執行 3 次加法。但是隨著摩爾定理的問世,計算機效能飛速發展,並且在各種各樣任務的形式推理中擁有著超人表現。研究人員對這一進展既高興又驚訝,並且指出以目前的進步的速度來看,第一個完全成熟的”會思考的機器“即將誕生。在 1960 年代, 20 世紀人類知識巨匠之一的赫伯特·西蒙曾聲稱”在 20 年之內,機器將能夠勝任任何人類可以做的事情”,毫無疑問,他錯了。

事實證明,雖然計算機擅長解決那些被一系列邏輯和數學規則定義的問題,但是更大的挑戰則是讓計算機解決那些不能被抽象成正規的宣告語句的問題。比如識別圖片中的人臉或者是翻譯人類的語音。

在一個如此嘈雜的世界裡,一臺能夠和超人下國際象棋的機器對於贏得冠軍或許是有用的,但是在真實的世界裡,它的作用就如同小黃鴨一樣不值一提(除非你的工作就是除錯小黃鴨)。

這個認識導致幾個 AI 研究員否認了符號 AI(曾經一度統治 AI 研究的形式推理方法的一個術語)是創造人造智慧機器最好方法的基本原則。符號 AI 的基石像情景推演和謂詞邏輯都被證明太嚴苛以致於不能捕捉到現實世界中所有的不確定因素。AI 領域需要一個全新的方法。

一些研究員決定使用一個叫做“模糊邏輯”的方法來尋求答案,模糊邏輯是一種真值不僅僅是 0 或者 1 還可以是任何中間值的邏輯正規化。另外一些研究員則把所有努力都放在了叫做“機器學習”的新興領域。

機器學習是由於形式推理處理真實世界的不確定性因素的不足而誕生的。它不是將世界上的知識進行一個嚴格的邏輯公式的繫結,而是讓計算機自己去學習知識。不是簡單的告訴它“這是椅子”,"這是桌子",而是教計算機學習椅子和桌子概念的區別 。機器學習研究員們一直避免使用必然的事件來代表世界,因為嚴格的特徵條件並不是真實世界的本質。

相反,他們決定用統計和概率來模型化這個世界。

機器學習演算法不是使用真和假來判斷,而是使用真假的程度來判斷。換句話說就是 — 概率。

使用概率來量化真實世界的不確定性使得貝葉斯統計成為了機器學習的基石。對此,“頻率學派” 也是有話要說的,但是關於頻率學派和貝葉斯學派的爭論我們最好在另一篇文章詳述。

很快,像”邏輯迴歸“和”樸素貝葉斯“這樣的簡單的機器學習演算法就已經可以告訴計算機如何過濾垃圾郵件以及根據房屋大小來預估價格了。邏輯迴歸是一個非常直接的演算法:給一個輸入向量 x,模型只需要將 x 分類到 {1, 2, …, k} 中的一個就可以了。

不過有一個條件。

這些簡單演算法的表現嚴重依賴於訓練資料的表現。(Goodfellow et al. 2017)

總的來說就是,想象這樣一個場景,你做了一個使用邏輯迴歸來決定是否剖腹產的機器學習系統。這個系統無法直接檢測病人,而是由一個醫生來給這個系統喂資訊。這些資訊可能會包含子宮疤痕、懷孕了幾個月以及病人的年齡。每一個單獨的資訊都是一個特徵,把它們合在一起,對於 AI 系統來說就是這個病人的表示

通過一些訓練資料的訓練,邏輯迴歸可以獲得病人的這些特徵中每一項與不同結果的關係。舉例來說就是如果訓練資料中沒有包含分娩過程中惡心的概率和母親年齡增長之間的關係的話,那麼這個演算法就不太可能為年紀大的病人推薦處理流程。

雖然邏輯迴歸可以將表示對映到結果上,但t實際上它並不能真切地影響到構成病人表示的特徵。

如果邏輯迴歸不是從醫生那裡獲得一份正式的報告,而是隻有一張病人的核磁共振掃描結果,那麼它就不能做出有用的預測。(Goodfellow et al. 2017)

在分娩時期病人是否會有併發症的風險這個方面,核磁共振圖的每一個獨立的畫素能告訴我們的資訊太少了。

這取決於有一個良好的表示,如果有優秀的表現那麼無論對於電腦科學還是每日的生活都是一個偉大的貢獻。舉例來說就是你可以在 Spotify 上快速的搜尋到你想要找的歌曲,因為它們的音樂集是使用一種類似於三叉樹的智慧資料結構,而不是用類似於亂序資料的粗曠結構來儲存的。還有一個例子就是,學校裡的孩子可以輕鬆的處理阿拉伯數字的算術,而處理羅馬數字的算術卻異常困難。機器學習沒什麼不同,輸入表示的不同將會對你的學習演算法的表現產生巨大的影響。

David Warde-Farley, Goodfellow et al. 2017

由於這個原因,在人工智慧領域中很多問題最後都可以歸結為尋找合適的表示並把它作為輸入資料。舉個例子,假設我們設計了一個演算法用於識別 Instagram 照片中的漢堡。首先,我們要根據所有的漢堡構建出一個特徵集。首先我們要嘗試的或許就是通過圖片的原始畫素的值來描述漢堡。起初這或許是一個明智的做法,但是很快你就會發現並不是。

單純憑藉原始畫素來描述漢堡長啥樣是十分困難的,其實你可以想一下在麥當勞點漢堡的情景。當你點你想要的漢堡時,你應該會通過各種”特徵“來描述要點的漢堡,比如乳酪、中間的肉餅、芝麻、生菜、紅洋蔥以及其他的調味料。我們可以通過不同的成分的集合來描述漢堡,每一個成分又可以用它本身的特徵集來描述。大部分漢堡的成分可以用它們的的顏色和外形來描述,那麼一個漢堡就可以它的不同的成分的顏色和外形來描述了。

但是當漢堡不在圖片的中心位置,或者被放置在一個與之顏色相近的食物旁邊,又或者在一個異域風情的飯店裡漢堡是被分開提供的時候會發生什麼呢?這時我們的演算法又將如何區分以及解構漢堡呢?一個顯而易見的辦法是新增更多的(不同的)特徵,但是這只是臨時的解決辦法。很快,我們就會發現更多的邊界條件,然後我們就又要在我們的特徵集裡面新增更多的特徵來區別相似的圖片。隨著輸入表示的複雜,計算成本也隨之提高,事情就變的更加複雜了。現在的開發者不僅要關注特徵的數量還要還要關注輸入表示的所有特徵的表達力是否足夠。尋找完美特徵集對於任何機器學習演算法來說都是一個艱苦卓絕的任務,研究人員同時也耗時耗力。一個經驗豐富的社群可能都要研究幾十年。

對於學習演算法來說衡量表示輸入好壞的問題又被稱作表示問題

從 1990 年後期到 2000 年早期,機器學習演算法在處理不完美輸入表示的弱點本質上其實是 AI 領域研究過程中的瓶頸。當設計輸入特徵的表示時,為了彌補演算法上的弱點,工程師們除了依賴於人類的靈感和問題領域的前置知識以外別無他法。從長遠來看,這樣的"特徵工程"其實是站不住腳的。如果一個學習演算法不能夠從原始資料和未被過濾的資料中獲取有利資訊,那麼從一個更哲學角度講,這些演算法是不能理解這個世界的。

儘管有這麼多的障礙,研究人員們依然很快就發現瞭解決問題的方法。如果一個機器學習演算法可以把表示對映到輸出,那麼為什麼讓這些演算法學習表示本身呢。這就是表示學習。關於表示學習最著名的例子應該就是自編碼(神經網路的一種)了,它是基於人類大腦和神經系統建模的計算機系統。

一個自編碼實際上就是一個可以將輸入轉化為不同表示的編碼函式和一個可以將這個中間表示轉換回它的原始格式(儘可能多的保留資訊)的解碼函式的組合。結果就是我們會得到一個在編碼器和解碼器之間正確的分割,它可以將用來訓練的的”噪音“圖片的解碼成更有用的表示。舉例來說就是一張擁有在相似顏色中隱藏的漢堡的 Instagram 圖片。這個解碼器將會消除這個”噪音“,僅僅保留可以描述漢堡本身的的特徵。

By Chervinskii — Own work, CC BY-SA 4.0, commons.wikimedia.org/w/index.php…

但是對於自編碼來說,問題仍然存在。為了消除噪音,自編碼和一些其他的表示學習演算法必須能夠準確的決定對於輸入資料的描述來說什麼是最重要的因素。我們想要我們的演算法更好的分辨出哪些是我們感興趣的圖片(包含漢堡的)和哪些是我們不感興趣的圖片。對於這個例子來說,如果我們不是關注圖片原始畫素的值,而是將更多的注意力放在圖片成分的外形和顏色上,那麼在分辨有漢堡圖片和無漢堡圖片這個問題上顯然更有優勢。當然了,說比做總是要容易的多。關鍵點就是告訴演算法如何從沒用的因子中解構出有用的因子,這就是變數因子

乍一看,表示學習似乎無法為我們提供幫助,但是讓我們再研究研究。

一個編碼器通過隱藏層(中間層)獲取一個輸入表示,將這個輸入壓縮成一個較小的格式。解碼器做一個相反的事情:將輸入解壓回到原來的格式,儘可能多的保留資料。在這兩個情況下,如果隱藏層知道哪些因子是描述輸入最重要的,那麼輸入的資訊將會得到最好的保留,然後確保這些因子沒有在輸入中被清除並傳遞到下一層。

在上面的圖示中,編碼器和解碼器都只包含一個隱藏層,一個被壓縮,一個被解壓。層的數量導致粒度的匱乏意味著這個演算法為了最大限度的保留資訊,會在判斷輸入的壓縮和解壓的好壞時彈性不足。但是如果我們做一個小調整,將幾個隱藏層堆疊起來,一個接一個,那麼我們就會給演算法提供更大的自由度,同時演算法也會在選擇權重因子時對輸入的壓縮和解壓達到最好的效果。

這種使用多個隱藏層的神經網路演算法就是深度學習。

但是這並沒有結束,深度學習還要再深入一步。在使用多個隱藏層時,我們可以組合多個簡單的層來構建複雜的表示。通過一個一個的堆疊隱藏層,我們可以分辨出每一個層的變數因子。這會讓我們的演算法擁有用通過多個簡單層的來表達高深複雜的概念的能力。

Zeiler and Fergus (2014)

深度學習歷史悠久。這個領域的核心觀點在 1960 年代就通過多層感知器被提出來了。反向傳播演算法在 1970 年被正式提出,1980 年代各種人工神經網路也開始陸續登場。但是這些早期的成果又經歷了幾十年才在實踐中得以運用。沒有差的演算法(有些人並不這樣認為),只是我們還沒有意識到需要多大的資料量才能讓它們變的有用。

越小的資料樣本越容易產生極端的結果(因為在統計噪音上會有更大的影響)。越大的資料樣本則會減弱噪音的影響並讓深度學習模型更精確的知道哪些因子可以最好的描述輸入。

在 21 世紀初期深度學習取得如此成就一點也不意外,而幾乎同時,大部分科技公司也都發現了它們正坐在一座座未被開發的資料的金山上。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOSReact前端後端產品設計 等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃

相關文章