这一次我们来更加详细地了解一下神经网络
神经网络结构以及本文符号约定
神经网络的基本单元是神经元
z=wTx+b
a = g(z)
(z和a的表示会在下面用到)
每个神经元对输入进行线性求和,随后调用激活函数(一个非线性函数)进行输出
而一个神经网络的结构如下图所示
输入部分称为输入层
输出值称为输出层
中间的神经元由于其参数对于训练集不可见,因此称为隐藏层
下面是本文(符合吴恩达深度学习课程)所用的符号
m:数据的个数
n[l]:第l层网络的神经元个数。在上图中n[0]=3, n[1]=4, n[2]=1
W[l]:将第l层各个神经元的wT按行排列得到W[l]矩阵
这个矩阵的大小是(n[l], n[l-1])
b[l]:将第l层各个神经元的b值排成一列
这个矩阵大小为(n[l], 1)
Z[l]:将第l层每个神经元计算出的z值排成一列。对于不同的数据,将这些值再按列排,得到一个(n[i], m)的矩阵。
每个Zij[l]代表第 l 层的第 i 个神经元对于第 j 条数据的z值。
g[l]:第I层神经元的激活函数
A[l]:表示第l层神经网络的输出值。大小为(n[i], m)
每个Aij[l]代表第 l 层的第 i 个神经元对于第 j 条数据的输出。值为Zij[l]*g[l]
特殊的,l为0时A[l]就是输入数据X
接下来我们将通过矩阵乘法的定义理解前向传播反向传播的向量化公式。
前向传播(向量化)
公式:
Z[l]=W[l]A[l-1]+b[l]
A[l]=g[l](Z[l])
说明
Z[l]=W[l]A[l-1]+b[l]
对于每一个Zij[l](第 l 层第 i 个神经元对于第 j 条数据计算的z)
Z i j [ l ] = ∑ k n [ l − 1 ] W i k [ l ] A k j [ l − 1 ] + b i [ l ] Z_{ij}^{[l]} = \sum_{k}^{n^{[l-1]}}W^{[l]}_{ik}A^{[l-1]}_{kj }+b^{[l]}_{i} Zij[l]=k∑n[l−1]Wik[l]Akj[l−1]+bi[l]
在这个公式里Wik[l]是第i个神经元的w值,bi[l]是第i个神经元的b值,而Akj[l-1]则是第j条数据的上一层a值,完全符合定义。
A[l]=g[l](Z[l]) 是显然的
反向传播
利用反向传播求得各个参数的导数:
为了通俗化,下面给出如何通过第l+1层的导数求得第l层的导数
这里所有的d¥代表着 ¥关于损失函数的导数(指代其他意思会有说明)