1. 程式人生 > >一頁紙說清楚“什麼是深度學習?”

一頁紙說清楚“什麼是深度學習?”

深度學習:像人腦一樣深層次地思考

從上一篇我們可以看出,個性化推薦系統確實很會“察言觀色”,針對不同的使用者,主動推送不同的3D列印內容。但如果你認為它真正有了“人工智慧”,那你就錯了。其實,這些推薦系統背後的執行原理主要基於概率統計、矩陣或圖模型,計算機對這些數值運算確實很擅長,但由於採用的只是“經驗主義”的實用方法(也即管用就行),而非以“理性主義”的原則真正探求智慧產生的原理,所以距離真正的人工智慧還很遠。AI(Artificial Intelligence),也就是人工智慧,就像長生不老和星際漫遊一樣,是人類最美好的夢想之一。雖然計算機技術已經取得了長足的進步,但是到目前為止,還沒有一臺計算機能產生“自我”的意識。


提示:圖靈測試(Turing Testing),是計算機是否真正具有人工智慧的試金石。“電腦科學之父”及“人工智慧之父”英國數學家阿蘭·圖靈(1912—1954)在1950年的一篇著名論文《機器會思考嗎?》裡,提出圖靈測試的設想。即把一個人和一臺計算機分別隔離在兩間屋子,然後讓屋外的一個提問者對兩者進行問答測試。如果提問者無法判斷哪邊是人,哪邊是機器,那就證明計算機已具備人的智慧。

直到深度學習(Deep Learning)的出現,讓人們看到了一絲曙光,至少,(表象意義下的)圖靈測試已不再是那麼遙不可及了。20134月,《麻省理工學院技術評論》雜誌將深度學習列為2013年十大突破性技術(

Breakthrough Technology)之首。有了深度學習,推薦系統可以更加深度地挖掘你內心的需求,並從海量的3D模型庫中挑選出最合適的供你列印。

讓我們先來看看人類的大腦是如何工作的。1981年的諾貝爾醫學獎,頒發給了David HubelTorsten Wiesel,以及Roger Sperry。前兩位的主要貢獻是,發現了人的視覺系統的資訊處理是分級的。如圖4-45所示,從視網膜(Retina)出發,經過低階的V1區提取邊緣特徵,到V2區的基本形狀或目標的區域性,再到高層的整個目標(如判定為一張人臉),以及到更高層的PFC(前額葉皮層)進行分類判斷等。也就是說高層的特徵是低層特徵的組合,從低層到高層的特徵表達越來越抽象和概念化,也即越來越能表現語義或者意圖。

圖4-45  人腦的視覺處理系統 (圖片來源:Simon Thorpe)

這個發現激發了人們對於神經系統的進一步思考。大腦的工作過程,或許是一個不斷迭代、不斷抽象概念化的過程,如圖4-46所示。例如,從原始訊號攝入開始(瞳孔攝入畫素),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定眼前物體的形狀,比如是橢圓形的),然後進一步抽象(大腦進一步判定該物體是張人臉),最後識別眼前的這個人──正是大明星劉德華。這個過程其實和我們的常識是相吻合的,因為複雜的圖形,往往就是由一些基本結構組合而成的。同時我們還可以看出:大腦是一個深度架構,認知過程也是深度的。

圖4-46  視覺的分層處理結構 (圖片來源:Stanford)

而深度學習(Deep Learning),恰恰就是通過組合低層特徵形成更加抽象的高層特徵(或屬性類別)。例如,在計算機視覺領域,深度學習演算法從原始影象去學習得到一個低層次表達,例如邊緣檢測器、小波濾波器等,然後在這些低層次表達的基礎上,通過線性或者非線性組合,來獲得一個高層次的表達。此外,不僅影象存在這個規律,聲音也是類似的。比如,研究人員從某個聲音庫中通過演算法自動發現了20種基本的聲音結構,其餘的聲音都可以由這20種基本結構來合成!

在進一步闡述深度學習之前,我們需要了解什麼是機器學習(Machine Learning)。機器學習是人工智慧的一個分支,而在很多時候,幾乎成為人工智慧的代名詞。簡單來說,機器學習就是通過演算法,使得機器能從大量歷史資料中學習規律,從而對新的樣本做智慧識別或對未來做預測。

而深度學習又是機器學習研究中的一個新的領域,其動機在於建立可以模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如,影象、聲音和文字。深度學習之所以被稱為“深度”,是因為之前的機器學習方法都是淺層學習。深度學習可以簡單理解為傳統神經網路(Neural Network)的發展。大約二三十年前,神經網路曾經是機器學習領域特別熱門的一個方向,這種基於統計的機器學習方法比起過去基於人工規則專家系統,在很多方面顯示出優越性。如圖4-47所示,深度學習與傳統的神經網路之間有相同的地方,採用了與神經網路相似的分層結構:系統是一個包括輸入層、隱層(可單層、可多層)、輸出層的多層網路,只有相鄰層節點(單元)之間有連線,而同一層以及跨層節點之間相互無連線。這種分層結構,比較接近人類大腦的結構(但不得不說,實際上相差還是很遠的,考慮到人腦是個異常複雜的結構,很多機理我們目前都是未知的)。

圖4-47  傳統的神經網路與深度神經網路

提示:人類大腦由千億個神經元組成同時每個神經元平均連線到其它幾千個神經元,這樣形成一個龐大的神經元網路。通過這種連線方式,神經元可以收發不同數量的能量,但它們對能量的接受並不是立即作出響應,而是先累加起來,只有當累加的總和達到某個臨界閾值時才把能量傳送給其它的神經元。而人工神經網路(Artificial Neural Networks, ANN)人類神經網路作了數學上的抽象,如圖4-47所示,將其抽象為輸入層、輸出層以及中間的若干隱層Hidden Layer,用於層次化地對內在特徵進行降維和抽象表達,相當於特徵檢測器),其中每層都有若干結點及連線這些點的邊,通過在訓練資料集上學習出邊的權重(Weight)來建立模型。邊所表徵的函式(通常為非線性函式)的不同,對應於不同的神經網路。例如,第6章6.4.1節所介紹的感知機就是一種最簡單的、不含任何隱層的前向(Feedforward)人工神經網路,其中的函式被稱為傳遞函式(Transfer Function)、而門限截止函式則被用作啟用函式(Activation Function)。在上世紀七八十年代,這種在人工智慧領域被稱為聯結主義學派(Connectionism)的方法曾盛極一時。

但是後來,因為理論分析的難度,加上訓練方法需要很多經驗和技巧,以及巨大的計算量和優化求解難度,神經網路慢慢淡出了科研領域的主流方向。值得指出的是,神經網路(如採用誤差反向傳播演算法:Back Propagation,簡稱BP演算法,通過梯度下降方法在訓練過程中修正權重使得網路誤差最小)在層次深的情況下效能變得很不理想(傳播時容易出現所謂的梯度彌散Gradient Diffusion或稱之為梯度消失,根源在於非凸目標代價函式導致求解陷入區域性最優,且這種情況隨著網路層數的增加而更加嚴重,即隨著梯度的逐層不斷消散導致其對網路權重調整的作用越來越小),所以只能轉而處理淺層結構(小於等於3),從而限制了效能。於是,20世紀90年代,有更多各式各樣的淺層模型相繼被提出,比如只有一層隱層節點的支撐向量機(SVMSupport Vector Machine)和Boosting,以及沒有隱層節點的最大熵方法(例如LRLogistic Regression)等,在很多應用領域取代了傳統的神經網路。

顯然,這些淺層結構演算法有很多侷限性:在有限樣本和計算單元情況下對複雜函式的表示能力有限,針對複雜分類問題其泛化能力受到一定的制約。更重要的是,淺層模型有一個特點,就是需要依靠人工來抽取樣本的特徵。然而,手工地選取特徵是一件非常費力的事情,能不能選取好很大程度上靠經驗和運氣。既然手工選取特徵不太好,那麼能不能自動地學習一些特徵呢?

提示:實際生活中,人們為了實現物件的分類,首先必須做的事情是如何來表達一個物件,即必須抽取一些特徵來表示一個物件。例如,區分人和猴子的一個重要特徵是是否有尾巴。特徵選取的好壞對最終結果的影響非常大。此外,我們希望提取到的特徵能代表輸入資料的最重要部分,就像PCAPrincipal Component Analysis主成分分析,請參見第6章的6.2.2節)那樣,找到可以代表原資訊的主要成分。以自動編碼器(AutoEncoder)為例,這是一種儘可能復現輸入訊號的神經網路:即輸出要儘可能與輸入相同,表示為。我們可通過訓練調整這個神經網路的引數,來得到每一層中的權值係數,這樣就可得到輸入的一個層次化的表示。這個可代表原資訊主要成分的表示就是所謂的特徵。
進一步地,我們還可用來表示輸出,其中稱為
字典。類似於PCA,可理解為基,可理解為係數。同時,我們不僅希望將訊號表示為一組層次化基的線性組合,而且要求只需較少的幾個基就可以將訊號表示出來,這就是所謂的稀疏編碼(Sparse Coding)。“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠大於零的元素。也即,我們希望求得一組最佳的係數,滿足:
               


注意上式右邊對係數採用了
L1正規化/正則化/約束以滿足稀疏性,上式實際上是對Lasso(The Least Absolute Shrinkage and Selectionator operator)估計的求解。
之所以希望
“稀疏性”是科學依據的,因為絕大多數的感官資料,比如自然影象,都可以被表示成“少量”基本元素的疊加,比如基本線/面的疊加。稀疏編碼演算法是一種無監督學習方法,它用來尋找一組“超完備”
基向量(基向量的個數比輸入向量的維數要大)以更高效地表示樣本資料,以找出隱含在輸入資料內部的結構與模式。

答案是能!深度學習框架將特徵和分類器結合到一個框架中,自動地從海量大資料中去學習特徵,在使用中減少了手工設計特徵的巨大工作量。看它的一個別名:無監督特徵學習(Unsupervised Feature Learning),就可以顧名思義了。無監督(Unsupervised)學習的意思就是不需要通過人工方式進行樣本類別的標註來完成學習。因此,深度學習是一種可以自動地學習特徵的方法。

提示:準確地說,深度學習首先利用無監督學習對每一層進行逐層預訓練(Layerwise Pre-Training)去學習特徵;每次單獨訓練一層,並將訓練結果作為更高一層的輸入;然後到最上層改用監督學習從上到下進行微調(Fine-Tune)去學習模型

深度學習通過學習一種深層非線性網路結構,只需簡單的網路結構即可實現複雜函式的逼近,並展現了強大的從大量無標註樣本集中學習資料集本質特徵的能力。深度學習能夠獲得可更好地表示資料的特徵,同時由於模型的層次深(通常有5層、6層,甚至10多層的隱層節點,“深的好處是可以控制隱層節點的數目為輸入節點數目的多項式倍而非多達指數倍)、表達能力強,因此有能力表示大規模資料。對於影象、語音這種特徵不明顯(需要手工設計且很多沒有直觀的物理含義)的問題,深度模型能夠在大規模訓練資料上取得更好的效果。尤其是在語音識別方面,深度學習使得錯誤率下降了大約30%,取得了顯著的進步。相比於傳統的神經網路,深度神經網路作出了重大的改進,在訓練上的難度(如梯度彌散問題)可以通過“逐層預訓練”來有效降低。注意,深度學習不是萬金油,像很多其他方法一樣,它需要結合特定領域的先驗知識,需要和其他模型結合才能得到最好的結果。當然,還少不了需要針對自己的專案去仔細地調引數,這也往往令人詬病。此外,類似於神經網路,深度學習的另一侷限性是可解釋性不強,像個“黑箱子”一樣不知為什麼能取得好的效果,以及不知如何有針對性地去具體改進,而這有可能成為產品升級過程中的阻礙。

深度學習通過很多數學和工程技巧增加(堆疊疊加:Stack)隱層的層數,如果隱層足夠多(也就是深),選擇適當的連線函式和架構,就能獲得很強的表達能力。深度學習的一個主要優勢在於可以利用海量訓練資料(即大資料),但是常用的模型訓練演算法反向傳播(Back Propagation)仍然對計算量有很高的要求。而近年來,得益於計算機速度的提升、基於MapReduce的大規模叢集技術的興起、GPU的應用以及眾多優化演算法的出現,耗時數月的訓練過程可縮短為數天甚至數小時,深度學習才在實踐中有了用武之地。

值得一提的是,深度學習的誕生並非一帆風順。雖然Yahn Lecun1993年提出的卷積神經網路(Convolutional Neural Network:CNN)是第一個真正成功訓練多層網路結構的學習演算法,但應用效果一直欠佳。直到2006年,Geoffrey Hinton基於深度置信網(Deep Belief Net:DBN)——其由一系列受限波爾茲曼機(Restricted Boltzmann Machine:RBM)組成,提出非監督貪心逐層訓練(Layerwise Pre-Training)演算法,應用效果才取得突破性進展,其與之後Ruslan Salakhutdinov提出的深度波爾茲曼機(Deep Boltzmann Machine:DBM)重新點燃了人工智慧領域對於神經網路(Neural Network)波爾茲曼機(Boltzmann Machine)的熱情,才由此掀起了深度學習的浪潮。從目前的最新研究進展來看,只要資料足夠大、隱層足夠深,即便不加“Pre-Training”預處理,深度學習也可以取得很好的結果,反映了大資料和深度學習相輔相成的內在聯絡。此外,雖說非監督(如DBM方法)是深度學習的一個優勢,深度學習當然也可用於帶監督的情況(也即給予了使用者手動標註的機會),實際上帶監督的CNN方法目前就應用得越來越多,乃至正在超越DBM

提示:與前向神經網路不同,RBM(受限波爾茲曼機)中的可見層和隱含層之間的連線是無方向性且全連線的。對比差異無監督訓練是RBM的一個重要演算法,包含了正向過程、反向過程和權值更新三個步驟,主要目標是使生成的資料與原資料儘可能相似,並通過對比兩者的差異來調整權值更新:
                    
其中,是學習速率。這樣的網路可具備感知對輸入資料表達程度的能力,而且嘗試通過這個感知能力重建資料。如果重建出來的資料與原資料差異很大,那麼進行調整並再次重建。

20126月,《紐約時報》披露了Google Brain專案,吸引了公眾的廣泛關注。這個專案是由著名的斯坦福大學的機器學習教授Andrew Ng和在大規模計算機系統方面的世界頂尖專家Jeff Dean共同主導,用16,000CPU Core的平行計算平臺去訓練含有10億個節點的深度神經網路(DNNDeep Neural Networks),使其能夠自我訓練,對2萬個不同物體的1,400萬張圖片進行辨識。在開始分析資料前,並不需要向系統手工輸入任何諸如“臉、肢體、貓的長相是什麼樣子”這類特徵。Jeff Dean說:“我們在訓練的時候從來不會告訴機器:‘這是一隻貓’(即無標註樣本)。系統其實是自己發明或領悟了‘貓’的概念。”

20143月,同樣也是基於深度學習方法,Facebook DeepFace 專案使得人臉識別技術的識別率已經達到了 97.25%,只比人類識別 97.5% 的正確率略低那麼一點點,準確率幾乎可媲美人類。該專案利用了 9 層的神經網路來獲得臉部表徵,神經網路處理的引數高達 1.2億。

最後我們再回到大資料這個時代背景上來。當坐擁海量的大資料,我們無論是做推薦系統還是3D模型檢索(見第6章的6.4節“眾裡尋她千百度──海量3D模型的檢索”),以前用簡單的線性數學模型,一般也能獲得還不錯的結果。因此我們沾沾自喜起來,認為還是大資料更重要,而智慧演算法用簡單直接的就OK了,不需要也沒必要弄得很複雜。而當深度學習出現後,它的一系列輝煌戰績讓我們意識到:也許是時候該“鳥槍換炮”了。簡而言之,在大資料情況下,也許只有比較複雜的模型,或者說表達能力強的模型,才能充分發掘海量資料中蘊藏的有價值資訊。更重要的是,深度學習可以自動學習特徵,而不必像以前那樣還要請專家手工構造特徵,極大地推進了智慧自動化。

深度學習(即所謂深度)應大資料(即所謂廣度)而生,給大資料提供了一個深度思考的大腦,而3D列印(即所謂力度)給了智慧數字化一個強健的軀體,三者共同引發了“大資料+深度模型+3D列印”浪潮的來臨。