首先,以输入特征数为2,样本数为1,层数为2的神经网络举例子(隐藏层1层+输出层1层)
激活函数为sigmoid函数
所以有以下的网络
在这里插入图片描述
一般输入层不算入层数,在这里写为第0层。
第0层有两个输入特征,1个样本数,所以矩阵维度为[2,1]
第1层有4个单元数,所以矩阵维度的第一维为4,第二维为前一层的单元数(即第0层),所以第1层的矩阵维度为[4,2]
第2层有1个单元数,所以矩阵维度的第一维为1,第二维为前一层的单元数(即第1层),所以第2层的矩阵维度为[1,4]
一般一个单元里面有两个计算,一个是线性计算,一个的激活函数
线性计算为 z = W * x + b
激活函数为 a = σ(z)
如果把这两条式子代入神经网络中,
首先把特征数输入第0层,假设有2个特征,1个样本,那么x的维度就是[2,1]
而 W为第一层的参数,所以维度为[4,2]

z[ __, __ ]=W[4,2] * x [2,1] + b[ __ , __]

由矩阵运算可知z的维度应为[4,1],所以b的维度也为[4,1]
z[4, 1 ]=W[4,2] * x [2,1] + b[4,1]
接着经过激活函数a = σ(z),所以a的维度也为[4,1]
接着来到第二层,第一层的输出为a,a则作为第二层的输入,所以有:

z = W * a + b
z[ __, __ ]=W[__,__] * a [4,1] + b[ __ , __]

而第二层的参数W的维度为[1,4],所以:

z[ __, __ ]=W[1,4] * a [4,1] + b[ __ , __]

同理可得z的维度和b的维度

z[ 1, 1]=W[1,4] * a [4,1] + b[1,1]

接着,接着经过激活函数y= σ(z),输出y

那么,可以推广到m个样本
首先把样本输入第0层,假设有2个特征,m个样本,那么x的维度就是[2,m]
而 W为第一层的参数,所以维度为[4,2]

z[ __, __ ]=W[4,2] * x [2,m] + b[ __ , __]

由矩阵运算可知z的维度应为[4,m],所以b的维度也为[4,m]
z[4, m ]=W[4,2] * x [2,m] + b[4,m]
接着经过激活函数a = σ(z),所以a的维度也为[4,m]
接着来到第二层,第一层的输出为a,a则作为第二层的输入,所以有:

z = W * a + b
z[ __, __ ]=W[__,__] * a [4,m] + b[ __ , __]

而第二层的参数W的维度为[1,4],所以:

z[ __, __ ]=W[1,4] * a [4,m] + b[ __ , __]

同理可得z的维度和b的维度

z[ 1, m]=W[1,4] * a [4,m] + b[1,m]

上面为2层神经网络,接着推广到多层网络:
假设n^L 代表第L层的单元数
在这里插入图片描述
那么第L(0层除外)层的w矩阵维度为[n^L ,n^(L-1)]
而第L(0层除外)层的b矩阵维度为[n^L ,m]
m代表样本数
第L(0层除外)层的b矩阵维度也可以为[n^L ,1]
这是因为python有广播机制,他会自动把b复制m份。

Logo

更多推荐