深度学习之检查矩阵的维数

在设计深层网络结构时需要指定每个隐藏层权重矩阵、偏置项的维度,有的时候容易搞混淆,导致运行时产生维度不对的错误,特别是对于隐藏层既深又宽的网络,更容易出错。下面以一个实例来说明怎么确保矩阵维度不出错误。

假设需要拟合的函数为: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矩阵,行数:本层神经元的数量,列数:前一层神经元的数量

b矩阵,行数:该层w矩阵的行数,列数:1

z和a矩阵,行数:该层w矩阵的行数,列数:1

模型训练过程中需要注意的问题,参见 深度学习之偏差与方差 

你可能感兴趣的:(深度学习之检查矩阵的维数)