佚名
熱潮人工智能很熱,最重要的技術(shù)之一就是深度學(xué)習(xí)技術(shù)。今天談到深度學(xué)習(xí)的時候,其實已經(jīng)可以看到各種各樣的應(yīng)用,包括圖像、視頻、聲音、自然語言處理等。大多數(shù)人認為,深度學(xué)習(xí)就等于深度神經(jīng)網(wǎng)絡(luò)。
什么是深度學(xué)習(xí)
給大家看一個例子。有一個非常著名的學(xué)會是國際工業(yè)與應(yīng)用數(shù)學(xué)學(xué)會,他們有一個報紙叫 SIAM News。去年 6 月份的頭版上有一篇文章,它里面的重點說的就是深度學(xué)習(xí)是什么?它(深度學(xué)習(xí))是機器學(xué)習(xí)的一個子域(subfield),這里面要用深度神經(jīng)網(wǎng)絡(luò)。
要談深度學(xué)習(xí),首先要從神經(jīng)網(wǎng)絡(luò)開始。神經(jīng)網(wǎng)絡(luò)并不是一個新生事物,人們已經(jīng)研究了超過半個世紀。但以往我們會用這樣的神經(jīng)網(wǎng)絡(luò),就是中間有一個隱層或者有兩個隱層。在這樣的神經(jīng)網(wǎng)絡(luò)里面,它的每一個單元是什么樣的呢?是個非常簡單的計算模型。
比如說一個計算模型,實際上半個多世紀以前我們就已經(jīng)總結(jié)出來了。我們收到一些輸入,這些輸入通過一些連接放大,到了細胞之后,它的“加和”如果超過一個閾值,這個細胞就激活了。
今天說深度神經(jīng)網(wǎng)絡(luò)的時候指的是什么?其實簡單來說就是用的神經(jīng)網(wǎng)絡(luò)有很多層,很深很深。大概多少?看一個數(shù)據(jù),2012 年深度學(xué)習(xí)剛剛受到大家的重視的時候,一個 ImageNet 競賽的冠軍用了 8 層,2015 年 152 層,2016 年 1207 多層,這是一個非常龐大的系統(tǒng)。
要把這個系統(tǒng)訓(xùn)練出來難度非常大,但有一個非常好的消息,真正的神經(jīng)網(wǎng)絡(luò)里的計算單元,它最重要的激活函數(shù)是連續(xù)的,是可微的。以前在神經(jīng)網(wǎng)絡(luò)里面經(jīng)常用 Sigmoid,它是連續(xù)可微的,現(xiàn)在在深度神經(jīng)網(wǎng)絡(luò)里,經(jīng)常用 tanh 或者 tanh 的變體,它也是連續(xù)可微的。有了這么一個性質(zhì)以后,會得到非常好的結(jié)果,這個結(jié)果就是可以很容易計算系統(tǒng)的梯度。因此就可以很容易用著名的 BP 算法(注:反向傳播算法)來訓(xùn)練這系統(tǒng)。
通過這樣的算法,神經(jīng)網(wǎng)絡(luò)已經(jīng)取得了非常多的勝利,但實際上在學(xué)術(shù)界大家一直沒有想清楚一件事情,就是為什么要用這么深的模式?可能今天有很多人會說深度學(xué)習(xí)已經(jīng)取得了很多的成功,但一個很大的問題就是理論基礎(chǔ)不清楚,理論上還說不清楚它到底怎么做?為什么會成功?這里面的關(guān)鍵是什么?其實根本不知道該從什么角度去看它。
深度學(xué)習(xí)成功的關(guān)鍵
機器學(xué)習(xí)模型的復(fù)雜度實際上和它的容量有關(guān),而容量直接決定了它的學(xué)習(xí)能力,所以說學(xué)習(xí)能力和復(fù)雜度是有關(guān)的。如果能夠增強一個學(xué)習(xí)模型的復(fù)雜度,它的學(xué)習(xí)能力就能夠提升,那么怎樣去提高復(fù)雜度呢?
對神經(jīng)網(wǎng)絡(luò)這樣的模型來說有兩條很明顯的途徑,一條是把模型變深,一條是把它變寬。但是如果從提升復(fù)雜度的角度來講,變深會更有效。當(dāng)變寬的時候,只不過增加了一些計算單元、增加了函數(shù)的個數(shù),而在變深的時候不僅增加了個數(shù),還增加了嵌入的層次,所以泛函的表達能力會更強。從這個角度來說,應(yīng)該嘗試變深。既然要變深,為什么現(xiàn)在才開始做呢?其實這就涉及到另外一個問題,我們在機器學(xué)習(xí)里面把學(xué)習(xí)能力變強了,這其實未必真的是一件好事。因為機器學(xué)習(xí)一直在斗爭的一個問題,就是我們經(jīng)常會碰到擬合。
給定一個數(shù)據(jù)集,我們希望把數(shù)據(jù)集里的東西學(xué)出來,但是有時候可能把這個數(shù)據(jù)本身的一些特性研究出來,而這個特性卻不是一般的規(guī)律。當(dāng)把研究出來的錯誤東西當(dāng)成一般規(guī)律用的時候,就會犯巨大的錯誤,這種現(xiàn)象就是過擬合。為什么會把數(shù)據(jù)本身的特性研究出來?就是因為我們的模型研究能力太強了。
所以以往我們不太用太復(fù)雜的模型,為什么現(xiàn)在我們可以用這樣的模型?其實有很多因素,第一個因素是現(xiàn)在有很大的數(shù)據(jù),那么比如說我手上如果只有 3000 多數(shù)據(jù),研究出來的特性就不太可能是一般規(guī)律。但是如果有3000萬、甚至3000億的數(shù)據(jù),那么這些數(shù)據(jù)里的特性本來就是一般規(guī)律,所以使用大的數(shù)據(jù)本身就是緩解過擬合的關(guān)鍵條件。
第二個因素,今天有很多很強大的計算設(shè)備,所以才能夠訓(xùn)練出這樣的模型,同時通過領(lǐng)域里很多學(xué)者的努力,有了大量關(guān)于訓(xùn)練這樣復(fù)雜模型的技巧和算法,所以這使得使用復(fù)雜模型成為可能。按照這個思路來說,其實有三件事:第一,今天有更大的數(shù)據(jù);第二;有強力的計算設(shè)備;第三,有很多有效的訓(xùn)練技巧。
這導(dǎo)致我們可以用高復(fù)雜度的模型。而深度神經(jīng)網(wǎng)絡(luò)恰恰就是一種很便于實現(xiàn)的高復(fù)雜度的模型。所以這么一種理論,好像能告訴我們?yōu)槭裁船F(xiàn)在能用深度神經(jīng)網(wǎng)絡(luò)。為什么它能成功?就是因為復(fù)雜度大。如果從復(fù)雜度解,就沒有辦法說為什么扁平的或者寬的網(wǎng)絡(luò)做不到深度神經(jīng)網(wǎng)絡(luò)的性能?因為事實上把網(wǎng)絡(luò)變寬,它的效率不是那么高,但是它同樣也能起到增加復(fù)雜度的能力。實際上在 1989 年的時候就已經(jīng)有一個理論證明,說神經(jīng)網(wǎng)絡(luò)有萬有逼近能力:只要你用一個隱層,就可以以任意精度逼近任意復(fù)雜度的定義在一個緊集上的連續(xù)函數(shù)。這里面要引用一個說法,神經(jīng)網(wǎng)絡(luò)有萬有逼近能力,可能是有的人會認為這是導(dǎo)致神經(jīng)網(wǎng)絡(luò)為什么這么強大的一個主要原因,其實這是一個誤解。
在機器學(xué)習(xí)里用到的所有模型,它必須具有萬有逼近能力。如果沒有這個能力,根本不可用。其實只要有一個隱層,加無限度的神經(jīng)元進去,它的能力也會變得很強,復(fù)雜度會變得很高。但是這樣的模型無論在應(yīng)用里面怎么試,都不如深度神經(jīng)網(wǎng)絡(luò)好。深度神經(jīng)網(wǎng)絡(luò)里最本質(zhì)的東西到底是什么?今天我們的答案可能是要做表示學(xué)習(xí)的能力。以往我們用機器學(xué)習(xí),首先拿到一個數(shù)據(jù),比如這個數(shù)據(jù)對象是一個圖像,我們就用很多特征把它描述出來,比如說顏色、紋理等等,這一些特征都是人類專家通過手工來設(shè)計的,表達出來之后再去進行學(xué)習(xí)。
而今天我們有了深度學(xué)習(xí)之后,不再需要手工設(shè)計特征,把數(shù)據(jù)從一端扔進去,模型從另外一端出來,中間所有的特征完全通過學(xué)習(xí)自己來解決,這是所謂的特征學(xué)習(xí)或者表示學(xué)習(xí),這和以往的機器學(xué)習(xí)技術(shù)相比是一個很大的進步,不再需要完全依賴人類專家去設(shè)計特征了。
工業(yè)界認為這里面有一個很重要的概念叫做端到端學(xué)習(xí)。其實這一件事情要分兩個方面來看:一個方面當(dāng)把特征學(xué)習(xí)和分類器學(xué)習(xí)聯(lián)合起來考慮,可以達到聯(lián)合優(yōu)化的作用,這是好的方面;但另一方面,這里面發(fā)生什么我們不清楚時,端到端的學(xué)習(xí)不一定真的好,因為可能第一部分往東,第二部分往西,合起來看往東走的更多一些,其實內(nèi)部有一些東西已經(jīng)抵消了。實際上機器學(xué)習(xí)里面早就有端到端學(xué)習(xí),比如說做特征選擇,但這類方法是不是比其他特征選擇的方法要強?不一定,所以真正重要的還是特征學(xué)習(xí)或者表示學(xué)習(xí)。
表示學(xué)習(xí)的關(guān)鍵
表示學(xué)習(xí)的關(guān)鍵是逐層的處理。當(dāng)拿到一個圖像的時候,如果把神經(jīng)網(wǎng)絡(luò)看做很多層的時候,首先在最底層看到的是一些像素的東西,當(dāng)一層一層往上的時候,慢慢的有邊緣,再往上有輪廓等等,在真正的神經(jīng)網(wǎng)絡(luò)模型里不一定有這么清晰的分層,但總體上是在往上不斷做對象的抽象。
而這個特點,我們現(xiàn)在認為是深度學(xué)習(xí)真正成功的關(guān)鍵因素之一,因為扁平神經(jīng)網(wǎng)絡(luò)能做很多深層神經(jīng)網(wǎng)絡(luò)所做的事,但是有一點它做不到:當(dāng)它是扁平的時候,就沒有進行一個深度加工,所以深度的逐層抽象可能很關(guān)鍵。
以前有很多逐層處理的東西,比如說決策樹,它就是逐層處理,這是非常典型的模型。這個已經(jīng)有五六十年的歷史了,但它為什么做不到深度神經(jīng)網(wǎng)絡(luò)這么好呢?
首先它的復(fù)雜度不夠,因為決策樹的深度,如果只考慮離散特征,其最深的深度不會超過特征的個數(shù),所以它的模型復(fù)雜度有上限;第二整個決策樹的學(xué)習(xí)過程中,它內(nèi)部沒有進行特征變化,始終是在一個特征空間里面進行,這可能也是一個問題。
大家如果對高級一點的機器學(xué)習(xí)模型有所了解,可能會問,現(xiàn)在很多 Boosting 模型也是一層一層往下走,為什么它沒有取得深度學(xué)習(xí)的成功?首先復(fù)雜度還不夠。其次,它始終在原始空間里面做事情,所有的這些學(xué)習(xí)器都是在原始特征空間,中間沒有進行任何的特征變換。