1. 程式人生 > >吳恩達深度學習筆記(24)-為什麼要使用深度神經網路?

吳恩達深度學習筆記(24)-為什麼要使用深度神經網路?

為什麼使用深層表示?(Why deep representations?)

我們都知道深度神經網路能解決好多問題,其實並不需要很大的神經網路,但是得有深度,得有比較多的隱藏層,這是為什麼呢?

我們一起來看幾個例子來幫助理解,為什麼深度神經網路會很好用。

首先,深度網路在計算什麼?

圖片描述(最多50字)

如果你在建一個人臉識別或是人臉檢測系統,深度神經網路所做的事就是,當你輸入一張臉部的照片,然後你可以把深度神經網路的第一層,當成一個特徵探測器或者邊緣探測器。

在這個例子裡,我會建一個大概有20個隱藏單元的深度神經網路,是怎麼針對這張圖計算的。隱藏單元就是這些圖裡這些小方塊(第一張大圖),舉個例子,這個小方塊(第一行第一列)就是一個隱藏單元,它會去找這張照片裡“|”邊緣的方向。那麼這個隱藏單元(第四行第四列),可能是在找(“—”)水平向的邊緣在哪裡。

之後的課程裡,我們會講專門做這種識別的卷積神經網路,到時候會細講,為什麼小單元是這麼表示的?

你可以先把神經網路的第一層當作看圖,然後去找這張照片的各個邊緣。

我們可以把照片裡組成邊緣的畫素們放在一起看,然後它可以把被探測到的邊緣組合成面部的不同部分(第二張大圖)。

比如說,可能有一個神經元會去找眼睛的部分,另外還有別的在找鼻子的部分,然後把這許多的邊緣結合在一起,就可以開始檢測人臉的不同部分。最後再把這些部分放在一起,比如鼻子眼睛下巴,就可以識別或是探測不同的人臉(第三張大圖)

你可以直覺上把這種神經網路的前幾層當作探測簡單的函式,比如邊緣,之後把它們跟後幾層結合在一起,那麼總體上就能學習更多複雜的函式。

這些圖的意義,我們在學習卷積神經網路的時候再深入瞭解。還有一個技術性的細節需要理解的是,邊緣探測器其實相對來說都是針對照片中非常小塊的面積。就像這塊(第一行第一列),都是很小的區域。面部探測器就會針對於大一些的區域,但是主要的概念是,一般你會從比較小的細節入手,比如邊緣,然後再一步步到更大更復雜的區域,比如一隻眼睛或是一個鼻子,再把眼睛鼻子裝一塊組成更復雜的部分。

這種從簡單到複雜的金字塔狀表示方法或者組成方法,也可以應用在影象或者人臉識別以外的其他資料上。
圖片描述(最多50字)
比如當你想要建一個語音識別系統的時候,需要解決的就是如何視覺化語音,比如你輸入一個音訊片段,那麼神經網路的第一層可能就會去先開始試著探測比較低層次的音訊波形的一些特徵,比如音調是變高了還是低了,分辨白噪音,噝噝噝的聲音,或者音調,可以選擇這些相對程度比較低的波形特徵,然後把這些波形組合在一起就能去探測聲音的基本單元。

在語言學中有個概念叫做音位,比如說單詞ca,c的發音,“嗑”就是一個音位,a的發音“啊”是個音位,t的發音“特”也是個音位,有了基本的聲音單元以後,組合起來,你就能識別音訊當中的單詞,單詞再組合起來就能識別片語,再到完整的句子。

圖片描述(最多50字)

所以深度神經網路的這許多隱藏層中,較早的前幾層能學習一些低層次的簡單特徵,等到後幾層,就能把簡單的特徵結合起來,去探測更加複雜的東西。

比如你錄在音訊裡的單詞、片語或是句子,然後就能執行語音識別了。

同時我們所計算的之前的幾層,也就是相對簡單的輸入函式,比如影象單元的邊緣什麼的。到網路中的深層時,你實際上就能做很多複雜的事,比如探測面部或是探測單詞、短語或是句子。

有些人喜歡把深度神經網路和人類大腦做類比,這些神經科學家覺得人的大腦也是先探測簡單的東西,比如你眼睛看得到的邊緣,然後組合起來才能探測複雜的物體,比如臉。

這種深度學習和人類大腦的比較,有時候比較危險。

但是不可否認的是,我們對大腦運作機制的認識很有價值,有可能大腦就是先從簡單的東西,比如邊緣著手,再組合成一個完整的複雜物體,這類簡單到複雜的過程,同樣也是其他一些深度學習的靈感來源,之後的視訊我們也會繼續聊聊人類或是生物學理解的大腦。

Small:隱藏單元的數量相對較少

Deep:隱藏層數目比較多

深層的網路隱藏單元數量相對較少,隱藏層數目較多,如果淺層的網路想要達到同樣的計算結果則需要指數級增長的單元數量才能達到。

另外一個,關於神經網路為何有效的理論,來源於電路理論,它和你能夠用電路元件計算哪些函式有著分不開的聯絡。

根據不同的基本邏輯閘,譬如與門、或門、非門。在非正式的情況下,這些函式都可以用相對較小,但很深的神經網路來計算,小在這裡的意思是隱藏單元的數量相對比較小,但是如果你用淺一些的神經網路計算同樣的函式,也就是說在我們不能用很多隱藏層時,你會需要成指數增長的單元數量才能達到同樣的計算結果。

圖片描述(最多50字)
我再來舉個例子,用沒那麼正式的語言介紹這個概念。

假設你想要對輸入特徵計算異或或是奇偶性,你可以算x_1 XORx_2 XORx_3 XOR……x_n,假設你有n或者n_x個特徵,如果你畫一個異或的樹圖,先要計算x_1,x_2的異或,然後是x_3和x_4。

技術上來說如果你只用或門,還有非門的話,你可能會需要幾層才能計算異或函式,但是用相對小的電路,你應該就可以計算異或了。然後你可以繼續建這樣的一個異或樹圖(上圖左),那麼你最後會得到這樣的電路來輸出結果y,^y=y,也就是輸入特徵的異或,或是奇偶性,要計算異或關係。

這種樹圖對應網路的深度應該是O(log(n)),那麼節點的數量和電路部件,或是門的數量並不會很大,你也不需要太多門去計算異或。

但是如果你不能使用多隱層的神經網路的話,在這個例子中隱層數為O(log(n)),比如你被迫只能用單隱藏層來計算的話,這裡全部都指向從這些隱藏單元到後面這裡,再輸出y,那麼要計算奇偶性,或者異或關係函式就需要這一隱層(上圖右方框部分)的單元數呈指數增長才行,因為本質上來說你需要列舉耗盡2n種可能的配置,或是2n種輸入位元的配置。異或運算的最終結果是1或0,那麼你最終就會需要一個隱藏層,其中單元數目隨輸入位元指數上升。精確的說應該是2(n-1)個隱藏單元數,也就是O(2n)。

希望這能讓你有點概念,意識到有很多數學函式用深度網路計算比淺網路要容易得多,我個人倒是認為這種電路理論,對訓練直覺思維沒那麼有用,但這個結果人們還是經常提到的,用來解釋為什麼需要更深層的網路。

除了這些原因,說實話,我認為“深度學習”這個名字挺唬人的,這些概念以前都統稱為有很多隱藏層的神經網路,但是深度學習聽起來多高大上,太深奧了,對麼?

這個詞流傳出去以後,這是神經網路的重新包裝或是多隱藏層神經網路的重新包裝,激發了大眾的想象力。拋開這些公關概念重新包裝不談,深度網路確實效果不錯,有時候人們還是會按照字面意思鑽牛角尖,非要用很多隱層。但是當我開始解決一個新問題時,我通常會從logistic迴歸開始,再試試一到兩個隱層,把隱藏層數量當作引數、超引數一樣去除錯,這樣去找比較合適的深度。但是近幾年以來,有一些人會趨向於使用非常非常深邃的神經網路,比如好幾打的層數,某些問題中只有這種網路才是最佳模型。

下一節就可以講深度網路的反向傳播的方法與內容,敬請期待~