深度学习(吴恩达)第二课——第三周浅层神经网络

本文详细解析了神经网络中单样本和多样本的前向传播公式,涉及权重矩阵W、偏置项b的形状,以及激活函数、梯度下降和参数更新过程。重点介绍了如何通过链式法则计算梯度并进行反向传播,包括δ值的计算和参数W、b的梯度更新。同时讨论了随机初始化的必要性和技巧,如吴恩达老师的初始化建议。
摘要由CSDN通过智能技术生成

向量化实现的解释

首先要把几个符号的上下标搞清楚

在这里插入图片描述
在这里插入图片描述

在下面这个前向传播的推导中

在这里插入图片描述
关键点如下:

  1. 单样本的推导公式是这个
    在这里插入图片描述
    i代表第i个样本,1代表第一层。
    W的shape是[第1层的神经元个数,和第0层的神经元个数];b的shape是[第1层的神经元个数,1];
  2. 多样本的推导是这个
    将各个样本按照列向量堆叠
    在这里插入图片描述
    1代表第1层隐藏层
    在多样本中,X的shape是[样本的特征数(输入层的神经元个数), 样本数]

激活函数

激活函数的导数

梯度下降

参数

在这里插入图片描述
n x = n [ 0 ] 代 表 第 0 层 ( 输 入 层 ) 的 神 经 元 个 数 n_x=n^{[0]}代表第0层(输入层)的神经元个数 nx=n[0]0
n [ 1 ] 代 表 第 1 层 的 神 经 元 个 数 n^{[1]} 代表第1层的神经元个数 n[1]1
W [ 1 ] W^{[1]} W[1]的shape是 ( n [ 1 ] (n^{[1]} (n[1], n [ 0 ] ) n^{[0]}) n[0]), 即:(第1层的神经元个数, 上一层(0层)的神经元个数)
b [ 1 ] b^{[1]} b[1]的shape是 ( n [ 1 ] (n^{[1]} (n[1], 1 ) 1) 1), 即:(第1层的神经元个数, 1)
依次类推其他层的W,b的意思和shape

损失函数

损失函数J是一个关于网络参数W,b 的函数。整体来说可以这么去求:
在这里插入图片描述
等号右边是算所有样本的y_true和y_pred的误差(mse或者是mae等等)

梯度下降

在这里插入图片描述
整体是做一个循环,就是收敛时循环结束
在循环内
①计算所有样本的y_pred。(就是课程第三节提到的计算神经网络的输出)
在这里插入图片描述
②计算每一层网络参数( W [ 1 ] W^{[1]} W[1] b [ 1 ] b^{[1]} b[1], W [ 2 ] W^{[2]} W[2], b [ 2 ] b^{[2]} b[2] …)的梯度

d W [ 1 ] = d J d W [ 1 ] dW^{[1]} = \frac{dJ}{dW^{[1]}} dW[1]=dW[1]dJ d b [ 1 ] = d J d b [ 1 ] db^{[1]} = \frac{dJ}{db^{[1]}} db[1]=db[1]dJ … … …and so on

③④更新W,b了

总结一下正向传播和反向传播的公式

前向传播

z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] z^{[l]} = W^{[l]} ·a^{[l-1]}+b^{[l]} z[l]=W[l]a[l1]+b[l]
a [ l ] = g [ l ] ( z [ l ] ) a^{[l]} = g^{[l]}(z^{[l]}) a[l]=g[l](z[l])

反向传播

d z [ l ] = d a [ l ] ∗ g [ l ] ‘ ( z [ l ] ) = W [ l + 1 ] ⋅ d z [ l + 1 ] ∗ g [ l ] ‘ ( z [ l ] ) d_z^{[l]} =d_a^{[l]}*g^{[l]}`(z^{[l]}) =W^{[l+1]}·d_z^{[l+1]}*g^{[l]}`(z^{[l]}) dz[l]=da[l]g[l](z[l])=W[l+1]dz[l+1]g[l](z[l])

d W [ l ] = d z [ l ] ⋅ a [ l − 1 ] d_W^{[l]}=d_z^{[l]}·a^{[l-1]} dW[l]=dz[l]a[l1]

d b [ l ] = d z [ l ] d_b^{[l]} = d_z^{[l]} db[l]=dz[l]

d a [ l − 1 ] = W [ l ] ⋅ d z [ l ] d_a^{[l-1]}=W^{[l]}·d_z^{[l]} da[l1]=W[l]dz[l]

反向传播这四个主要公式的推导

  1. 知道 δ [ l ] = d Z [ l ] = ∂ J ∂ z [ l ] \delta^{[l]} = d_Z^{[l]}=\frac{\partial J}{\partial z^{[l]}} δ[l]=dZ[l]=z[l]J ; δ j [ l ] \delta_j^{[l]} δj[l] = “error” of node j in layer l
  2. 公式①的推导通过如下公式

d z [ l ] = ∂ J ∂ a [ l ] ∂ a [ l ] ∂ z [ l ] d_z^{[l]}=\frac{\partial J}{\partial a^{[l]}}\frac{\partial a^{[l]}}{\partial z^{[l]}} dz[l]=a[l]Jz[l]a[l](然后两个分式分别求解即可)
a [ l ] = g [ l ] ( z [ l ] ) a^{[l]} = g^{[l]}(z^{[l]}) a[l]=g[l](z[l])

  1. 公式②③的推导要借助下面的公式

d W [ l ] = ∂ J ∂ z [ l ] ∂ z [ l ] ∂ W [ l ] d_W^{[l]}=\frac{\partial J}{\partial z^{[l]}}\frac{\partial z^{[l]}}{\partial W^{[l]}} dW[l]=z[l]JW[l]z[l]
d b [ l ] = ∂ J ∂ z [ l ] ∂ z [ l ] ∂ b [ l ] d_b^{[l]}=\frac{\partial J}{\partial z^{[l]}}\frac{\partial z^{[l]}}{\partial b^{[l]}} db[l]=z[l]Jb[l]z[l]
(然后两个分式分别求解即可)
z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] z^{[l]} = W^{[l]} ·a^{[l-1]}+b^{[l]} z[l]=W[l]a[l1]+b[l](然后利用求偏导数的原理,求对W的偏导即可)

  1. 公式④的推导要借助下面的公式

d a [ l − 1 ] = ∂ J ∂ z [ l ] ∂ z [ l ] ∂ a [ l − 1 ] d_a^{[l-1]}=\frac{\partial J}{\partial z^{[l]}}\frac{\partial z^{[l]}}{\partial a^{[l-1]}} da[l1]=z[l]Ja[l1]z[l]
(然后两个分式分别求解即可)
z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] z^{[l]} = W^{[l]} ·a^{[l-1]}+b^{[l]} z[l]=W[l]a[l1]+b[l](然后利用求偏导数的原理,求对W的偏导即可)

注意

  1. ·这个是矩阵乘法,这个是元素乘法,即AB中,A和B的维度一致,对应元素相乘、
  2. 在上面的公式里面,我没有关注维度是否一致,可以去看吴恩达第二课的3.10关于维度一致的讲解

随机初始化

为什么将W初始化为0不合理

在这里插入图片描述

如果这样初始化这个神经网络,那么这两个隐含单元就会完全一样,因此他们完全对称,也就意味着计算同样的函数,并且肯定的是最终经过每次训练的迭代,这两个隐含单元仍然是同一个函数。因此所有神经元都是做的同样的计算,就没有意义了。

相反,如果W是随机初始化的,那么b初始化为0不会导致神经元依然做相同的计算,因为W不同,不同神经元的计算就不同了。

随机初始化

吴恩达老师在这里说了一种随机初始化的方法。
在这里插入图片描述
然后老师强调了为什么要用到0.01。
在这里插入图片描述
相当于是如果W很大,那么函数值就很难落在sigmoid的那个上升区,就基本是落在那个平缓区,所以训练如果在那个区域的话,很难收敛或者说学习得很慢。

无论如何,初始化参数一般都很小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值