第三撥人工智慧熱潮源於深度學習的復興。那麼,到底什麼是深度學習?為什麼深度學習能讓計算機一下子變得聰明起來?
從根本上來說,深度學習和所有機器學習方法一樣,是一種用數學模型對真實世界中的特定問題進行建模,以解決該領域內相似問題的過程。
好了,好了,我知道一提「數學」二字,讀者就會跑掉一大半,更別說讓非理工科專業的人摸不著頭腦的「建模」一詞了。有沒有可能用非理工科專業也聽得懂的術語,解釋一下如今在人工智慧領域如日中天的深度學習算法呢?
首先,深度學習是一種機器學習。既然名為「學習」,那自然與我們人類的學習過程有某種程度的相似。
比如,很多小朋友都用識字卡片來認字,其實,要教計算機認字,差不多也是同樣的道理。計算機也要先把每一個字的源反覆看很多很多遍,然後,在計算機的大腦(處理器加上存儲器)裡,總結出一個規律來,以後計算機再看到類似的圖案,只要符含之前總結的規律,計算機就能知道這圖案到底是什麼字。
用專業的術語來說,計算機用來學習的、反覆看的圖片叫「訓練數據集」;「訓練數據集」中,一類數據區別於另一類數據的不同方面的置性或特質,叫作「特徵」;計算機在「大腦」中總結規律的過程,叫「建模」;計算機在「大腦」中總結出的規律,就是我們常說的「模型」;而計算機通過反覆看圖,總結出規律,然後學會認字的過程,就叫「機器學習」。
到底計算機是怎麼學習的?計算機總結出的規律又是什麼樣的呢?這取決於我們使用什麼樣的機器學習算法。
家長和老師們可能都有這樣的經驗:先教小朋友分辨「一」「二」「三」時,我們會告訴小朋友說,一筆寫成的字是「一」,兩筆寫成的字是「二」,三筆寫成的字是「三」。這個規律好記又好用。
但是,開始學新字時,這個規律就未必奏效了。比如,「口」也是三筆,可它卻不是「三」。我們通常會告訴小朋友,圍成個方框兒的是「口」,排成橫排的是「三」。這規律又豐富了一層,但仍然禁不住識字數量的增長。很快,小朋友就發現,「田」也是個方框兒,可它不是「口」。我們這時會告訴小朋友,方框裡有個「十」的是「田」。再往後,我們多半就要告訴小朋友,「田」上面出頭是「由」,下面出頭是「甲」,上下都出頭是「申」。
有一種名叫決策樹的機器學習方法,就和上面根據特徵規律來識字的過程非常相似。當計算機只需要認識「一」「二」「三」這三個字時,計算機只要數一下要識別的漢字的筆畫數量,就可以分辨出來了。當我們為待識別漢字集(訓練數據集)增加「口」和「田」時,計算機之前的判定方法失敗,就必須引入其他判定條件。由此一步步推進,計算機就能認識越來越多的字。
當然,這種基於決策樹的學習方法太簡單了,很難擴展,也很難適應現實世界的不同情況。於是,科學家和工程師們斷續發明出了許許多多不同的機器學習方法。
例如,我們可以把漢字「由」「甲」「申」的特徵,包括有沒有出頭、筆畫間的位置關係等,映射到某個特定空間裡的一個點。也就是說,訓練數據集中,這三個字的大量不同寫法,在計算機看來就變成了空間中的一大堆點。只要我們對每個字的特徵提取得足夠好,空間中的一大堆點就會大致分布在三個不同的範圍裡。
這時,讓計算機觀察這些點的規律,看能不能用一種簡明的分割方法(比如在空間中畫直線),把空間分割成幾個相互獨立的區域,儘量使得訓練數據集中每個字對應的點都位於同一個區域內。如果這種分割是可行的,就說明計算機「學「到了這些字在空間中的分布規律,為這些字建立了模型。
接下來,看見一個新的漢字圖像時,計算機就簡單把圖像換算成空間裡的一個點,然後判斷這個點落在了哪個字的區域裡,這下,不就能知道這個圖像是什麼字了嗎?
很多人可能已經看出來了,使用畫直線的方法來分割一個平面空間,很難適應幾千個漢字以及總計至少數萬種不同的寫法。很多年裡,人們不斷改進機器學習方法。比如,用複雜的高階函數來畫出變化多端的曲線,以便將空間裡相互交錯的點分開來,或者,乾脆想辦法把二維空間變成三維間、四維空間基至幾百維、幾千維、幾萬維的高維空間。
那麼,如何大幅擴展計算機在描述世界規律時的基本手段呢?有沒有可能為計算機設計一種靈活度極高的表達方式,然後讓計算機在大規模的學習過程裡不斷嘗試和尋找,自己去總結規律,直到最終找到符合真實世界特徵的一種表示方法呢?
現在,我們終於要談到深度學習了!
從數學本質上說,深度學習與前面談到的傳統機器學習方法並沒有實質性差別,都是希望在高維空間中,根據對象特徵,將不同類別的對象區分開來。但深度學習的表達能力,與傳統機器學習相比,卻有著天壤之別。
假設深度學習要處理的數據是信息的「水流」,而處理數據的深度學習網絡是一個由管道和閥門組成的巨大的水管網絡。網絡的入口是若干管道開口,網絡的出口也是若干管道開口。這個水管網絡有許多層,每一層有許多個可以控制水流流向與流量的調節閥。根據不同任務的需要,水管網絡的層數、每層的調節閥數量可以有不同的變化組合。
水管網絡中,每一層的每個調節閥都通過水管與下一層的所有調節閥連接起來,組成一個從前到後,逐層完全連通的水流系統。
那麼,計算機該如何使用這個龐大的水管網絡,來學習識字呢?比如,當計算機看到一張寫有「田」字的圖片時,就簡單將組成這張圖片的所有數字(在計算機裡,圖片的每個顏色點都是用「0」和「1「組成的數字來表示的)全都變成信息的水流,從入口灌進水管網絡。
我們預先在水管網絡的每個出口都插一塊字牌,對應於每一個我們想讓計算機認識的漢字。這時,因為輸入的是「田」這個漢字,等水流流過整個水管網絡,計算機就會跑到管道出口位置去看一看,是不是標記有「田」字的管道出口流出來的水流最多。如果是這樣,就說明這個管道網絡符合要求。如果不是這樣,我們就給計算機下達命令:調節水管網絡裡的每一個流量調節閥,讓「田」字出口「流出」的數字水流最多。
這下,計算機可要忙一陣子了,要調節那麼多閥門呢!好在計算機計算速度快,暴力計算外加算法優化(其實,主要是精妙的數學方法了,不過我們這裡不講數學公式,大家只要想像計算機拼命計算的樣子就可以了),總是可以很快給出一個解決方案,調好所有閥門,讓出口處的流量符合要求。
下一步,學習「申」字時,我們就用類似的方法,把每一張寫有「申」字的圖片變成一大堆數字組成的水流,灌進水管網絡,看一看,是不是寫有「申」字的那個管道出口流出來的水最多,如果不是,我們還得再次調整所有的調節閥。這一次,要既保證剛才學過的「田「字不受影響,也要保證新的「申」字可以被正確處理。
如此反覆進行,直到所有漢字對應的水流都可以按照期望的方式流過整個水管網絡。這時,我們就說,這個水管網絡已經是一個訓練好的深度學習模型了。
當大量識字卡片被這個管道網絡處理,所有閥門都調節到位後,整套水管網絡就可以用來識別漢字了。這時,我們可以把調節好的所有閥門都「焊死」,靜候新的水流到來。
與訓練時做的事情類似,未知的圖片會被計算機轉變成數據的水流,灌入訓練好的水管網絡。這時,計算機只要觀察一下,哪個出口流出來的水流最多,這張圖片寫的就是哪個字。
簡單嗎?神奇嗎?難道深度學習竟然就是這樣的一個靠瘋狂調節閥門來「湊」出最佳模型的學習方法?整個水管網絡內部,每個閥門為什麼要如此調節,為什麼要調節到這種程度,難道完全由最終每個出口的水流量來決定?這裡面,真的沒有什麼深奧的道理可言?
深度學習大致就是這麼一個用人類的數學知識與計算機算法構建起整體架構,再結合儘可能多的訓練數據以及計算機的大規模運算能力去調節內部參數,儘可能逼近問題目標的半理論、半經驗的建模方式。
指導深度學習的基本是一種實用主義的思想。實用主義意味著不求甚解。這真是一件特別有意思的事。有史以來最有效的機器學習方法,在許多人看來,竟然是一個只可意會、不可言傳的「黑盒子」。
由此引發的一個哲學思辨是,如果人們只知道計算機學會了做什麼,卻說不清計算機在學習過程中掌握的是一種什麼樣的規律,那這種學習本身會不會失控?
比如,很多人由此擔心,按照這樣的路子發展下去,計算機會不會悄悄學到什麼我們不希望它學會的知識?
另外,從原理上說,如果無限增加深度學習模型的層數,那計算機的建模能力是不是就可以與真實世界的終極複雜度有一比呢?
還好,關於深度學習到底是否有能力表達宇宙級別的複雜知識,專家們尚未有一致看法。人類至少在可見的未來還是相對安全的。
(本文來自澎湃新聞,更多原創資訊請下載「澎湃新聞」APP)