【深度学习-吴恩达】L1-3 浅层神经网络

L1 深度学习概论

3 浅层神经网络

课程时长共94min40s

3.1 神经网络概览

一个两层简单的神经网络结构

image-20220726162613414

  • 使用W[1]表示第1层W,使用上标[1]表示第一层,且已经进行过转置
  • 多次计算z和a
3.2 神经网络的表示

image-20220726163627011

  • 输入层 input layer

    • a [ 0 ] = X a^{[0]} = X a[0]=X
    • 称为第零层
  • 隐藏层 hidden layer

    • 隐藏层中间的值在训练集中无法得到

    • a [ 1 ] = [ a 1 [ 1 ] a 1 [ 2 ] ⋮ a 1 [ n l a y e r ] ] a^{[1]} = \begin{bmatrix} a_1^{[1]}\\ a_1^{[2]}\\ \vdots\\ a_1^{[n_{layer}]} \end{bmatrix} a[1]= a1[1]a1[2]a1[nlayer]

  • 输出层 output layer

    • y ^ = a [ 2 ] \hat{y} = a^{[2]} y^=a[2]
  • 约定为双层神经网络,不计算输入层

3.3 神经网络的计算
  • 圆代表计算过程中的两步

    image-20220726163831284

    1. z = w T + b z=w^T+b z=wT+b
    2. a = σ ( z ) a=\sigma(z) a=σ(z)
  • 进行多个神经元计算时候需要for循环,转化为向量形式

    • KaTeX parse error: Expected 'EOF', got '&' at position 39: …}x_1+b_1^{[1]},&̲a_1^{[1]}=\sigm…

    • 转化为如下形式:

    • $$
      z^{[1]}=\begin{bmatrix}
      w{[1]T}_1\
      w{[1]T}_2\
      \vdots\
      w{[1]T}_4\
      \end{bmatrix}
      \begin{bmatrix}
      x_1\x_2\x_3
      \end{bmatrix}
      +
      \begin{bmatrix}
      b_1{[1]}\b_2{[1]}\b_3{[1]}\b_4{[1]}
      \end{bmatrix}

      \begin{bmatrix}
      z_1{[1]}\z_2{[1]}\z_3{[1]}\z_4{[1]}
      \end{bmatrix}
      $$

    • a [ 1 ] = [ a 1 [ 1 ] ⋮ a 4 [ 1 ] ] = σ ( z [ 1 ] ) a^{[1]} = \begin{bmatrix} a_1^{[1]}\\ \vdots\\ a_4^{[1]}\\ \end{bmatrix} = \sigma(z^{[1]}) a[1]= a1[1]a4[1] =σ(z[1])

    • 由此,对于单个训练样本,计算单隐藏层神经网络公式如下所示:

      image-20220726165209914

      • 其中 x = a [ 0 ] x=a^{[0]} x=a[0]
      • 其中标识了向量形状
3.4 多个样本的序列化

对于m个训练样本

  • 非向量化:使用for循环循环单个训练样本方程
    KaTeX parse error: Expected 'EOF', got '&' at position 92: …{(i)} + b^{[1]}&̲\\ a^{[1](i)}…

  • 向量化对于X、Z、A的表示:
    W = [ w 1 [ 1 ] T w 2 [ 1 ] T ⋮ w 4 [ 1 ] T ] X = [ ⋮ ⋮ ⋮ ⋮ x ( 1 ) x ( 2 ) x ( 3 ) x ( 4 ) ⋮ ⋮ ⋮ ⋮ ] Z [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ z [ 1 ] ( 1 ) z [ 1 ] ( 2 ) z [ 1 ] ( 3 ) z [ 1 ] ( 4 ) ⋮ ⋮ ⋮ ⋮ ] A [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ a [ 1 ] ( 1 ) a [ 1 ] ( 2 ) a [ 1 ] ( 3 ) a [ 1 ] ( 4 ) ⋮ ⋮ ⋮ ⋮ ] W=\begin{bmatrix} w^{[1]^T}_1\\ w^{[1]^T}_2\\ \vdots\\ w^{[1]^T}_4\\ \end{bmatrix}\\ X= \begin{bmatrix} \vdots\qquad\vdots\qquad\vdots\qquad\vdots\\ x^{(1)}\quad x^{(2)}\quad x^{(3)}\quad x^{(4)}\\ \vdots\qquad\vdots\qquad\vdots\qquad\vdots\\ \end{bmatrix}\\ Z^{[1]}= \begin{bmatrix} \vdots\qquad\quad\vdots\qquad\quad\vdots\qquad\quad\vdots\\ z^{[1](1)}\quad z^{[1](2)}\quad z^{[1](3)}\quad z^{[1](4)}\\ \vdots\qquad\quad\vdots\qquad\quad\vdots\qquad\quad\vdots\\ \end{bmatrix}\\ A^{[1]}= \begin{bmatrix} \vdots\qquad\quad\vdots\qquad\quad\vdots\qquad\quad\vdots\\ a^{[1](1)}\quad a^{[1](2)}\quad a^{[1](3)}\quad a^{[1](4)}\\ \vdots\qquad\quad\vdots\qquad\quad\vdots\qquad\quad\vdots\\ \end{bmatrix} W= w1[1]Tw2[1]Tw4[1]T X= x(1)x(2)x(3)x(4) Z[1]= z[1](1)z[1](2)z[1](3)z[1](4) A[1]= a[1](1)a[1](2)a[1](3)a[1](4)

  • 由此得到向量化的训练过程:
    z [ 1 ] = W [ 1 ] A [ 0 ] + b [ 1 ] A [ 1 ] = σ ( Z [ 1 ] ) z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] A [ 2 ] = σ ( Z [ 2 ] ) z^{[1]}=W^{[1]}A^{[0]}+b^{[1]}\\ A^{[1]}=\sigma(Z^{[1]})\\ z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}\\ A^{[2]}=\sigma(Z^{[2]}) z[1]=W[1]A[0]+b[1]A[1]=σ(Z[1])z[2]=W[2]A[1]+b[2]A[2]=σ(Z[2])
    其中 A [ 0 ] A^{[0]} A[0]即为 X X X

3.5 向量化实现的解释

下面图片不同颜色表示不同的输入样本数据及其计算数据

image-20220726185401290

image-20220726185517595

3.6 激活函数

选择隐藏层单元的激活函数

  • sigmoid函数
    a = σ ( z ) = 1 1 + e − z a=\sigma(z)=\frac{1}{1+e^{-z}} a=σ(z)=1+ez1

    除了二元分类输出层激活函数,其他时候避免使用,tanh函数在任何情况基本都会好于σ函数

  • g函数

    • 不同隐藏层可能不同,因此可以使用 a [ 1 ] = g [ 1 ] ( z [ 1 ] ) a^{[1]}=g^{[1]}(z^{[1]}) a[1]=g[1](z[1])表示第一层的激活函数

    • tanh函数
      a = t a n h ( z ) = e z − e − z e z + e − z a = tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} a=tanh(z)=ez+ezezez
      图像如下所示:

      img

    • ReLU函数,修正线性单元,激活函数默认常规选择
      a = m a x ( 0 , z ) a = max(0, z) a=max(0,z)
      图像如下所示:

      img

    • 带泄露的ReLU Leaky ReLU
      a = m a x ( 0.01 z , z ) a = max(0.01z, z) a=max(0.01z,z)

  • 二元分类,使用σ函数作为输出层激活函数,其他单元使用ReLU

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

线性激活函数(恒等激活函数)导致输出 y ^ \hat{y} y^是输入特征 x x x的线性组合,如下例子所示:
若激活函数 a [ 1 ] = z [ 1 ] , a [ 2 ] = z [ 2 ] , 则 a [ 1 ] = z [ 1 ] = W [ 1 ] x + b [ 1 ] a [ 2 ] = z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] a [ 2 ] = W [ 2 ] ( W [ 1 ] x + b [ 1 ] ) + b [ 2 ] = W ′ x + b ′ 若激活函数a^{[1]}=z^{[1]},a^{[2]}=z^{[2]},则\\ a^{[1]}=z^{[1]}=W^{[1]}x+b^{[1]}\\ a^{[2]}=z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}\\ a^{[2]}=W^{[2]}(W^{[1]}x+b^{[1]})+b^{[2]}=W'x+b' 若激活函数a[1]=z[1],a[2]=z[2],a[1]=z[1]=W[1]x+b[1]a[2]=z[2]=W[2]a[1]+b[2]a[2]=W[2](W[1]x+b[1])+b[2]=Wx+b

3.8 激活函数的导数

sigmoid函数

  • g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1

  • g ′ ( z ) = d d z g ( z ) = 1 1 + e − z ( 1 − 1 1 + e − z ) = g ( z ) ( 1 − g ( z ) ) = a ( 1 − a ) g'(z)=\frac{d}{dz}g(z)=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})=g(z)(1-g(z))=a(1-a) g(z)=dzdg(z)=1+ez1(11+ez1)=g(z)(1g(z))=a(1a)

    • 计算出a,则能得到a导数

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)=ez+ezezez
  • g ′ ( z ) = d d z g ( z ) = 1 − ( t a n h ( z ) ) 2 g'(z)=\frac{d}{dz}g(z)=1-(tanh(z))^2 g(z)=dzdg(z)=1(tanh(z))2

ReLU函数

  • g ( z ) = m a x ( 0 , z ) g(z)=max(0,z) g(z)=max(0,z)
  • g ′ ( z ) = { 0 z < 0 1 z > 0 u n d e f i n e d z = 0 g'(z)=\left\{\begin{matrix}0&z<0\\1&z>0\\undefined&z=0\end{matrix}\right. g(z)= 01undefinedz<0z>0z=0
    • 实际使用中,z=0常设置导数为1或0,对算法没有影响

泄露的ReLU函数

  • g ( z ) = m a x ( 0.01 z , z ) g(z)=max(0.01z,z) g(z)=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)=\left\{\begin{matrix}0.01&z<0\\1&z>0\\undefined&z=0\end{matrix}\right. g(z)= 0.011undefinedz<0z>0z=0
    • 实际使用中,z=0常设置导数为1或0.01,对算法没有影响
3.9 神经网络的梯度下降法

各个参数设置

  • 参数: w [ 1 ] , b [ 1 ] , w [ 2 ] , b [ 2 ] w^{[1]},b^{[1]},w^{[2]},b^{[2]} w[1],b[1],w[2],b[2]
  • 神经网络结构: n x n_x nx其中 n [ 0 ] = 3 , n [ 1 ] = 4 , n [ 2 ] = 1 n^{[0]}=3,n^{[1]}=4,n^{[2]}=1 n[0]=3,n[1]=4,n[2]=1
  • 成本函数: J ( w [ 1 ] , b [ 1 ] , w [ 2 ] , b [ 2 ] ) = 1 m ∑ i = 1 m L ( y ^ , y ) J(w^{[1]},b^{[1]},w^{[2]},b^{[2]})=\frac{1}{m}\sum_{i=1}^mL(\hat{y},y) J(w[1],b[1],w[2],b[2])=m1i=1mL(y^,y)
  • 梯度下降法,重复如下步骤:
    • graph predict y ^ ( i ) , i = 1 … m \hat{y}^{(i)},i=1\dots m y^(i),i=1m
    • d w [ 1 ] = d J d w [ 2 ] , d b [ 1 ] = d J d b [ 1 ] , … dw^{[1]}=\frac{dJ}{dw^{[2]}},db^{[1]}=\frac{dJ}{db^{[1]}},\dots dw[1]=dw[2]dJ,db[1]=db[1]dJ,
    • w [ 1 ] : = w [ 1 ] − α d w [ 1 ] w^{[1]}:=w^{[1]}-\alpha dw^{[1]} w[1]:=w[1]αdw[1]
    • b [ 1 ] : = b [ 1 ] − α d b [ 1 ] b^{[1]}:=b^{[1]}-\alpha db^{[1]} b[1]:=b[1]αdb[1]
    • ⋮ \vdots

对于计算梯度

  • 正向传播

    • KaTeX parse error: Expected 'EOF', got '&' at position 12: Z^{[1]}=&̲W^{[1]}X + b^{[…
  • 反向传播

    • KaTeX parse error: Expected 'EOF', got '&' at position 6: Y=&̲\begin{bmatrix}…

课件笔记如下所示

image-20220727101937833

image-20220727101853634

3.10 理解反向传播

主要使用链式法则求导

下图展示了一个双层神经网络,对于样本集大小m=1的正向传播过程:

image-20220727142104687

对于反向传播算法,计算:

  • d a [ 2 ] , d z [ 2 ] , d w [ 2 ] , d b [ 2 ] da^{[2]},dz^{[2]},dw^{[2]}, db^{[2]} da[2],dz[2],dw[2],db[2]

  • d a [ 1 ] , d z [ 1 ] , d w [ 1 ] , d b [ 1 ] da^{[1]},dz^{[1]},dw^{[1]},db^{[1]} da[1],dz[1],dw[1],db[1]

  • 按照如下顺序计算,得到反向传播第一层的梯度

    L ( a [ 2 ] , y ) = − ( y l o g a [ 2 ] + ( 1 − y ) l o g ( 1 − a [ 2 ] ) ) d a [ 2 ] = d d a [ 2 ] L ( a [ 2 ] , y ) = y − a [ 2 ] a [ 2 ] ( a [ 2 ] − 1 ) d z [ 2 ] = d d a [ 2 ] L ( a [ 2 ] , y ) d a [ 2 ] d z [ 2 ] = y − a [ 2 ] a [ 2 ] ( a [ 2 ] − 1 ) ⋅ a [ 2 ] ( 1 − a [ 2 ] ) = a [ 2 ] − y d W [ 2 ] = d z [ 2 ] ⋅ d z [ 2 ] d W [ 2 ] = d z [ 2 ] a [ 1 ] T d b [ 2 ] = d z [ 2 ] L(a^{[2]},y)=-(yloga^{[2]}+(1-y)log(1-a^{[2]}))\\ da^{[2]}=\frac{d}{da^{[2]}}L(a^{[2]},y)=\frac{y-a^{[2]}}{a^{[2]}(a^{[2]}-1)}\\ dz^{[2]}=\frac{d}{da^{[2]}}L(a^{[2]},y)\frac{da^{[2]}}{dz^{[2]}}=\frac{y-a^{[2]}}{a^{[2]}(a^{[2]}-1)}\cdot a^{[2]}(1-a^{[2]})=a^{[2]}-y\\ dW^{[2]}=dz^{[2]}\cdot \frac{dz^{[2]}}{dW^{[2]}}=dz^{[2]}a^{[1]^T}\\ db^{[2]}=dz^{[2]} L(a[2],y)=(yloga[2]+(1y)log(1a[2]))da[2]=da[2]dL(a[2],y)=a[2](a[2]1)ya[2]dz[2]=da[2]dL(a[2],y)dz[2]da[2]=a[2](a[2]1)ya[2]a[2](1a[2])=a[2]ydW[2]=dz[2]dW[2]dz[2]=dz[2]a[1]Tdb[2]=dz[2]

  • 同理得到反向传播第二层梯度
    d 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 ] dz^{[1]}=W^{[2]^T}dz^{[2]}*g^{[1]'}(z^{[1]})\\ dW^{[1]}=dz^{[1]}x^T\\ db^{[1]}=dz^{[1]} dz[1]=W[2]Tdz[2]g[1](z[1])dW[1]=dz[1]xTdb[1]=dz[1]

  • 小知识:对于矩阵求导,有如下求导公式:
    ∂ A x ∂ x = A T ∂ A x ∂ x T = A ∂ x T A ∂ x = A ∂ x T A x ∂ x T = ( A + A T ) x \frac{\partial Ax}{\partial x}=A^T\\ \frac{\partial Ax}{\partial x^T}=A\\ \frac{\partial x^TA}{\partial x}=A\\ \frac{\partial x^TAx}{\partial x^T}=(A+A^T)x\\ xAx=ATxTAx=AxxTA=AxTxTAx=(A+AT)x

  • 因此对于m=1,得到如下反向传播公式
    d z [ 2 ] = a [ 2 ] − y d W [ 2 ] = d z [ 2 ] a [ 1 ] T d b [ 2 ] = d z [ 2 ] d 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 ] dz^{[2]}=a^{[2]}-y\\ dW^{[2]}=dz^{[2]}a^{[1]^T}\\ db^{[2]}=dz^{[2]} dz^{[1]}=W^{[2]^T}dz^{[2]}*g^{[1]'}(z^{[1]})\\ dW^{[1]}=dz^{[1]}x^T\\ db^{[1]}=dz^{[1]} dz[2]=a[2]ydW[2]=dz[2]a[1]Tdb[2]=dz[2]dz[1]=W[2]Tdz[2]g[1](z[1])dW[1]=dz[1]xTdb[1]=dz[1]

  • 同理,对于m个样本的输入,得到如下反向传播向量化公式
    d Z [ 2 ] = A [ 2 ] − Y d W [ 2 ] = 1 m d Z [ 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 ) d Z [ 1 ] = W [ 2 ] T d Z [ 2 ] ∗ g [ 1 ] ′ ( Z [ 1 ] ) d W [ 1 ] = 1 m d Z [ 1 ] X T 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 ) dZ^{[2]}=A^{[2]}-Y\\ dW^{[2]}=\frac1m dZ^{[2]}A^{[1]^T}\\ db^{[2]}=\frac1m np.sum(dZ^{[2]},axis=1,keepdims=True)\\\\ dZ^{[1]}=W^{[2]^T}dZ^{[2]}*g^{[1]'}(Z^{[1]})\\ dW^{[1]}=\frac1m dZ^{[1]}X^T\\ db^{[1]}=\frac1m np.sum(dZ^{[1]},axis=1,keepdims=True) dZ[2]=A[2]YdW[2]=m1dZ[2]A[1]Tdb[2]=m1np.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]g[1](Z[1])dW[1]=m1dZ[1]XTdb[1]=m1np.sum(dZ[1],axis=1,keepdims=True)

3.11 随机初始化

对于logistic回归,可以将权重初始化为0

对于神经网络,权重初始化为0使得梯度下降法无效化

考虑下面的例子:

  • image-20220727103834147
    • n[0]=2
    • n[1]=1,有两个隐藏单元
    • 若初始化 w [ 1 ] = [ 0   0 0   0 ] w^{[1]} = \begin{bmatrix}0\ 0\\0\ 0\end{bmatrix} w[1]=[0 00 0]
      • 对于任意输入样本,两个隐藏单元在做同样的计算,导致 a 1 [ 1 ] = a 2 [ 1 ] a^{[1]}_1=a^{[1]}_2 a1[1]=a2[1] d z 1 [ 1 ] = d z 2 [ 1 ] dz^{[1]}_1=dz^{[1]}_2 dz1[1]=dz2[1],称之为完全对称
      • 多次迭代之后仍然是对称的
  • 对于多个输入特征情况,同样的,隐藏层单元具有对称性

随机初始化参数

  • 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
    • 生成随机高斯分布
    • 权重矩阵初始化为较小数,因为对于sigmoid或tanh激活函数,数值过大或过小,函数斜率较小,梯度下降较慢,学习较慢
    • 训练较深网络时候,参数设置为其他较小数字而非0.01
  • b可以初始化为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值