1. 程式人生 > >介紹一個快速確定神經網路模型中各層矩陣維度的方法

介紹一個快速確定神經網路模型中各層矩陣維度的方法

深度學習在設計神經網路結構時需要指定每個隱藏層權重矩陣、偏置項的維度,有的時候容易搞混淆,導致執行時產生維度不對的錯誤,特別是對於隱藏層既深又寬的網路,更容易出錯。下面以一個例項來說明怎麼簡單快速確定每一層各個矩陣的維度。

假設需要擬合的函式為:y=f(x)=WX+b。

損失函式:J(W,b)

其中 X:輸入特徵,W:權重,b:偏置項

正(前)向傳播的計算公式

a[0]=X,z[i]=w[i]*a[i-1]+b[i] ,a[i]=g[i](z[i])

向量化表示

A[0]=X,Z[i]=W[i]*A[i-1]+b[i] ,A[i]=g[i](Z[i])

反(後)向傳播的計算公式

dz[i]=da[i]*g[i](z[i]),dw[i]=dz[i]*a[i-1]

db[i]=dz[i],da[i-1]=w[i].T*dz[i]

向量化表示

dZ[i]=dA[i]*g[i](Z[i]),dW[i]=1/m*dZ[i]*A[i-1].T

db[i]=1/m*np.sum(dZ[i],axis=1,keepdims=True)

dA[i-1]=W[i].T*dZ[i],W[i]=W[i-1]-α*dJ(W,b)

 

對上述公式的簡要說明

i:第i層(從1開始計數)

X:輸入特徵

g[i]:第i層使用的啟用函式

A[i]:第i層的輸出(也是第i+1層的輸入)

m:樣本數量

dZ[i]:偏導數,dW[i]:偏導數,db[i]:偏導數,dA[i-1]:偏導數,dJ(W,b):偏導數

α:學習率

 

神經網路示例

上圖中每個圓圈表示一個神經元。

n[i]:第i層的神經元數量,i=0時表示輸入層的特徵數目(上圖中有x1,x2兩個特徵),m:樣本數量。

 

計算矩陣的維度

w[i]=[n[i], n[i-1]],維度是:n[i]行,n[i-1]列。從圖中可知行數是本層神經元的數量,列數是前一層神經元的數量。

b[i]=[n[i], 1],維度是:n[i]行,1列

a[i]=z[i]=[n[i], 1],維度是:n[i]行,1列。由前面的正向傳播公式:a[i]=g[i](z[i]),可知a與z的維度是相同的。

a[0]:輸入層,a[i] :第 i+1 層的輸入

 

由上面的規則可知示例神經網路圖中,w[1]是一個3行2列的矩陣,b[1]是3行1列的矩陣,a[1]和z[1]也是3行1列的矩陣,由此類推:w[2]是一個4行3列的矩陣,w[3]是一個2行4列的矩陣,w[4]是一個1行2列的矩陣。

 

簡單總結

對於w矩陣,行數:本層神經元的數量,列數:前一層神經元的數量(第0層即是輸入層特徵的數量)

對於b矩陣,行數:該層w矩陣的行數,列數:1

對於z和a矩陣,行數:該層w矩陣的行數,列數:1

 

在確定了各層矩陣之後,神經網路就設計好了,下一個環節就是設計演算法步驟訓練模型。模型訓練過程中需要根據訓練情況調適模型,使得模型對訓練資料及測試資料的擬合度高、誤差小,後面會寫一篇怎麼調適模型。