吴恩达深度学习【听课笔记】__5. 神经网络__

本文介绍了神经网络的基本结构,包括隐藏层和输出层,以及如何通过向量化简化计算。讨论了激活函数的作用,如sigmoid、tanh和ReLU,以及它们的导数。进一步解释了梯度下降法在神经网络中的应用,前向传播和反向传播的过程,以及参数更新的规则。最后提到了随机初始化的重要性,以避免隐藏单元的协同效应。
摘要由CSDN通过智能技术生成

神经网络预览

  • 画出如下所示的两层神经网络

在这里插入图片描述

  • 用中括号上标 [ i ] {[i]} [i]表示神经网络的第几层,用括号上标 ( i ) {(i)} (i)表示第 i i i个训练样本。在网络中也拥有计算图中的backward和forward机制,backward就是求偏导计算出 W [ i ] W^{[i]} W[i] b [ i ] b^{[i]} b[i]的值。

双层神经网络

  • 如下是一个双层神经网络:
    在这里插入图片描述

  • 包括输出层、隐藏层(hidden layer)、输出层

  • 其中,隐藏层有参数 W [ 1 ] [ 4 , 3 ] W^{[1]} [4,3] W[1][4,3] b [ 1 ] [ 4 , 1 ] b^{[1]}[4,1] b[1][4,1]。其中, [ 4 , 3 ] [4,3] [4,3]是因为有隐藏层有4个神经元,有3个输入值 x x x,即,每一个隐藏层的神经元有参数 w [ 1 ] [ 1 , 3 ] w^{[1]}[1,3] w[1][1,3] b [ 1 ] [ 1 , 1 ] b^{[1]}[1,1] b[1][1,1]
    i n p u t = ( x 1 x 2 x 3 ) , W n = ( w 1 w 2 w 3 ) , n ∈ ( 1 , 2 , 3 , 4 ) input = \left ( \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right ), W_n = \left ( \begin{matrix} w_1 & w_2 & w_3 \\ \end{matrix} \right ), n \in (1,2,3,4) input= x1x2x3 ,Wn=(w1w2w3),n(1,2,3,4)

  • 输出层有参数 W [ 2 ] [ 1 , 4 ] W^{[2]}[1,4] W[2][1,4] b [ 2 ] [ 1 , 1 ] b^{[2]}[1,1] b[2][1,1],同理,输出层只有一个神经元,但有四个输入值。

双层神经网络的计算

  • 对如下双层神经网络列出算式:
    在这里插入图片描述

  • 其中每一个 w n [ 1 ] w_n^{[1]} wn[1]都是一个 [ 1 , 3 ] [1,3] [1,3]向量
    w 1 [ 1 ] = ( w 1 w 2 w 3 ) , x = ( x 1 x 2 x 3 ) , b = b 1 w_1^{[1]} = \left ( \begin{matrix} w_1 \\ w_2 \\ w_3 \end{matrix} \right ), x = \left ( \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right ), b = b_1 w1[1]= w1w2w3 ,x= x1x2x3 ,b=b1
    z 1 [ 1 ] = w 1 [ 1 ] T x + b = ( w 1 × x 1 + b w 2 × x 2 + b w 3 × x 3 + b ) z_1^{[1]} = w_1^{[1]T}x+b= \left ( \begin{matrix} w_1\times x_1+b & w_2\times x_2 + b & w_3\times x_3+b \end{matrix} \right ) z1[1]=w1[1]Tx+b=(w1×x1+bw2×x2+bw3×x3+b)

  • 如果将四个神经元组合在一起, z [ 1 ] z^{[1]} z[1]就是一个 [ 4 , 3 ] [4,3] [4,3]的矩阵
    z [ 1 ] = ( w 1 [ 1 ] × x 1 + b [ 1 ] w 2 [ 1 ] × x 2 + b [ 1 ] w 3 [ 1 ] × x 3 + b [ 1 ] w 1 [ 2 ] × x 1 + b [ 2 ] w 2 [ 2 ] × x 2 + b [ 2 ] w 3 [ 2 ] × x 3 + b [ 2 ] w 1 [ 3 ] × x 1 + b [ 3 ] w 2 [ 3 ] × x 2 + b [ 3 ] w 3 [ 3 ] × x 3 + b [ 3 ] w 1 [ 4 ] × x 1 + b [ 4 ] w 2 [ 4 ] × x 2 + b [ 4 ] w 3 [ 4 ] × x 3 + b [ 4 ] ) z^{[1]} = \left ( \begin{matrix} w_1^{[1]}\times x_1+b^{[1]} & w_2^{[1]}\times x_2 + b^{[1]} & w_3^{[1]}\times x_3+b^{[1]} \\ w_1^{[2]}\times x_1+b^{[2]} & w_2^{[2]}\times x_2 + b^{[2]} & w_3^{[2]}\times x_3+b^{[2]} \\ w_1^{[3]}\times x_1+b^{[3]} & w_2^{[3]}\times x_2 + b^{[3]} & w_3^{[3]}\times x_3+b^{[3]} \\ w_1^{[4]}\times x_1+b^{[4]} & w_2^{[4]}\times x_2 + b^{[4]} & w_3^{[4]}\times x_3+b^{[4]} \end{matrix} \right ) z[1]= w1[1]×x1+b[1]w1[2]×x1+b[2]w1[3]×x1+b[3]w1[4]×x1+b[4]w2[1]×x2+b[1]w2[2]×x2+b[2]w2[3]×x2+b[3]w2[4]×x2+b[4]w3[1]×x3+b[1]w3[2]×x3+b[2]w3[3]×x3+b[3]w3[4]×x3+b[4]

向量化

  • 有下列代码实现:
    在这里插入图片描述

  • 向量化去掉for循环

  • 前面已经定义了向量化的参数:
    w [ 1 ] = ( w 1 w 2 w 3 ) , x = ( x 1 x 2 x 3 ) , b = b 1 w^{[1]} = \left ( \begin{matrix} w_1 \\ w_2 \\ w_3 \end{matrix} \right ), x = \left ( \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right ), b = b_1 w[1]= w1w2w3 ,x= x1x2x3 ,b=b1
    z 1 [ 1 ] = w 1 [ 1 ] T x + b = ( w 1 × x 1 + b w 2 × x 2 + b w 3 × x 3 + b w 4 × x 3 + b ) z_1^{[1]} = w_1^{[1]T}x+b= \left ( \begin{matrix} w_1\times x_1+b & w_2\times x_2 + b & w_3\times x_3+b &w_4\times x_3+b \end{matrix} \right ) z1[1]=w1[1]Tx+b=(w1×x1+bw2×x2+bw3×x3+bw4×x3+b)
    z [ 1 ] = ( w 1 [ 1 ] × x 1 + b [ 1 ] w 2 [ 1 ] × x 2 + b [ 1 ] w 3 [ 1 ] × x 3 + b [ 1 ] w 1 [ 2 ] × x 1 + b [ 2 ] w 2 [ 2 ] × x 2 + b [ 2 ] w 3 [ 2 ] × x 3 + b [ 2 ] w 1 [ 3 ] × x 1 + b [ 3 ] w 2 [ 3 ] × x 2 + b [ 3 ] w 3 [ 3 ] × x 3 + b [ 3 ] w 1 [ 4 ] × x 1 + b [ 4 ] w 2 [ 4 ] × x 2 + b [ 4 ] w 3 [ 4 ] × x 3 + b [ 4 ] ) z^{[1]} = \left ( \begin{matrix} w_1^{[1]}\times x_1+b^{[1]} & w_2^{[1]}\times x_2 + b^{[1]} & w_3^{[1]}\times x_3+b^{[1]} \\ w_1^{[2]}\times x_1+b^{[2]} & w_2^{[2]}\times x_2 + b^{[2]} & w_3^{[2]}\times x_3+b^{[2]} \\ w_1^{[3]}\times x_1+b^{[3]} & w_2^{[3]}\times x_2 + b^{[3]} & w_3^{[3]}\times x_3+b^{[3]} \\ w_1^{[4]}\times x_1+b^{[4]} & w_2^{[4]}\times x_2 + b^{[4]} & w_3^{[4]}\times x_3+b^{[4]} \end{matrix} \right ) z[1]= w1[1]×x1+b[1]w1[2]×x1+b[2]w1[3]×x1+b[3]w1[4]×x1+b[4]w2[1]×x2+b[1]w2[2]×x2+b[2]w2[3]×x2+b[3]w2[4]×x2+b[4]w3[1]×x3+b[1]w3[2]×x3+b[2]w3[3]×x3+b[3]w3[4]×x3+b[4]

  • 同样将 a a a向量化:
    a [ 1 ] = { σ ( z 1 [ 1 ] ) σ ( z 2 [ 1 ] ) σ ( z 3 [ 1 ] ) σ ( z 4 [ 1 ] ) } a^{[1]}=\begin{matrix}\{\sigma(z_1^{{[1]}}) & \sigma(z_2^{{[1]}}) & \sigma(z_3^{{[1]}})&\sigma(z_4^{{[1]}})\}\end{matrix} a[1]={σ(z1[1])σ(z2[1])σ(z3[1])σ(z4[1])}

  • 第一层(隐藏层)的可以简化为:
    z [ 1 ] = w [ 1 ] T x + b z^{[1]} = w^{[1]T}x+b z[1]=w[1]Tx+b
    a [ 1 ] = σ ( z [ 1 ] ) a^{[1]} = \sigma(z^{[1]}) a[1]=σ(z[1])

  • 同理,向量化第二层(输出层)的参数并简化计算:
    w [ 2 ] = ( w 1 w 2 w 3 w 4 ) w^{[2]} = \begin{matrix} (w_1 & w_2 & w_3 & w_4) \end{matrix} w[2]=(w1w2w3w4)

z [ 2 ] = w [ 2 ] × a [ 1 ] + b z^{[2]} = w^{[2]}\times a^{[1]} + b z[2]=w[2]×a[1]+b
a [ 2 ] = σ ( z [ 2 ] ) a^{[2]} = \sigma(z^{[2]}) a[2]=σ(z[2])

激活函数

  • 在前面的例子中,都隐藏层和输出层中都是用了 s i g m o i d sigmoid sigmoid函数,但实践中, s i g m o i d sigmoid sigmoid通常只用于二分分类的输出层
  • 其他常见的激活函数:
  1. t a n h tanh tanh函数:
    t a n h = e z − e − z e z + e − z tanh = \frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} tanh=ez+ezezez
    在这里插入图片描述

我们在隐藏层中通常用此函数代替 s i g m o i d sigmoid sigmoid,但 t a n h tanh tanh同样存在缺点,当 z z z值过大和过小时, t a n h tanh tanh的导数会接近0,这会拖慢梯度下降的速度。所以比 t a n h tanh tanh更常用的是 R e L u ReLu ReLu函数。

2. R e L u ReLu ReLu函数:
R e L u = m a x ( 0 , z ) ReLu = max(0, z) ReLu=max(0,z)
在这里插入图片描述

修正线性单元(rectified linear unit)是一个很简洁的函数,在把负值换成0,正值并不变。如果你不知道用什么函数,那你可以用这个函数


3. l e a k l y R e L u leakly ReLu leaklyReLu函数:
l e a k l y R e L u = m a x ( 0.01 × z , z ) leakly ReLu = max(0.01\times z, z) leaklyReLu=max(0.01×z,z)
在这里插入图片描述

这是ReLu的修改版,去掉了负值为0的情况。

激活函数的作用

  • 简单的说,在某些场景中可以不使用激活函数,或者使用线性的激活函数(即输出值等于输入值,不对输入值进行改变)。但在绝大多数场景中,我们需要激活函数(准确的说是非线性激活函数)使计算出的数据更加多样(原话说的是‘interesting’)。

sigmoid、tanh、ReLu求导

  1. sigmoid
    σ = 1 1 + e − z \sigma = \frac{1}{1+e^{-z}} σ=1+ez1
    d σ d z = 1 ( 1 + e − z ) 2 × e − z = 1 1 + e − z ( 1 − 1 1 + e − z ) \frac{d\sigma}{dz} = \frac{1}{(1+e^{-z})^2}\times e^{-z} = \frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) dzdσ=(1+ez)21×ez=1+ez1(11+ez1)
    d σ d z = σ × ( 1 − σ ) \frac{d\sigma}{dz} = \sigma\times(1-\sigma) dzdσ=σ×(1σ)

  2. tanh
    t a n h = e z − e − z e z + e − z tanh = \frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} tanh=ez+ezezez

d d z t a n h = ( e z + e − z ) × ( e z + e − z ) − ( e z − e − z ) × ( e z − e − z ) ( e z + e − z ) 2 \frac{d}{dz}tanh=\frac{(e^z + e^{-z}) \times (e^z+e^{-z}) - (e^z-e^{-z})\times(e^z-e^{-z})} {(e^z+e^{-z})^2} dzdtanh=(ez+ez)2(ez+ez)×(ez+ez)(ezez)×(ezez)

d d z t a n h = 1 − ( t a n h ( z ) ) 2 \frac{d}{dz}tanh = 1 - (tanh(z))^2 dzdtanh=1(tanh(z))2

  1. ReLu
    R e L u = m a x ( 0 , z ) = { 0 , z < 0 z , z > 0 ReLu = max(0,z) = \begin{cases} 0, & \text{z < 0} \\ z, & \text{z > 0} \end{cases} ReLu=max(0,z)={0,z,z < 0z > 0
    d d z R e L u = { 0 , z < 0 1 , z > 0 \frac{d}{dz}ReLu = \begin{cases} 0, &\text{z < 0} \\ 1, & \text{z > 0} \end{cases} dzdReLu={0,1,z < 0z > 0

  2. ReLu
    R e L u = m a x ( 0.01 × z , z ) = { 0.01 × z , z < 0 z , z > 0 ReLu = max(0.01\times z,z) = \begin{cases} 0.01\times z, & \text{z < 0} \\ z, & \text{z > 0} \end{cases} ReLu=max(0.01×z,z)={0.01×z,z,z < 0z > 0
    d d z R e L u = { 0.01 , z < 0 1 , z > 0 \frac{d}{dz}ReLu = \begin{cases} 0.01, &\text{z < 0} \\ 1, & \text{z > 0} \end{cases} dzdReLu={0.01,1,z < 0z > 0

神经网络的梯度下降

  • 假设网络有如下参数:
    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 [ 0 ] , n [ 1 ] , n [ 2 ] = 1 n_x=n^{[0]},n^{[1]},n^{[2]}=1 nx=n[0],n[1],n[2]=1
  • 有成本函数如下:
    J ( w [ 1 ] , b [ 1 ] , w [ 2 ] , b [ 2 ] ) = 1 m ∑ i = 1 n L ( y ^ , y ) J(w^{[1]}, b^{[1]}, w^{[2]},b^{[2]}) = \frac{1}{m}\sum_{i=1}^{n}L(\hat y, y) J(w[1],b[1],w[2],b[2])=m1i=1nL(y^,y)
  • 重复以下梯度下降过程:
    1. 计算损失函数:(预测值-真实值)
    2. 计算参数的偏导: d w [ 1 ] = d J d w [ 1 ] , d b [ 1 ] = d J d b [ 1 ] dw^{[1]}=\frac{dJ}{dw^{[1]}}, db^{[1]}=\frac{dJ}{db^{[1]}} dw[1]=dw[1]dJ,db[1]=db[1]dJ
    3. 更新参数: w [ 1 ] : = w [ 1 ] − α d w [ 1 ] , b [ 1 ] : = b [ 1 ] − α d b [ 1 ] w^{[1]}:=w^{[1]}-\alpha dw^{[1]},b^{[1]}:=b^{[1]}-\alpha db^{[1]} w[1]:=w[1]αdw[1],b[1]:=b[1]αdb[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 ] = w [ 2 ] A [ 1 ] + b [ 2 ] z^{[2]} = w^{[2]}A^{[1]}+b^{[2]} z[2]=w[2]A[1]+b[2]
A [ 2 ] = g [ 2 ] ( z [ 2 ] ) = σ ( z [ 2 ] ) A^{[2]} = g^{[2]}(z^{[2]}) = \sigma(z^{[2]}) A[2]=g[2](z[2])=σ(z[2])

  • 在前向传播后并不是立刻进行反向传播的,要先计算损失函数的损失值,之后通过损失函数进行反向传播:
    J ( W , b ) = L ( a , Y ) = − y log ⁡ a − ( 1 − y ) l o g ( 1 − a ) J(W,b) = L(a, Y)= -y\log a-(1-y)log(1-a) J(W,b)=L(a,Y)=yloga(1y)log(1a)
    其中 Y = Y= Y=整个数据集的所有真实值

反向传播

  • 反向传播即根据计算图,求出a,z,w,b的偏导
    在这里插入图片描述

  • 计算 a a a的偏导:
    d a = d d a L ( a , y ) = − y a + 1 − y 1 − a da = \frac{d}{da}L(a,y)=-\frac{y}{a}+\frac{1-y}{1-a} da=dadL(a,y)=ay+1a1y

  • 计算 z z z的偏导:
    d z = d d z L ( a , y ) = d L ( a , y ) d a d a d z = d a × σ ( z ) ′ = d a × a × ( 1 − a ) dz = \frac{d}{dz}L(a,y)=\frac{dL(a,y)}{da}\frac{da}{dz}=da\times\sigma(z)'=da\times a\times(1-a) dz=dzdL(a,y)=dadL(a,y)dzda=da×σ(z)=da×a×(1a)
    d z = ( − y a + 1 − y 1 − a ) × a × ( 1 − a ) dz = (-\frac{y}{a}+\frac{1-y}{1-a})\times a\times(1-a) dz=(ay+1a1y)×a×(1a)
    d z = − y × ( 1 − a ) + a × ( 1 − y ) = a y − y + a − a y dz = -y\times(1-a)+a\times(1-y)=ay-y+a-ay dz=y×(1a)+a×(1y)=ayy+aay
    d z = a − y dz = a-y dz=ay

  • 计算 d w dw dw的偏导:
    d w = d L ( a , y ) d w = d L ( a , y ) d z × d z d w = ( a − y ) × x dw = \frac{dL(a,y)}{dw}=\frac{dL(a,y)}{dz}\times\frac{dz}{dw}=(a-y)\times x dw=dwdL(a,y)=dzdL(a,y)×dwdz=(ay)×x

  • 计算 d b db db的偏导:
    d b = d L ( a , y ) d b = d L ( a , y ) d z × d z d b = ( a − y ) × 1 db = \frac{dL(a,y)}{db}=\frac{dL(a,y)}{dz}\times\frac{dz}{db}=(a-y)\times 1 db=dbdL(a,y)=dzdL(a,y)×dbdz=(ay)×1

  • 以上计算图是只有一层的情况,现在多增加一层:
    在这里插入图片描述

  • 计算 d a [ 2 ] da^{[2]} da[2]:
    d a [ 2 ] = d L ( a [ 2 ] , y ) d a [ 2 ] = − y a [ 2 ] + 1 − y 1 − a [ 2 ] da^{[2]}=\frac{dL(a^{[2]}, y)}{da^{[2]}} = -\frac{y}{a^{[2]}}+\frac{1-y}{1-a^{[2]}} da[2]=da[2]dL(a[2],y)=a[2]y+1a[2]1y

  • 计算 d z [ 2 ] dz^{[2]} dz[2]:
    d z [ 2 ] = d L ( a [ 2 ] , y ) d a [ 2 ] × d a [ 2 ] d z [ 2 ] = d a [ 2 ] × σ ( z [ 2 ] ) ′ dz^{[2]}=\frac{dL(a^{[2]},y)}{da^{[2]}}\times\frac{da^{[2]}}{dz^{[2]}}=da^{[2]}\times\sigma(z^{[2]})' dz[2]=da[2]dL(a[2],y)×dz[2]da[2]=da[2]×σ(z[2])

  • 计算 d w [ 2 ] dw^{[2]} dw[2]:
    d w [ 2 ] = d J ( a [ 2 ] , y ) d z [ 2 ] × d z [ 2 ] d w [ 2 ] = d z [ 2 ] × x [ 2 ] = d z [ 2 ] × a [ 1 ] dw^{[2]}=\frac{dJ(a^{[2]},y)}{dz^{[2]}}\times\frac{dz^{[2]}}{dw^{[2]}}=dz^{[2]}\times x^{[2]}=dz^{[2]}\times a^{[1]} dw[2]=dz[2]dJ(a[2],y)×dw[2]dz[2]=dz[2]×x[2]=dz[2]×a[1]

  • 计算 d b [ 2 ] db^{[2]} db[2]:
    d b [ 2 ] = d J ( a [ 2 ] , y ) d z [ 2 ] × d z [ 2 ] d b [ 2 ] = d z [ 2 ] db^{[2]}=\frac{dJ(a^{[2]},y)}{dz^{[2]}}\times\frac{dz^{[2]}}{db^{[2]}}=dz^{[2]} db[2]=dz[2]dJ(a[2],y)×db[2]dz[2]=dz[2]

  • 计算 d a [ 1 ] da^{[1]} da[1]:
    d a [ 1 ] = d J ( a [ 2 ] , y ) d z [ 2 ] × d z [ 2 ] d a [ 1 ] = d z [ 2 ] × d ( w [ 2 ] × a [ 1 ] + b [ 2 ] ) d a [ 1 ] = d z [ 2 ] × w [ 2 ] da^{[1]}=\frac{dJ(a^{[2]},y)}{dz^{[2]}}\times\frac{dz^{[2]}}{da^{[1]}}=dz^{[2]}\times\frac{d(w^{[2]}\times a^{[1]}+b^{[2]})}{da^{[1]}} = dz^{[2]}\times w^{[2]} da[1]=dz[2]dJ(a[2],y)×da[1]dz[2]=dz[2]×da[1]d(w[2]×a[1]+b[2])=dz[2]×w[2]

  • 计算 d z [ 1 ] dz^{[1]} dz[1]:
    d z [ 2 ] dz^{[2]} dz[2] d z [ 1 ] dz^{[1]} dz[1]都是由损失函数 L ( a [ 2 ] , y ) L(a^{[2]},y) L(a[2],y)进行推导的)
    d z [ 1 ] = d L ( a [ 2 ] , y ) d z [ 1 ] = d L ( a [ 2 ] , y ) d z [ 2 ] d z [ 2 ] d a [ 1 ] d a [ 1 ] d z [ 1 ] = d z [ 2 ] × w [ 2 ] × σ ( z [ 1 ] ) ′ dz^{[1]}=\frac{dL(a^{[2]},y)}{dz^{[1]}}=\frac{dL(a^{[2]},y)}{dz^{[2]}}\frac{dz^{[2]}}{da^{[1]}}\frac{da^{[1]}}{dz^{[1]}}=dz^{[2]}\times w^{[2]}\times\sigma(z^{[1]})' dz[1]=dz[1]dL(a[2],y)=dz[2]dL(a[2],y)da[1]dz[2]dz[1]da[1]=dz[2]×w[2]×σ(z[1])

  • 计算 d w [ 1 ] dw^{[1]} dw[1]:
    d w [ 1 ] = d a [ 1 ] d z [ 1 ] × d z [ 1 ] d w [ 1 ] = d z [ 1 ] × x dw^{[1]}=\frac{da^{[1]}}{dz^{[1]}}\times\frac{dz^{[1]}}{dw^{[1]}}=dz^{[1]}\times x dw[1]=dz[1]da[1]×dw[1]dz[1]=dz[1]×x

  • 计算 d b [ 1 ] db^{[1]} db[1]:
    d b [ 1 ] = d a [ 1 ] d z [ 1 ] × d z [ 1 ] d b [ 1 ] = d z [ 1 ] × 1 = d z [ 1 ] db^{[1]}=\frac{da^{[1]}}{dz^{[1]}}\times\frac{dz^{[1]}}{db^{[1]}}=dz^{[1]}\times 1 = dz^{[1]} db[1]=dz[1]da[1]×db[1]dz[1]=dz[1]×1=dz[1]

反向传播的向量化

  • 将多个 d z [ 2 ] dz^{[2]} dz[2] a [ 2 ] a^{[2]} a[2]以及真实值 y y y叠加在一起:
    d Z [ 2 ] = ( z [ 1 ] . . . z [ n ] ) dZ^{[2]}=\begin{matrix}( z^{[1]}&...&z^{[n]})\end{matrix} dZ[2]=(z[1]...z[n])
    d A [ 2 ] = ( a [ 1 ] . . . a [ n ] ) dA^{[2]}=\begin{matrix}( a^{[1]}&...&a^{[n]})\end{matrix} dA[2]=(a[1]...a[n])
    Y = ( y [ 1 ] . . . y [ n ] ) Y=\begin{matrix}( y^{[1]}&...&y^{[n]})\end{matrix} Y=(y[1]...y[n])
    于是有了向量化的 d z [ 2 ] dz^{[2]} dz[2]:
    d Z [ 2 ] = A [ 2 ] − Y dZ^{[2]} = A^{[2]}-Y dZ[2]=A[2]Y

  • 向量化 d w dw dw:
    d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] dW^{[2]}=\frac{1}{m}dZ^{[2]}A^{[1]} dW[2]=m1dZ[2]A[1]
    因为采用的是批次梯度下降(把整个训练集全都遍历过一次后才更新一次 W W W),所以每次更新使用的 d W [ 2 ] dW^{[2]} dW[2]采取所有训练样本的平均值

  • 向量化 d b [ 2 ] db^{[2]} db[2]
    d B [ 2 ] = 1 m ∑ i = 1 m b i [ 2 ] = 1 m ∑ i = 1 m Z i [ 2 ] dB^{[2]}=\frac{1}{m}\sum_{i=1}^{m}b^{[2]}_i=\frac{1}{m}\sum_{i=1}^{m}Z^{[2]}_i dB[2]=m1i=1mbi[2]=m1i=1mZi[2]

  • 向量化 d Z [ 1 ] dZ^{[1]} dZ[1]
    d Z [ 1 ] = W [ 2 ] × d Z [ 2 ] × σ ( Z [ 1 ] ) ′ dZ^{[1]}=W^{[2]}\times dZ^{[2]}\times \sigma(Z^{[1]})' dZ[1]=W[2]×dZ[2]×σ(Z[1])

  • 向量化 d w [ 1 ] dw^{[1]} dw[1] d b [ 1 ] db^{[1]} db[1]
    d W [ 1 ] = 1 m d Z [ 1 ] X dW^{[1]}=\frac{1}{m}dZ^{[1]}X dW[1]=m1dZ[1]X
    d b [ 1 ] = 1 m ∑ i = 1 m d Z i [ 1 ] db^{[1]}=\frac{1}{m}\sum_{i=1}^{m}dZ^{[1]}_i db[1]=m1i=1mdZi[1]

随机初始化

  • 如果参数的初值设为0,那隐藏层的多个隐藏单元计算出的数据全都是一样的,参数更新也会相同,这会使多个隐藏单元的设计变得无用,拖慢梯度下降的速度。
  • 通常会将参数初始化为一个很小的值,例如:
w=np.random.randn((2,2))*0.01
  • 如果使用的是 t a n h tanh tanh函数,如果将参数设置的非常大,会使输出值落在 t a n h tanh tanh的最右边或者最左边,也就是 t a n h tanh tanh变化非常平缓的部分,这并不利于后续计算。在单层网络中,0.01是一个很合适的值,但网络不同,这个数值也要相应的调整。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值