吴恩达深度学习笔记(一)week3 浅层神经网络

浅层神经网络


笔记前言:这一周的课程思路也和上周的课程思路一样,首先是讲单样本的神经网络,接着是多样本的神经网络,本周课程所讲的神经网络模型是单隐层的神经网络。此外课程还讲了关于**函数和随机初始化的相关内容。


前向传播-单样本神经网络的输出

第一层的传播过程如下:
吴恩达深度学习笔记(一)week3 浅层神经网络
第二层的传播过程如下:
吴恩达深度学习笔记(一)week3 浅层神经网络
对其向量化:
x(3,1):3个特征,一个样本,为一个列向量。
W[1](43):根据输入的行维度确定W的列维度,本层神经元的个数确定行维度(任意层W的维度都是以此方法确定)。
b[1](41):根据本层神经元个数的个数确定行维度,列维度始终为1(任意层b的维度都是以此方法确定)
z[1],a[1]的维度都为4,1
W[2](14)
b[2](11)
a[2]为一个标量,也可理解为1,1
:上面关于向量维度的说明是基于传播过程出发的,当然也可以从矩阵乘法去理解

前向传播-多样本神经网络的输出

假设输入样本有m个,多样本的向量化过程如下图所示 ,其过程是对单样本中的输入向量做了“列扩展”,即把每个样本作为一列放入输入矩阵中,由此我们很容易得到W[1],b[1],W[2],b[2]的维度都不变(这一点在上面关于维度的说明已有解释),第一层的输出(这里我们用A[1]表示)的维度变成了4m,每一列即为每个样本产生的输出;第二层的输出(这里我们用A[2]表示)的维度变成了1m,每一列即为每个样本产生的输出。
吴恩达深度学习笔记(一)week3 浅层神经网络
下面是关于m个样本前向传播的for循环形式和向量化形式。
吴恩达深度学习笔记(一)week3 浅层神经网络

反向传播-神经网络的梯度下降

:此部分推导是个难点,查阅相关资料也讲得不多,之后。。。不知是什么原因自己把这块想清楚了,首先把最后推导结果放在下面:
吴恩达深度学习笔记(一)week3 浅层神经网络

参数说明:
特征向量维度:n0
隐层神经元个数:n1
输出神经元个数:n2=1
隐层**函数用g[1]表示,输出层**函数为sigmoid函数
以下运算过程中的矩阵维度均以用下标给出:
FP:
Zn1×m[1]=Wn1×n0[1]Xn0×m+bn1×1[1](1.1)
An1×m[1]=g[1](Z[1])(1.2)
Zn2×m[2]=Wn2×n1[2]An1×m+b1×1[2](1.3)
An2×m[2]=sigmoid(Z[2])(1.4)
BP:
dZ[2]=A[2]Y
dW[2]=1mdZ[2](A[1])T
db[2]=1mnp.sum(dZ[2])
dZ[1]=(W[2])T×dZ[2]×g[1](Z[1])
dW[1]=1mdZ[1]XT
db[1]=1mnp.sum(dZ[1])
其中dZ[2]dW[2]db[2]的推导同单层神经元的推导(只看后两层结构一模一样)
根据前向传播过程和链式求导法则,上面涉及的矩阵求导可参考*,这里用到的公式:
吴恩达深度学习笔记(一)week3 浅层神经网络
dZ[1]=dZ[2]dZ[2]dA[1]g[1](Z[1])=(W[2])T×dZ[2]×g[1](Z[1]) 根据公式(1.3)(1.2)
dW[1]=dZ[1]dZ[1]dW[T]=1mdZ[1]XT 根据公式(1.1 )

**函数

几种常用的**函数

吴恩达深度学习笔记(一)week3 浅层神经网络
sigmoid:a=11+ez 导数a=a(1a)
tanh=a=ezezez+ez导数a=1a2
ReLU线a=max(0,z)
LeakyReLU:a=max(0.01z,z)

**函数的选择

sigmoid函数:除了输出层是个二分类问题,几乎不使用。
tanh函数:tanh函数适用非常优秀,几乎所有的场合。
ReLU线:最常用的默认**函数