【DL-吴恩达-神经网络与深度学习-03&04】浅层神经网络与深层神经网络

浅层神经网络

神经网络

神经元
神经元:线性运算+非线性运算
在这里插入图片描述
神经网络的表示

  • 神经网络及符号定义
    • 隐藏层、输出层计入层数,输入层不计入层数,下图的神经网称为两层神经网络或单隐层神经网络
    • 上标方括号内数字表示所在的层数,上标圆括号表示数据,下标表示
      在这里插入图片描述

前向计算

  • 单个样本(隐藏层)

    • 分量形式, x = [ x 1 , x 2 , x 3 ] T x=[x_1,x_2,x_3]^T x=[x1,x2,x3]T
    • 向量形式,
      , ,\quad ,
      z [ 1 ] = W [ 1 ] x + b [ 1 ] , a [ 1 ] = σ ( z [ 1 ] ) z^{[1]}=W^{[1]}x+b^{[1]},\quad a^{[1]}=\sigma(z^{[1]}) z[1]=W[1]x+b[1],a[1]=σ(z[1])
  • m m m个样本(隐藏层和输出层)

    • 分量形式
    • 向量形式

反向传播
在这里插入图片描述

  • 单个样本
    根据之前逻辑回归模型中梯度下降的推导,容易写出,
    d z [ 2 ] = a [ 2 ] − y d W [ 2 ] = d z [ 2 ] a [ 1 ] T d b [ 2 ] = d z [ 2 ] \begin{aligned} &dz^{[2]}=a^{[2]}-y\\ &dW^{[2]}=dz^{[2]}a^{[1]T}\\ &db^{[2]}=dz^{[2]} \end{aligned} dz[2]=a[2]ydW[2]=dz[2]a[1]Tdb[2]=dz[2]
    对于隐藏层,
    d z [ 1 ] = d z [ 2 ] ∂ z [ 2 ] ∂ a [ 1 ] ∂ a [ 1 ] ∂ z [ 1 ] = W [ 2 ] T d z [ 2 ] ∗ g [ 1 ] ′ ( z [ 1 ] ) d W [ 1 ] = d z [ 1 ] x T d b [ 1 ] = d z [ 1 ] \begin{aligned} &dz^{[1]}=dz^{[2]}\frac{\partial z^{[2]}}{\partial a^{[1]}}\frac{\partial a^{[1]}}{\partial z^{[1]}}=W^{[2]T}dz^{[2]}*g^{[1]'}(z^{[1]})\\ \\ &dW^{[1]}=dz^{[1]}x^T\\ &db^{[1]}=dz^{[1]} \end{aligned} dz[1]=dz[2]a[1]z[2]z[1]a[1]=W[2]Tdz[2]g[1](z[1])dW[1]=dz[1]xTdb[1]=dz[1]

  • 多个样本,向量化
    在这里插入图片描述

随机初始化

权重不可初始化为0

  • 对于逻辑回归,把权重初始化为0当然也是可以的。
  • 对于一个神经网络,如果你把权重或者参数都初始化为0,那么梯度下降将不会起作用。
    在这里插入图片描述
    如果参数初始化为0,对任何样本,总是有 a 1 [ 1 ] = a 1 [ 1 ] a_1^{[1]}=a_1^{[1]} a1[1]=a1[1],这两个激活单元就会一样,因为两个隐含单元计算同样的函数,这会导致,当做反向传播计算时, d z 1 [ 1 ] = d z 1 [ 2 ] dz_1^{[1]}=dz_1^{[2]} dz1[1]=dz1[2]。一次迭代后同样的表达式结果仍然是相同的,即隐含单元仍是对称的,不管训练网络多长时间,隐含单元仍然计算的是同样的函数,因此这种情况下超过1个隐含单元也没什么意义,因为他们计算同样的东西。

随机初始化权重
在这里插入图片描述

  • b b b没有对称的问题,可以初始化为0
  • 乘上一个很小的常数0.01(或其他一个较小的数)将参数初始化为很小的随机数:如果使用tanh或Sigmoid函数,当 W W W很大时, z z z就会很大,这种情况可能会停在tanh/Sigmoid函数的平坦地方(梯度很小)。
激活函数

几种激活函数
1. Sigmoid函数
g ( z ) = σ ( z ) = 1 1 − e − z g(z)=\sigma(z)=\frac{1}{1-e^{-z}} g(z)=σ(z)=1ez1

在这里插入图片描述

  • 导数
    g ′ ( z ) = ∂ ∂ z g ( z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=\frac{\partial}{\partial z}g(z)=g(z)(1-g(z)) g(z)=zg(z)=g(z)(1g(z))
    z = 10 z=10 z=10时, g ( z ) ≈ 1 g(z)\approx1 g(z)1 g ′ ( z ) ≈ 0 g'(z)\approx0 g(z)0;当 z = − 10 z=-10 z=10时, g ( z ) ≈ 0 g(z)\approx0 g(z)0 g ′ ( z ) ≈ 0 g'(z)\approx0 g(z)0;当 z = 0 z=0 z=0时, g ( z ) = 1 2 g(z)=\frac{1}{2} g(z)=21 g ′ ( z ) = 1 4 g'(z)=\frac{1}{4} g(z)=41
  • 除了二分类场景,现在几乎不用Sigmoid函数
  • 缺点:当 z z z很大或很小时,导数趋于0,梯度下降效率低

2. tanh函数
g ( z ) = t a n h ( z ) = e z − e − z e z − e − z g(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z-e^{-z}} g(z)=tanh(z)=ezezezez

在这里插入图片描述

  • 导数
    g ′ ( z ) = 1 − g ( z ) 2 g'(z)=1-g(z)^2 g(z)=1g(z)2
    g ′ ( z ) = ∂ ∂ z g ( z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=\frac{\partial}{\partial z}g(z)=g(z)(1-g(z)) g(z)=zg(z)=g(z)(1g(z))
    z = 10 z=10 z=10时, g ( z ) ≈ 1 g(z)\approx1 g(z)1 g ′ ( z ) ≈ 0 g'(z)\approx0 g(z)0;当 z = − 10 z=-10 z=10时, g ( z ) ≈ − 1 g(z)\approx-1 g(z)1 g ′ ( z ) ≈ 0 g'(z)\approx0 g(z)0;当 z = 0 z=0 z=0时, g ( z ) = 0 g(z)=0 g(z)=0 g ′ ( z ) = 1 g'(z)=1 g(z)=1
  • tanh函数几乎Sigmoid函数好
  • tanh函数介于-1到1之间,平均值为0,相当于总是将数据中心化为0
  • 缺点:当 z z z很大或很小时,导数趋于0,梯度下降效率低

3. ReLU函数
a = m a x ( 0 , z ) a=max(0,z) a=max(0,z)

在这里插入图片描述

  • 导数
    g ′ ( z ) = { 0 , z < 0 1 , z > 0 u n d e f i n e d , z = 0 g'(z)=\begin{cases} 0,\quad z<0\\ 1,\quad z>0\\ undefined,\quad z=0 \end{cases} g(z)=0,z<01,z>0undefined,z=0
  • z < 0 z<0 z<0时导数为0, z > 0 z>0 z>0时导数为1, z = 0 z=0 z=0处不可导,可为其赋值,如0或1
  • 现经常使用

4. ReLU函数
a = m a x ( 0.01 z , z ) a=max(0.01z,z) a=max(0.01z,z)

在这里插入图片描述

  • 导数
    g ′ ( z ) = { 0.01 , z < 0 1 , z > 0 u n d e f i n e d , z = 0 g'(z)=\begin{cases} 0.01,\quad z<0\\ 1,\quad z>0\\ undefined,\quad z=0 \end{cases} g(z)=0.01,z<01,z>0undefined,z=0
  • z < 0 z<0 z<0时导数较小,为0.01, z > 0 z>0 z>0时导数较大,为1, z = 0 z=0 z=0处不可导,可为其赋值,如0或1
  • 通常比ReLU好,但实际中较少使用

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

  • 如果隐藏层均采用线性激活函数,无论多少层,无论每层多少个神经单元,一直做的都是线性运算,最终做的也是线性运算,相当于没有隐藏层,因此,不能在隐藏层使用线性激活函数。
  • 只有一种情形可以使用线性激活函数:回归问题的输出层

编程作业:带有一个隐藏层的平面数据分类

深层神经网络

在这里插入图片描述
符号定义
在这里插入图片描述

  • L L L:神经网络的层数(不包括输入层), L = 4 L=4 L=4
  • n [ l ] n^{[l]} n[l]:第 l l l层的神经元个数,输入层为第0层, n [ 0 ] = n x = 3 , n [ 1 ] = 5 , n [ 2 ] = 5 , n [ 3 ] = 3 , n [ 4 ] = n [ L ] = 1 n^{[0]}=n_x=3, n^{[1]}=5, n^{[2]}=5, n^{[3]}=3, n^{[4]}=n^{[L]}=1 n[0]=nx=3,n[1]=5,n[2]=5,n[3]=3,n[4]=n[L]=1
  • a [ l ] = g [ l ] ( z [ l ] ) a^{[l]}=g^{[l]}(z^{[l]}) a[l]=g[l](z[l]):第 l l l层的激活函数
  • w [ l ] , b [ l ] w^{[l]},b^{[l]} w[l],b[l] z [ l ] z^{[l]} z[l]的权重、偏置

前向传播Forward propagation

  • 单个样本的某一层:Input: a [ l − 1 ] a^{[l-1]} a[l1],output: a [ l ] a^{[l]} a[l],cache: z [ l ] ( w [ l ] , b [ l ] ) z^{[l]}(w^{[l]},b^{[l]}) z[l](w[l],b[l])
    ∀ l ∈ L \forall l\in L lL
    z [ l ] = w [ l ] a [ l − 1 ] + b [ l ] a [ l ] = g [ l ] ( z [ l ] ) \begin{aligned} &z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}\\ &a^{[l]}=g^{[l]}(z^{[l]}) \end{aligned} z[l]=w[l]a[l1]+b[l]a[l]=g[l](z[l])
  • 整个训练集,向量化

    f o r l = 1 t o L : Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] A [ l ] = g [ l ] ( Z [ l ] ) Y ^ = A [ L ] \begin{aligned} for\quad &l =1 \quad to\quad L:\\ &Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}\\ &A^{[l]}=g^{[l]}(Z^{[l]})\\ \hat{Y}=&A^{[L]} \end{aligned} forY^=l=1toL:Z[l]=W[l]A[l1]+b[l]A[l]=g[l](Z[l])A[L]

反向传播

  • 单个样本的某一层:Input: d a [ l ] da^{[l]} da[l],output: d a [ l − 1 ] , d w [ l ] , d b [ l ] da^{[l-1]},dw^{[l]},db^{[l]} da[l1],dw[l],db[l]
    ∀ l ∈ L \forall l\in L lL
    d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) d w [ l ] = d z [ l ] a [ l − 1 ] d b [ l ] = d z [ l ] d a [ l − 1 ] = w [ l ] T d z [ l ] \begin{aligned} &dz^{[l]}=da^{[l]}*g^{[l]'}(z^{[l]})\\ &dw^{[l]}=dz^{[l]}a^{[l-1]}\\ &db^{[l]}=dz^{[l]}\\ &da^{[l-1]}=w^{[l]T}dz^{[l]} \end{aligned} dz[l]=da[l]g[l](z[l])dw[l]=dz[l]a[l1]db[l]=dz[l]da[l1]=w[l]Tdz[l]
  • 整个训练集,向量化(层之间没有办法向量化,要用for循环)
    d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) d W [ l ] = 1 m d Z [ l ] A [ l − 1 ] d b [ l ] = 1 m n p . s u m ( d Z [ l ] , a x i s = 1 , k e e p d i m s = T r u e ) d A [ l − 1 ] = W [ l ] T d Z [ l ] \begin{aligned} &dZ^{[l]}=dA^{[l]}*g^{[l]'}(Z^{[l]})\\ &dW^{[l]}=\frac{1}{m}dZ^{[l]}A^{[l-1]}\\ &db^{[l]}=\frac{1}{m}np.sum(dZ^{[l]},axis=1,keepdims=True)\\ &dA^{[l-1]}=W^{[l]T}dZ^{[l]} \end{aligned} dZ[l]=dA[l]g[l](Z[l])dW[l]=m1dZ[l]A[l1]db[l]=m1np.sum(dZ[l],axis=1,keepdims=True)dA[l1]=W[l]TdZ[l]

核对矩阵的维数
帮助检查代码正确性。

  • W [ l ] W^{[l]} W[l] ( n [ l ] , n [ l − 1 ] ) (n^{[l]},n^{[l-1]}) (n[l],n[l1])
  • b [ l ] b^{[l]} b[l] ( n [ l ] , 1 ) (n^{[l]},1) (n[l],1)
  • d W [ l ] dW^{[l]} dW[l] ( n [ l ] , n [ l − 1 ] ) (n^{[l]},n^{[l-1]}) (n[l],n[l1])
  • d b [ l ] db^{[l]} db[l] ( n [ l ] , 1 ) (n^{[l]},1) (n[l],1)
  • z [ l ] , a [ l ] z^{[l]},a^{[l]} z[l],a[l] ( n [ l ] , 1 ) (n^{[l]},1) (n[l],1)
  • Z [ l ] , A [ l ] Z^{[l]},A^{[l]} Z[l],A[l] ( n [ l ] , n [ l − 1 ] ) (n^{[l]},n^{[l-1]}) (n[l],n[l1])
  • d Z [ l ] , d A [ l ] dZ^{[l]},dA^{[l]} dZ[l],dA[l] ( n [ l ] , n [ l − 1 ] ) (n^{[l]},n^{[l-1]}) (n[l],n[l1])

搭建深层神经网络块

  • l l l
    在这里插入图片描述
  • 整个网络的一次正向传播与反向传播
    在这里插入图片描述

为什么使用深层表示

  • 每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间;
  • 每层神经网络的物理理解:通过现有的不同物质的组合形成新物质。

1. 人脸识别情景
在这里插入图片描述
由像素组成菱角再组成五官最后到不同的人脸。每一层代表不同的不同的物质层面 (如分子层)。而每层的W存储着如何组合上一层的物质从而形成新物质。可以先把神经网络的第一层当作看图,然后去找这张照片的各个边缘。我们可以把照片里组成边缘的像素们放在一起看,然后它可以把被探测到的边缘组合成面部的不同部分

  • 物质组成视角:神经网络的学习过程就是学习物质组成方式的过程。
  • 增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。
  • 增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。

深层学习为何要“Deep”

2. 电路理论
在这里插入图片描述

  • 当使用浅网络计算时,需要一个大网络(通过网络中的逻辑门数量来度量大小)
    • 根据不同的基本逻辑门,譬如与门、或门、非门。在非正式的情况下,这些函数都可以用相对较小,但很深的神经网络来计算,小在这里的意思是隐藏单元的数量相对比较小;
    • (左图)假设要对输入特征计算异或或是奇偶性, x 1 X O R x 2 X O R . . . X O R x n x_1 XOR x_2 XOR ... XOR x_n x1XORx2XOR...XORxn,如果你画一个异或的树图,先要计算 x 1 x_1 x1 x 2 x_2 x2的异或,然后是 x 3 x_3 x3 x 4 x_4 x4,……,这种树图对应网络的深度应该是 O ( l o g ( n ) ) O(log(n)) O(log(n))
  • 当使用深网络来计算时,只需要一个指数级小的网络
    • 如果用浅一些的神经网络计算同样的函数,也就是说在不能用很多隐藏层时,但是需要成指数增长的单元数量才能达到同样的计算结果。
    • (右图)如果只能用单隐层来计算的话,这就需要隐藏层的单元数呈指数增长才行,因为本质上来说需要列举 2 n 2^n 2n种可能。

参数与超参数

  • 超参数某种程度上决定了最终得到的参数
    • 参数: W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] , W [ 3 ] , b [ 3 ] … … W^{[1]},b^{[1]},W^{[2]},b^{[2]},W^{[3]},b^{[3]}…… W[1],b[1],W[2],b[2],W[3],b[3]
    • 超参数:学习率 α \alpha α,梯度下降法循环的次数iteration,隐藏层数目L,隐藏层单元数目 n [ l ] n^{[l]} n[l],激活函数的选择
  • 超参数的选择
    • 今天的深度学习应用领域,还是很经验性的过程。应用深度学习领域,一个很大程度基于经验的过程,凭经验的过程通俗来说,就是试直到你找到合适的数值;
    • 参数设定这个领域,深度学习研究还在进步中,所以可能过段时间就会有更好的方法决定超参数的值;
    • 近来受深度学习影响,很多领域发生了变化,从计算机视觉到语音识别到自然语言处理到很多结构化的数据应用,比如网络广告、网页搜索、产品推荐等等;有些同一领域设置超参数的直觉可以推广,但有时又不可以,特别是那些刚开始研究新问题的人们应该去尝试一定范围内的结果如何,甚至那些用了很久的模型得学习率或是其他超参数的最优值也有可能会改变。
      在这里插入图片描述

深层神经网络与大脑有什么关系

  • 大脑是用类似于梯度下降的算法(后向传播)学习,还是,人类大脑的学习过程用的是完全不同的原理,这是未知的;
  • 在监督学习中,学到输入到输出的映射,但这种和人类大脑的类比,在这个领域的早期也许值得一提,但现在这种类比已经逐渐过时了。
    在这里插入图片描述

编程作业:一步步搭建多层神经网络以及应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值