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


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

假設需要擬合的函數為: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

 

在確定了各層矩陣之后,神經網絡就設計好了,下一個環節就是設計算法步驟訓練模型。模型訓練過程中需要根據訓練情況調適模型,使得模型對訓練數據及測試數據的擬合度高、誤差小,訓練模型時尤其需要注意偏差與方差問題,參看 深度學習模型訓練之偏差與方差

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM