深層神經網路
深層神經網路
以下是一個四層的三個隱層的神經網路,隱層中的單元數目是553
然後我們用l表示層數,用n[l]表示節點資料或者是單元數量,例如:n[1]=5,表示的就是第一個隱層,單元數等於5
我們對於各個第l層都會用a[l]表示l層中的啟用函式,以後就會遇到a[l]是啟用函式g(z[l]),啟用函式也會用層數l來標註。用W[l]表示在a[l]中計算z[l]值的權重,b[l]也一樣
總結一下符號,輸入特徵用x表示,而x也是第0層的啟用函式,x=a[0]
最後一層的啟用函式a[L]等於y帽
深層網路中的前向傳播
先一個例子來說,在第一層裡需要計算z[1]=w[1]*x+b[1] ,而w[1]和b[1]就是會影響在第一層的啟用單元的引數;然後計算第一層的啟用函式:a[1]=g(z[1]),那麼啟用函式g的指標取決於所在層數。第二層亦是如此。
直到計算到輸出層的時候,這裡是z[4]=w[4]a[z]+b[4],a[4]=g[4](z[4])=y帽。
由於第0層輸入層,x=a[0],我們可以將x替換。
那我們繼續看一下向量化訓練整個訓練集。公式其實都是差不多,只是把它們來寫成列向量疊在一起
現在我們需要將所有的z或者a向量疊起來
像這樣子,a的做法也是如此。最後寫出y帽
核對矩陣的維數
這個神經網路,l=5,也就是除去輸入層以外數下來,總共有5層。那我們如果想實現正向傳播的話。公式為
這裡我們先關注W。在這個神經網路中,第一隱層有三個隱藏單元,也就是n[1]=3
然後我們來看看w、x、b的維數。z是第一個隱層的啟用函式向量。這裡z的維度是3*1,也就是一個三維的向量也可以寫成(n[1],1)維向量;接下來看輸入特徵x,這裡有兩個輸入特徵,所以x的維度是2*1。然後通過公式知道z與x的維度,根據乘法法則可得出w的維度3*2,即(n[1],n[0]),總結下來w的維度就是(n[l],n[l-1]),剩下的幾個也是如此。
然後我們回頭看b[1],在這個神經網路中,b[1]的維度就是(3,1)的向量。要做向量加法,加上這個(3,1)。
一般來說b[l]的維度就是(n[l],1)
當我們做反向傳播的時候,dw的維度應與w的維度一樣,db的維度應與b的維度一樣
由於z[l]等於對應元素的g[l](a[l]),那麼這類網路中z和a的維度應該相等。
當你進行向量化後,z、a都會有一些改變
而當我們反向傳播之後,dz和da的維度是和z、a一樣的。所需要用程式碼實現的各個矩陣的維度,如果你想做深度神經網路的反向傳播,寫程式碼的時候一定要確認所有的矩陣維數前後一致
為什麼使用深層表示
首先我們需要了解深度網路空間在計算什麼。
當我們在建一個人臉識別或是人臉檢測系統,神經網路需要做的就是在你輸入一張臉部照片,我們可以把神經網路第一層當成一個特徵探測器或者邊緣探測器。
在這個例子中,大概會有20個隱藏單元的深度神經網路,那是怎麼針對 這張圖計算的,隱藏單元就是這些圖裡這些小方塊,一個小方塊就是一個隱藏單元,它會去找這個圖片的邊緣方向,那麼這個隱藏單元可能是在找水平向的邊緣在哪裡。我們可以把照片組成邊緣的畫素放在一起看。
然後它可以把被探測到的邊緣組合成面部的不同部分,比如說可能 有一個神經元會去找眼睛的部分,另外還有別的在找鼻子的部分 ,然後把這些部分組合在一起,意思可能要開始檢測人臉的不同部分,最後再把這些部分放在一起,比如鼻子眼睛下巴,就可以識別或是探測不同的人臉。
我們暫時可以把這種神經網路的前幾層,當做探測簡單的函式,比如邊緣,之後 把它們跟後幾層結合在一起。
當你想建立 一個語音識別系統 的時,需要解決的就是如何視覺化語音,比如你輸入一個音訊片段,那麼神經網路的第一層可能就會先去開始試卷探測比較低層次的音訊波形的一些特徵,比如音調是高了還是低了,可以選擇些相對程度比較低的波形特徵,然後把這些波形組成一個單元,就能去探測聲音的基本單元,然後就可以從一個字母到一個單詞到整個句子
搭建深層神經網路塊
有一個層數較少的神經網路,我們先選擇其中一層,從這一層的計算著手。在第l層你有引數W[l]和b[l],正向傳播裡有輸入的啟用函式,輸入的是前一層a[l-1],輸出是a[l]
然後z[l]=w[l]a[l-1]+b[l] a[l]=g[l](z[l])所以這就是你如何從輸入a[l-1]走到輸出的,然後我們就可以把z[l]的值快取起來;然後反向傳播步驟同樣也是第l層的計算,你會需要實現一個函式輸入為da[l],輸出為da[l-1]的函式。
總結起來就是在l層你會有正向函式輸入a[l-1]並且輸出a[l] 為了計算結果 以及輸出到快取的z[l],然後用作反向傳播的反向函式,輸入da[l]輸出da[l-1],你就會得到啟用函式的導數,a[l-1]是會變的,前一層算出的啟用函式導數,在這個裡你需要w[l]和b[l],最後要算dz[l],這個反向函式可計算輸出dw[l]和db[l]
正向傳播步驟
反向傳播的話,我們需要算一系列的反向迭代,就是反向計算梯度,一開始是da[l]的值,然後是da[l-1]的值,一直到da[2]、da[1],每個方塊也會輸出dw[l] db[l]
w和b也會在每一層被更新
反向傳播計算完畢,這是神經網路一個梯度下降迴圈
前向和反向傳播
總結
當你用logistic迴歸做二分分類時,da[l]=,相對於y帽的損失函式的導數,可以得出等於da[l]的這個式子
引數VS超引數
在學習演算法中還有其他引數需要輸入到學習演算法中,比如學習率,它決定引數如何進化;還有梯度下降法迴圈的數量;隱層數L;隱藏單元數;啟用函式。這些都是超引數,這些引數都控制著最後引數W和b的值。