《吴恩达深度学习》01神经网络和深度学习(第3周浅层神经网络)

01. 神经网络和深度学习

第三周 浅层神经网络

3.1 神经网络概览

  1. z [ i ] z^{[i]} z[i]表示第i层

3.2 神经网络表示

  1. 神经网络的各部分名称
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPUabHF6-1585525822800)(./1583882769152.png)]
    输入层,隐藏层,输出层
  2. 在计算神经网络层数时,仅计算隐藏层和输出层,不计算输入层。

3.3 计算神经网络的输出

  1. 隐藏层某个节点示意图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FOr0Jsy-1585525822802)(./1583883209131.png)]
    z 1 [ 1 ] = w 1 [ 1 ] T x + b 1 [ 1 ] z^{[1]}_1 = w^{[1]T}_1x+b^{[1]}_1 z1[1]=w1[1]Tx+b1[1]
    a 1 [ 1 ] = σ ( z 1 [ 1 ] ) a^{[1]}_1 = \sigma(z^{[1]}_1) a1[1]=σ(z1[1])
  2. 向量化计算
    z [ 1 ] = w [ 1 ] T x + b [ 1 ] z^{[1]} = w^{[1]T}x+b^{[1]} z[1]=w[1]Tx+b[1]
    a [ 1 ] = σ ( z [ 1 ] ) a^{[1]} = \sigma(z^{[1]}) a[1]=σ(z[1])

3.4 多个例子中的向量化

  1. a [ i ] ( j ) a^{[i](j)} a[i](j)表示第i层第j个样本
  2. X = [ x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) ] X=[x^{(1)}, x^{(2)}, \cdots, x^{(m)}] X=[x(1),x(2),,x(m)],则向量化的计算公式为:
    z [ 1 ] = w [ 1 ] X + b [ 1 ] z^{[1]} = w^{[1]}X+b^{[1]} z[1]=w[1]X+b[1]
    A [ 1 ] = σ ( z [ 1 ] ) A^{[1]}=\sigma(z^{[1]}) A[1]=σ(z[1])
    z [ 2 ] = w [ 2 ] A [ 1 ] + b [ 2 ] z^{[2]}=w^{[2]}A^{[1]}+b^{[2]} z[2]=w[2]A[1]+b[2]
    A [ 2 ] = σ ( z [ 2 ] ) A^{[2]}=\sigma(z^{[2]}) A[2]=σ(z[2])

3.5 向量化实现的解释

  1. Z [ 1 ] = w [ 1 ] X Z^{[1]}=w^{[1]}X Z[1]=w[1]X的示意图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSebrl0u-1585525822803)(./1583885284339.png)]
  2. 非向量化代码和向量化代码对比总结
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDFQ0GeN-1585525822803)(./1583885376813.png)]

3.6 激活函数

  1. 激活函数 g ( z [ i ] ) g(z^{[i]}) g(z[i])
    (1) t a n h ( z ) = e z − e − z e z + e − z tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} tanh(z)=ez+ezezez几乎总是比sigmoid函数好(除了输出层)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OkWur6R2-1585525822804)(./1583885664379.png)]
    缺点:当 z z z很大或很小时,tanh和sigmoid斜率会很小,导致梯度下降法不好使
    (2) ReLu函数 m a x ( 0 , z ) max(0,z) max(0,z)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbLKXrM5-1585525822804)(./1583885832367.png)]
    缺点:当 z z z为负数时,导数为0 → \rightarrow 带有泄露的ReLu
  2. 总结对比
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6USwNgW-1585525822805)(./1583886008423.png)]

3.7 为什么需要非线性激活函数

  1. 如果是线性激活函数(或称为恒等激活函数),则输出值为输入值的线性组合。
  2. 只有在压缩的相关应用中会在隐藏层使用线性激活函数。

3.8 激活函数的导数

  1. sigmoid函数
    d g ( z ) d z = g ( z ) ( 1 − g ( z ) ) \frac{d g(z)}{dz}=g(z)(1-g(z)) dzdg(z)=g(z)(1g(z))
    优势:如果已经计算出了函数值,即可快速得到导数值
  2. tanh函数
    d g ( z ) d z = 1 − ( g ( z ) ) 2 \frac{d g(z)}{dz}=1-(g(z))^2 dzdg(z)=1(g(z))2
    优势:如果已经计算出了函数值,即可快速得到导数值
  3. ReLU函数
    d g ( z ) d z = 0 , z < 0 \frac{d g(z)}{dz}=0, z<0 dzdg(z)=0,z<0
    d g ( z ) d z = 1 , z ≥ 0 \frac{d g(z)}{dz}=1, z\geq0 dzdg(z)=1,z0 z = 0 z=0 z=0处自行定义)
  4. 带有泄露的ReLU函数( m a x ( 0.01 z , z ) max(0.01z,z) max(0.01z,z)
    d g ( z ) d z = 0.01 , z < 0 \frac{d g(z)}{dz}=0.01, z<0 dzdg(z)=0.01,z<0
    d g ( z ) d z = 1 , z ≥ 0 \frac{d g(z)}{dz}=1, z\geq0 dzdg(z)=1,z0 z = 0 z=0 z=0处自行定义)

3.9 神经网络的梯度下降法

  1. 正向传播
    z [ 1 ] = w [ 1 ] X + b [ 1 ] z^{[1]}=w^{[1]}X+b^{[1]} z[1]=w[1]X+b[1]
    A [ 1 ] = g [ 1 ] ( z [ 1 ] ) A^{[1]}=g^{[1]}(z^{[1]}) A[1]=g[1](z[1])
    $z^{[2]} = $
  2. 反向传播
    d z [ 2 ] = A [ 2 ] − Y dz^{[2]}=A^{[2]}-Y dz[2]=A[2]Y
    d w [ 2 ] = 1 m d z [ 2 ] A [ 1 ] T dw^{[2]}=\frac{1}{m}dz^{[2]}A^{[1]T} dw[2]=m1dz[2]A[1]T
    d b [ 2 ] = 1 m n p . s u m ( d z [ 2 ] , a x i s = 1 , k e e p d i m s = T r u e ) db^{[2]}=\frac{1}{m}np.sum(dz^{[2]}, axis=1, keepdims =True) db[2]=m1np.sum(dz[2],axis=1,keepdims=True) (最后一项为保证输出维度为(n,1),如果没有最后一项,则输出为(n,))
    d z [ 1 ] = w [ 2 ] T d z [ 2 ] ∗ g [ 1 ] ′ ( z [ 1 ] ) dz^{[1]}=w^{[2]T}dz^{[2]}*g^{[1]'}(z^{[1]}) dz[1]=w[2]Tdz[2]g[1](z[1])
    d w [ 1 ] = 1 m d z [ 1 ] X T dw^{[1]}=\frac{1}{m}dz^{[1]}X^T dw[1]=m1dz[1]XT
    d b [ 1 ] = 1 m n p . s u m ( d z [ 1 ] , a x i s = 1 , k e e p d i m s = T r u e ) db^{[1]}=\frac{1}{m}np.sum(dz^{[1]}, axis=1, keepdims =True) db[1]=m1np.sum(dz[1],axis=1,keepdims=True)

3.11 随机初始化

  1. 若零初始化,则意味着节点完全相同,且对输出单元影响完全一样,则更新后,隐藏单元仍然相同,这样的隐藏单元没有意义。
  2. 通常意义下的初始化:
    w [ 1 ] = n p . r a n d o m . r a n d n ( ( 2 , 2 ) ) ∗ 0.01 w^{[1]}=np.random.randn((2,2))*0.01 w[1]=np.random.randn((2,2))0.01
    b [ 1 ] = n p . z e r o s ( ( 2 , 1 ) ) b^{[1]}=np.zeros((2,1)) b[1]=np.zeros((2,1))
  3. 常数需要设置较小,因为若是sigmoid或tanh函数,则太大的时候会梯度小,收敛慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值