神经网络与深度学习学习笔记:简单神经网络的矩阵化

来源:互联网 发布:mac上最好用的vpn 编辑:程序博客网 时间:2024/05/17 22:46

单样本单隐层神经网络

对于上图所示神经网络,最左边的x1,x2,x3为输入层(通常认为是第0层),中间的a[1]1,a[1]2,a[1]3,a[1]4表隐含层(第一层)各节点的输出,最右为输出层(第2层)。在谈及神经网络层数时不考虑输入层,所以这是一个两层的神经网络。

对每一层,都执行类似如下的计算操作:

z[i]a[i]=w[i]a[i1]+b[i]=g(z[i])

此处g(x)为激活函数,常用的激活函数有σ(x)=11+extanh(x)=exexex+ex

隐含层

对于第一层隐含层而言,向量化的计算过程如下:

其中各变量分别为(此处x只有一个输入样本,每个样本具有三个特征):



所以隐含层的矩阵表示为:

注意到此处单样本的隐含层矩阵为一个列向量,可以得出当有n个输入样本时,输出为3*n的矩阵。

输出层

类似地,输出层的计算过程为:

y^=σ(W[2]A[1]+b[2])

各变量分别为:

输出层的矩阵表示为:

矩阵维度

假设在一个神经网络中有若干层,第i层具有n[i]个节点,规定样本的输入层为第0层。
再回顾一下各层的计算式:

z[i]a[i]=w[i]a[i1]+b[i]=g(z[i])

易得各层的矩阵维度分别为:
dim(a[i])dim(w[i])dim(b[i])dim(z[i])=(n[i],1)=(n[i],n[i1])=(n[i],1)=(n[i],1)

m个样本下的神经网络

矩阵维度

当有多个样本输入时,从输入层a[0]开始考虑,此时输入层矩阵变成[a[0]1,a[0]2,...,a[0]m],其中每个a[0]i都是一个列向量,列维度取决于样本的特征个数,即dim(a[0]i)=(n[0],1)。所以输入矩阵的维度为:

dim(A[0])=(n[0],m)

以此类推,可以得到多样本条件下的各矩阵维度:
dim(A[i])dim(W[i])dim(b[i])dim(Z[i])=(n[i],m)=(n[i],n[i1])=(n[i],1)=(n[i],m)

此时再做+b[i]操作时,Python会对其进行广播,b[i]会被扩展成(n[i],m)的矩阵

原创粉丝点击