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

浅层神经网络


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


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

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

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

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

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

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

参数说明:
特征向量维度: n0 n 0
隐层神经元个数: n1 n 1
输出神经元个数: n2=1 n 2 = 1
隐层激活函数用 g[1] g [ 1 ] 表示,输出层激活函数为 sigmoid s i g m o i d 函数
以下运算过程中的矩阵维度均以用下标给出:
FP:
Z[1]n1×m=W[1]n1×n0Xn0×m+b[1]n1×1(1.1) Z n 1 × m [ 1 ] = W n 1 × n 0 [ 1 ] ⋅ X n 0 × m + b n 1 × 1 [ 1 ] − − − − − − ( 1.1 )
A[1]n1×m=g[1](Z[1])(1.2) A n 1 × m [ 1 ] = g [ 1 ] ( Z [ 1 ] ) − − − − − − − − − − − − ( 1.2 )
Z[2]n2×m=W[2]n2×n1An1×m+b[2]1×1(1.3) Z n 2 × m [ 2 ] = W n 2 × n 1 [ 2 ] ⋅ A n 1 × m + b 1 × 1 [ 2 ] − − − − − − ( 1.3 )
A[2]n2×m=sigmoid(Z[2])(1.4) A n 2 × m [ 2 ] = s i g m o i d ( Z [ 2 ] ) − − − − − − − − − − ( 1.4 )
BP:
dZ[2]=A[2]Y d Z [ 2 ] = A [ 2 ] − Y
dW[2]=1mdZ[2](A[1])T d W [ 2 ] = 1 m d Z [ 2 ] ⋅ ( A [ 1 ] ) T
db[2]=1mnp.sum(dZ[2]) d b [ 2 ] = 1 m n p . s u m ( d Z [ 2 ] )
dZ[1]=(W[2])T×dZ[2]×g[1](Z[1]) d Z [ 1 ] = ( W [ 2 ] ) T × d Z [ 2 ] × g [ 1 ] ′ ( Z [ 1 ] )
dW[1]=1mdZ[1]XT d W [ 1 ] = 1 m d Z [ 1 ] ⋅ X T
db[1]=1mnp.sum(dZ[1]) d b [ 1 ] = 1 m n p . s u m ( d Z [ 1 ] )
其中 dZ[2]dW[2]db[2] d Z [ 2 ] 、 d W [ 2 ] 、 d b [ 2 ] 的推导同单层神经元的推导(只看后两层结构一模一样)
根据前向传播过程和链式求导法则,上面涉及的矩阵求导可参考维基百科,这里用到的公式:
这里写图片描述
dZ[1]=dZ[2]dZ[2]dA[1]g[1](Z[1])=(W[2])T×dZ[2]×g[1](Z[1]) d Z [ 1 ] = d Z [ 2 ] ⋅ d Z [ 2 ] d A [ 1 ] ⋅ g [ 1 ] ′ ( Z [ 1 ] ) = ( W [ 2 ] ) T × d Z [ 2 ] × g [ 1 ] ′ ( Z [ 1 ] ) 根据公式 (1.3)(1.2) ( 1.3 ) ( 1.2 )
dW[1]=dZ[1]dZ[1]dW[T]=1mdZ[1]XT d W [ 1 ] = d Z [ 1 ] ⋅ d Z [ 1 ] d W [ T ] = 1 m d Z [ 1 ] ⋅ X T 根据公式(1.1 )

激活函数

几种常用的激活函数

吴恩达深度学习笔记(一)week3 浅层神经网络_第6张图片
sigmoid:a=11+ez s i g m o i d : a = 1 1 + e − z 导数 a=a(1a) a ′ = a ( 1 − a )
tanh=a=ezezez+ez t a n h = a = e z − e − z e z + e − z 导数 a=1a2 a ′ = 1 − a 2
ReLU线 R e L U ( 修 正 线 性 单 元 ) a=max(0,z) a = max ( 0 , z )
LeakyReLU:a=max(0.01z,z) L e a k y R e L U : a = max ( 0.01 z , z )

激活函数的选择

sigmoid s i g m o i d 函数:除了输出层是个二分类问题,几乎不使用。
tanh t a n h 函数: tanh t a n h 函数适用非常优秀,几乎所有的场合。
ReLU线 R e L U ( 修 正 线 性 单 元 ) :最常用的默认激活函数

你可能感兴趣的:(吴恩达深度学习笔记)