深度學習DeepLearning.ai系列課程學習總結:7. 深層神經網路理論學習

WangZhe0912發表於2017-12-03

轉載過程中,圖片丟失,程式碼顯示錯亂。

為了更好的學習內容,請訪問原創版本:

http://www.missshi.cn/api/view/blog/59a6ad67e519f50d040000e6

Ps:初次訪問由於js檔案較大,請耐心等候(8s左右)


在之前的課程中,我們學習了淺層神經網路的基本原理。

接下來,我們會對淺層神經網路進行擴充套件,來了解深層神經網路的基本原理。

 

深層神經網路簡介

什麼是深層神經網路呢?

之前我們已經學習了Logistic迴歸和包含一個隱藏層的神經網路了。

二者結構分別如下:

而一個包含兩個隱藏層的神經網路結構如下:

對於一個包含五個隱藏層的神經網路結構如下:

而什麼是深層神經網路呢?深層神經網路主要是指的包含的隱藏層的深度。

近些年的研究發現,對於一些場景,我們使用淺層的神經網路無法很好的擬合。

而隨著神經網路的層數越多,則可以擬合的場景越複雜。

實際上,在利用神經網路解決一些問題時,我們首先需要預先準確的判斷神經網路所需要的深度。

在接下來的課程中,我們使用[l]上標來表示其所在第l層神經網路。

即n[l]表示第l層神經元的數目。

a[l]表示第l層啟用函式的輸出值。

W[l]表示第l層的權重係數。

 

深層神經網路的前向傳播

接下來,我們來看一下神經神經網路中的前向傳播。

假設一個神經網路的結構如下:

對於一個訓練樣本x,首先需要計算第一層的輸出:

接下來,我們計算一下第二層的輸出:

後面的幾層計算方法與第二層是類似的,這裡就不一一描述了。

總結一下規律,我們可以發現:

ps:我們可以把x看作是a[0].

接下來,我們可以使用向量化的方法來訓練整個訓練集:

 

核對矩陣維數

在我們編寫我們的神經網路程式碼的過程中,一個減少Bug的方法是認真檢查我們網路中每一層的維度是否正確。

通常,可以會由於網路維度不正確而引起一些問題。

接下來,我們來了解一下如何檢查深度網路中矩陣的維度。

以下圖這個5層的神經網路為例:

從上圖可以看出:

接下來,我們來看一下z,w和x的維度:

以第一個隱藏層為例:

其中,z[1]的維度為(3,1)。x的維度是(2,1)。

此時,W[1]的維度應該是(3,2),而b[1]的維度應該是(3,1)。

總結一下規律:

W[1]的維度應該是(n[1], n[0]),b[1]的維度應該是(n[1],1)

 

W[2]的維度應該是(n[2], n[1]),b[2]的維度應該是(n[2],1)

即:W[l]的維度應該是(n[l], n[l-1]),b[l]的維度應該是(n[l],1)

此外,dW和W的維度應該相同,同理db和b的維度應該一致,a和z的維度相同。

 

那麼,對於向量化的實現後,這些變數的維度又是什麼樣呢?

首先,對於W, b, dW和db而言,向量化不會影響其維度。

但是對於Z, A而言,它們的維度是會發生變化的。

具體來看一下:

其中,Z[l]是m個樣本的z[l]疊加到一起產生的。

所以,Z[l]的維度不再是(n[l],1),而是(n[l],m)

對於A,同理不再是(n[l],1),而是(n[l],m)


為什麼使用深層網路表示

我們都知道,深度學習可以用於解決一些複雜問題。

尤其是當問題相對複雜時,需要的網路深度通常越深。

那麼為什麼需要比較深的網路才能解決一些複雜問題呢?

首先,我們來了解一些這些深層網路的作用分別是什麼:

以一個人臉識別的系統為例,此時,深層網路中的第一層通常的作為可以認為是一個特徵探測器或稱之為邊緣探測器。

後續的神經網路層可能會是將這些邊緣特徵進行組合,得到面部的不同部分,例如如下形式:

最後,再將這些面部不同部分組合起來,就可以用於識別或探測不同的人臉啦!

通過,對於邊緣(特徵)探測器而言,通過是從一個較小的區域進行分析得到的。

而在後續一層層組合後,對於面部的識別,則通常針對的是一個更大更復雜的區域。

這種從簡單特徵提取,再一步步到複雜特徵組合的過程,不僅僅是應用於人臉識別領域,而是可以應用於大部分領域。

例如一個語音識別的系統,需要解決的問題是如何更好的理解語音訊號。

此時,通常神經網路的前幾層主要是試著去試探簡單的音訊特徵,例如音調、噪聲等等。

後續通過將這些簡單特徵進行組合,僅可以得到一些相對高階的特徵,例如音位等。

再然後,繼續組合將能得到一些單詞資訊,最終將會得到一些完整的句子等資訊。

所以,對於深層學習而言,通常前面幾層用於學習一些簡單特徵,隨著深層的增多,不斷的對簡單特徵進行組合,最終得到一些高階特徵。


搭建深層神經網路塊

接下來,我們以一個神經網路為例,來分析其計算方式:

我們以其中一層(第l層)為例進行分析:

在該層中,時第l層的相關引數。

而該層的輸入為,輸出為.

其中,且、

此時,我們可以將作為快取值進行保留,因為它將對於後續的反向傳播計算非常有用。

下面,我們來看一下第l層的反向傳播計算。

其輸入為以及,輸出為

總結一下,第l層的結構簡圖如下:


而對於完整的神經網路而言,其前向傳播、反向傳播的完整流程圖基本樣式如下:

 

前向和反向傳播

在上一節中,我們瞭解了神經網路中基本的計算塊結構。

在接下來的內容中,我們將會詳細瞭解每個計算塊內部的計算過程。

首先來看前向傳播:

輸入為,輸出為,同時快取為

具體計算公式和我們之間講解過的公式相同:

下面我們來繼續看下反向傳播:

輸入為,輸出為

其中,計算公式如下:

在這個過程中,我們忽略了對求導過程中的證明,如果感興趣的同學大家可以自行進行證明。


引數與超引數

想要使你的神經網路有一個較好的效能,那麼恰當的選擇相關的引數/超引數是一個很重要的工作。

那麼什麼是引數?而什麼又是超引數呢?

其中,我們通常認為它們是引數,即我們在訓練過程中需要不斷學習的值。

當然,在整個訓練網路中,我們還用到了一些其他的引數,例如學習速率,迭代次數甚至是隱藏層數目,神經元數量,啟用函式型別等等。

這一系列需要我們設定的引數我們統稱其為超引數。

這些超引數將會在某種程度上影響我們最終得到的W和b。

目前來看,如何選擇超引數通常沒有一個永遠正確的準則,而是需要我們通過不斷的嘗試進行試驗,從而找到相對較好的超引數。

當然,在後續的課程中,我們也會對一些超引數選擇的經驗進行一些講解。

但是,實際應用中,我們還是會有大量的工作是用於重複試驗來選擇合適的超引數,目前來看這個過程還是必須的。 


深層網路與大腦

經常有人將深度學習與人類大腦的思維方式進行類比,那麼深度學習和大腦的思維方式究竟有什麼關聯嗎?

但是,我們其實認為二者的關聯其實並不大!

主要原因是人類大腦實在是太複雜了,即使是神經科學家,目前也無法真正大腦中的神經元的工作原理究竟是什麼樣的。



更多更詳細的內容,請訪問原創網站:

http://www.missshi.cn/api/view/blog/59a6ad67e519f50d040000e6

Ps:初次訪問由於js檔案較大,請耐心等候(8s左右)


相關文章