L1 神经网络和深度学习 Week4(吴恩达)

1.神经网络的表示

在这里插入图片描述

对于这个两层的神经网络,输入层为 x 1 x1 x1 x 2 x2 x2 x 3 x3 x3可以用 a [ 0 ] a^{[0]} a[0]代替,隐藏层记作 a [ 1 ] a^{[1]} a[1],隐藏层包含有四个节点,所以是一个4x1的矩阵,如下所示
a [ 0 ] = [ x 1 x 2 x 3 ] a^{[0]} = \begin{bmatrix} x1\\ x2\\ x3 \end{bmatrix} a[0]= x1x2x3
a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] a^{[1]} = \begin{bmatrix} a_1^{[1]} \\ a_2^{[1]} \\ a_3^{[1]} \\ a_4^{[1]} \end{bmatrix} a[1]= a1[1]a2[1]a3[1]a4[1]
在这里插入图片描述
对于上述两层的神经网络的计算总共有两个步骤:

  • 第一步,计算 z 1 [ 1 ] z_{1}^{[1]} z1[1] z 1 [ 1 ] z_{1}^{[1]} z1[1]= w 1 [ 1 ] T w_{1}^{[1]T} w1[1]T x {x} x+ b 1 [ 1 ] b_{1}^{[1]} b1[1]
  • 第二步,通过激活函数计算 a 1 [ 1 ] a_{1}^{[1]} a1[1] a 1 [ 1 ] a_{1}^{[1]} a1[1]= σ ( z 1 [ 1 ] ) \sigma(z_{1}^{[1]}) σ(z1[1])
    隐藏层的第二个以及后面的两个神经元计算过程一样,分别得到 a 2 [ 1 ] a_{2}^{[1]} a2[1] a 3 [ 1 ] a_{3}^{[1]} a3[1] a 4 [ 1 ] a_{4}^{[1]} a4[1],详细步骤如下:

z 1 [ 1 ] = w 1 [ 1 ] T x + b 1 [ 1 ] , a 1 [ 1 ] = σ ( z 1 [ 1 ] ) z 2 [ 1 ] = w 2 [ 1 ] T x + b 2 [ 1 ] , a 2 [ 1 ] = σ ( z 2 [ 1 ] ) z 3 [ 1 ] = w 3 [ 1 ] T x + b 3 [ 1 ] , a 3 [ 1 ] = σ ( z 3 [ 1 ] ) z 4 [ 1 ] = w 4 [ 1 ] T x + b 4 [ 1 ] , a 4 [ 1 ] = σ ( z 4 [ 1 ] ) \begin{align*} z_1^{[1]} &= w_1^{[1]T}x + b_1^{[1]}, & a_1^{[1]} &= \sigma(z_1^{[1]}) \\ z_2^{[1]} &= w_2^{[1]T}x + b_2^{[1]}, & a_2^{[1]} &= \sigma(z_2^{[1]}) \\ z_3^{[1]} &= w_3^{[1]T}x + b_3^{[1]}, & a_3^{[1]} &= \sigma(z_3^{[1]}) \\ z_4^{[1]} &= w_4^{[1]T}x + b_4^{[1]}, & a_4^{[1]} &= \sigma(z_4^{[1]}) \end{align*} z1[1]z2[1]z3[1]z4[1]=w1[1]Tx+b1[1],=w2[1]Tx+b2[1],=w3[1]Tx+b3[1],=w4[1]Tx+b4[1],a1[1]a2[1]a3[1]a4[1]=σ(z1[1])=σ(z2[1])=σ(z3[1])=σ(z4[1])

单样本向量化,把上诉四个等式向量化。向量化的过程是将神经网络中的一层神经元参数纵向堆积起来,例如隐藏层中 w w w的纵向堆积起来变成一个的矩阵,用符号 W [ 1 ] W^{[1]} W[1]表示。另一个看待这个的方法是我们有四个逻辑回归单元,且每一个逻辑回归单元都有相对应的参数——向量,把这四个向量堆积在一起,你会得出这4×3的矩阵。
公式1.1 z [ n ] = w [ n ] x + b [ n ] z^{[n]}=w^{[n]}x+b^{[n]} z[n]=w[n]x+b[n]
公式1.2 a [ n ] = σ ( z [ n ] ) a^{[n]}=\sigma(z^{[n]}) a[n]=σ(z[n])
详细过程如下:

公式1.3:
a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] = σ ( z [ 1 ] ) a^{[1]} = \begin{bmatrix} a_1^{[1]} \\ a_2^{[1]} \\ a_3^{[1]} \\ a_4^{[1]} \end{bmatrix} = \sigma(z^{[1]}) a[1]= a1[1]a2[1]a3[1]a4[1] =σ(z[1])

公式1.4:
[ z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] z 4 [ 1 ] ] = [ ⋯ W 1 [ 1 ] T ⋯ ⋯ W 2 [ 1 ] T ⋯ ⋯ W 3 [ 1 ] T ⋯ ⋯ W 4 [ 1 ] T ⋯ ] ⋅ [ x 1 x 2 x 3 ] + [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] b 4 [ 1 ] ] \begin{bmatrix} z_1^{[1]} \\ z_2^{[1]} \\ z_3^{[1]} \\ z_4^{[1]} \end{bmatrix} = \begin{bmatrix} \cdots & W_1^{[1]T} & \cdots \\ \cdots & W_2^{[1]T} & \cdots \\ \cdots & W_3^{[1]T} & \cdots \\ \cdots & W_4^{[1]T} & \cdots \end{bmatrix} \cdot \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} z1[1]z2[1]z3[1]z4[1] = W1[1]TW2[1]TW3[1]TW4[1]T x1x2x3 + b1[1]b2[1]b3[1]b4[1]
对于神经网络的第一层,给予一个输入x,得到 a [ 1 ] a^{[1]} a[1],x可以表示为 a [ 0 ] a^{[0]} a[0]。通过相似的衍生你会发现,后一层的表示同样可以写成类似的形式,得到 a [ 2 ] a^{[2]} a[2] y ^ = a [ 2 ] \hat y=a^{[2]} y^=a[2],具体过程见公式1.1、1.2
在这里插入图片描述

2.多样本向量化

上一节讲述了深度神经网络的基础。它们公用的如向量 a [ 1 ] a^{[1]} a[1] a [ 2 ] a^{[2]} a[2] z [ 1 ] z^{[1]} z[1] z [ 2 ] z^{[2]} z[2]

对于一个给定的输入向量 X X X,这四个等式可以计算出 a [ 2 ] a^{[2]} a[2]等于 y ^ \hat y y^。这是针对于每一层的激活状态。如果有m个训练样本,那么这些变量是这个过程。

用第一个训练样本来计算 y ^ [ 1 ] \hat y^{[1]} y^[1],就是第一个训练样本上导出的结果。

然后,用 x [ 2 ] x^{[2]} x[2]来计算出预测值 y ^ [ 2 ] \hat y^{[2]} y^[2],循环往复直到用 x [ m ] 计算出 x^{[m]}计算出 x[m]计算出 y ^ [ m ] \hat y^{[m]} y^[m]

用激活函数表示法,如下图左下表示写为 a [ 2 ] ( 1 ) a^{[2](1)} a[2](1) a [ 2 ] ( m ) a^{[2](m)} a[2](m)


【注意】: a [ 2 ] ( i ) , ( i ) a^{[2](i)},(i) a[2](i)(i)是指第 i i i个训练样本而 [ 2 ] [2] [2]是指第二层。
如果有一个非向量化形式的实现,而且要计算出它的预测值,对于所有训练样本,需要让 i i i从1到实现这四个等式:
z [ 1 ] ( i ) = W [ 1 ] ( i ) a [ i ] + b [ 1 ] ( i ) z^{[1](i)} = W^{[1](i)} a^{[i]} + b^{[1](i)} z[1](i)=W[1](i)a[i]+b[1](i)
a [ 1 ] ( i ) = σ ( z [ 1 ] ( i ) ) a^{[1](i)} = \sigma(z^{[1](i)}) a[1](i)=σ(z[1](i))
z [ 2 ] ( i ) = W [ 2 ] ( i ) a [ 1 ] ( i ) + b [ 2 ] ( i ) z^{[2](i)} = W^{[2](i)} a^{[1](i)} + b^{[2](i)} z[2](i)=W[2](i)a[1](i)+b[2](i)
a [ 2 ] ( i ) = σ ( z [ 2 ] ( i ) ) a^{[2](i)} = \sigma(z^{[2](i)}) a[2](i)=σ(z[2](i))
对于上面的这个方程中的 i i i,是所有依赖于训练样本的变量,即将 i i i添加到 x x x z z z a a a。如果想计算个训练样本上的所有输出,就应该向量化整个计算,以简化这列。
x = [ ⋮ ⋮ ⋮ ⋮ x ( 1 ) x ( 1 ) ⋯ x ( m ) ⋮ ⋮ ⋮ ⋮ ] x=\begin{bmatrix} \vdots & \vdots & \vdots& \vdots & \\ x^{(1)} & x^{(1)} &\cdots&x^{(m)} & \\ \vdots &\vdots & \vdots & \vdots & \end{bmatrix} x= x(1)x(1)x(m)

Z [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ z [ 1 ] ( 1 ) z [ 1 ] ( 2 ) ⋯ z [ 1 ] ( m ) ⋮ ⋮ ⋮ ⋮ ] Z^{[1]}=\begin{bmatrix} \vdots & \vdots & \vdots& \vdots & \\ z^{[1](1)} & z^{[1](2)}&\cdots&z^{[1](m)}& \\ \vdots &\vdots & \vdots & \vdots & \end{bmatrix} Z[1]= z[1](1)z[1](2)z[1](m)
A [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ a [ 1 ] ( 1 ) a [ 1 ] ( 2 ) ⋯ a [ 1 ] ( m ) ⋮ ⋮ ⋮ ⋮ ] A^{[1]}=\begin{bmatrix} \vdots & \vdots & \vdots& \vdots & \\ a^{[1](1)} &a^{[1](2)}&\cdots&a^{[1](m)}& \\ \vdots &\vdots & \vdots & \vdots & \end{bmatrix} A[1]= a[1](1)a[1](2)a[1](m)
z [ 1 ] ( i ) = W [ 1 ] ( i ) a ( i ) + b [ 1 ] a [ 1 ] ( i ) = σ ( z [ 1 ] ( i ) ) z [ 2 ] ( i ) = W [ 2 ] ( i ) a [ 1 ] ( i ) + b [ 2 ] a [ 2 ] ( i ) = σ ( z [ 2 ] ( i ) ) ⇒ { A [ 1 ] = σ ( Z [ 1 ] ) Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] A [ 2 ] = σ ( Z [ 2 ] ) \begin{align*} z^{[1](i)} &= W^{[1](i)} a^{(i)} + b^{[1]} \\ a^{[1](i)} &= \sigma(z^{[1](i)}) \\ z^{[2](i)} &= W^{[2](i)} a^{[1](i)} + b^{[2]} \\ a^{[2](i)} &= \sigma(z^{[2](i)}) \end{align*} \Rightarrow \begin{cases} A^{[1]} = \sigma(Z^{[1]}) \\ Z^{[2]} = W^{[2]} A^{[1]} + b^{[2]} \\ A^{[2]} = \sigma(Z^{[2]}) \end{cases} z[1](i)a[1](i)z[2](i)a[2](i)=W[1](i)a(i)+b[1]=σ(z[1](i))=W[2](i)a[1](i)+b[2]=σ(z[2](i)) A[1]=σ(Z[1])Z[2]=W[2]A[1]+b[2]A[2]=σ(Z[2])

在这里插入图片描述

  • 输入向量: x x x

  • 第一层的权重和偏置: W [ 1 ] W^{[1]} W[1] b [ 1 ] b^{[1]} b[1]

  • 第一层的线性变换: z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]} = W^{[1]}x + b^{[1]} z[1]=W[1]x+b[1]

  • 第一层使用sigmoid函数的激活: a [ 1 ] = σ ( z [ 1 ] ) a^{[1]} = \sigma(z^{[1]}) a[1]=σ(z[1]),其中 σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1

  • 第二层的权重和偏置: W [ 2 ] W^{[2]} W[2] b [ 2 ] b^{[2]} b[2]

  • 第二层的线性变换: z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]} = W^{[2]}a^{[1]} + b^{[2]} z[2]=W[2]a[1]+b[2]

  • 第二层使用sigmoid函数的激活: a [ 2 ] = σ ( z [ 2 ] ) a^{[2]} = \sigma(z^{[2]}) a[2]=σ(z[2])

  • 损失函数: L ( a [ 2 ] , y ) \mathcal{L}(a^{[2]}, y) L(a[2],y),对于二分类问题,交叉熵损失函数定义为 − ( y log ⁡ ( a [ 2 ] ) + ( 1 − y ) log ⁡ ( 1 − a [ 2 ] ) ) -\left( y\log(a^{[2]}) + (1-y)\log(1-a^{[2]}) \right) (ylog(a[2])+(1y)log(1a[2])),其中 y y y 是真实标签(0或1), a [ 2 ] a^{[2]} a[2] 是预测概率,表示为正类的概率。

3.核对矩阵维度

在这里插入图片描述
举个例子: z [ 1 ] = W [ 1 ] ⋅ x + b [ 1 ] z^{[1]} = W^{[1]} \cdot x + b^{[1]} z[1]=W[1]x+b[1]
从上图可以看出: x x x 的维度是 (2,1),且 z [ 1 ] z^{[1]} z[1] 的维度是 (3,1)。由于等式两边维度一致,因此可以推出 W [ 1 ] W^{[1]} W[1] 的维度为 (3,2),且 b [ 1 ] b^{[1]} b[1] 也为 (3,1)。从正面看,因为第 1 层有 3 个神经元,且有 2 个输入,因此每个神经元中的参数要分别与两个输入相乘,也很容易得出 W [ 1 ] W^{[1]} W[1] 的维度。同理可以推出后面层的参数的维度,总结规律是:
W [ l ] = ( n [ l ] , n [ l − 1 ] ) W^{[l]} = (n^{[l]}, n^{[l-1]}) W[l]=(n[l],n[l1])
a [ l ] = ( n [ l ] , 1 ) a^{[l]} = (n^{[l]}, 1) a[l]=(n[l],1)
z [ l ] = b [ l ] = ( n [ l ] , 1 ) z^{[l]} = b^{[l]} = (n^{[l]}, 1) z[l]=b[l]=(n[l],1)
d x dx dx x x x 的维度相同若有 m m m个样本,将公式向量化之后只需将 a [ l ] a^{[l]} a[l] z [ l ] z^{[l]} z[l] 改为大写,并将 1 改为 m m m 即可(对 b b b,Python 的广播机制将其维数从 1 变为 m m m)。

4.前向传播

参数类型描述
x ( i ) x^{(i)} x(i) x ( i ) \mathbf{x}^{(i)} x(i)输入样本 i i i
W [ 1 ] W^{[1]} W[1] W [ 1 ] \mathbf{W}^{[1]} W[1]第一层权重矩阵
b [ 1 ] ( i ) b^{[1] (i)} b[1](i) b [ 1 ] \mathbf{b}^{[1]} b[1]第一层偏置向量
z [ 1 ] ( i ) z^{[1] (i)} z[1](i) z 1 ( i ) z^{(i)}_1 z1(i)第一层输出
a [ 1 ] ( i ) a^{[1] (i)} a[1](i) a 1 ( i ) a^{(i)}_1 a1(i)第一层激活值
W [ 2 ] W^{[2]} W[2] W [ 2 ] \mathbf{W}^{[2]} W[2]第二层权重矩阵
b [ 2 ] ( i ) b^{[2] (i)} b[2](i) b [ 2 ] \mathbf{b}^{[2]} b[2]第二层偏置向量
z [ 2 ] ( i ) z^{[2] (i)} z[2](i) z 2 ( i ) z^{(i)}_2 z2(i)第二层输出
y ^ ( i ) \hat{y}^{(i)} y^(i) y ^ ( i ) \hat{y}^{(i)} y^(i)神经网络的预测值
y ( i ) y^{(i)} y(i) y ( i ) y^{(i)} y(i)真实标签
y prediction ( i ) y^{(i)}_{\text{prediction}} yprediction(i) y prediction ( i ) y^{(i)}_{\text{prediction}} yprediction(i)预测是否正确
m m m m m m样本数量
J J J J J J损失函数

对于一个样本 x ( i ) x^{(i)} x(i):

z [ 1 ] ( i ) = W [ 1 ] x ( i ) + b [ 1 ] ( i ) (1) z^{[1] (i)} = W^{[1]} x^{(i)} + b^{[1] (i)} \tag{1} z[1](i)=W[1]x(i)+b[1](i)(1)

a [ 1 ] ( i ) = tanh ⁡ ( z [ 1 ] ( i ) ) (2) a^{[1] (i)} = \tanh(z^{[1] (i)}) \tag{2} a[1](i)=tanh(z[1](i))(2)

z [ 2 ] ( i ) = W [ 2 ] a [ 1 ] ( i ) + b [ 2 ] ( i ) (3) z^{[2] (i)} = W^{[2]} a^{[1] (i)} + b^{[2] (i)} \tag{3} z[2](i)=W[2]a[1](i)+b[2](i)(3)

y ^ ( i ) = a [ 2 ] ( i ) = σ ( z [ 2 ] ( i ) ) (4) \hat{y}^{(i)} = a^{[2] (i)} = \sigma(z^{[2] (i)}) \tag{4} y^(i)=a[2](i)=σ(z[2](i))(4)

y prediction ( i ) = { 1 if  a [ 2 ] ( i ) > 0.5 0 otherwise (5) y^{(i)}_{\text{prediction}} = \begin{cases} 1 & \text{if } a^{[2](i)} > 0.5 \\ 0 & \text{otherwise} \end{cases} \tag{5} yprediction(i)={10if a[2](i)>0.5otherwise(5)

给定所有样本的预测值,你也可以计算代价 J J J 如下:

J = − 1 m ∑ i = 0 m ( y ( i ) log ⁡ ( a [ 2 ] ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − a [ 2 ] ( i ) ) ) (6) J = - \frac{1}{m} \sum\limits_{i = 0}^{m} \left( y^{(i)}\log\left(a^{[2] (i)}\right) + (1-y^{(i)})\log\left(1- a^{[2] (i)}\right) \right) \tag{6} J=m1i=0m(y(i)log(a[2](i))+(1y(i))log(1a[2](i)))(6)

5.反向传播

在这里插入图片描述

  • 对于第二层的 z z z 值的偏导数:
    ∂ J ∂ z 2 ( i ) = 1 m ( a [ 2 ] ( i ) − y ( i ) ) \frac{\partial \mathcal{J} }{ \partial z_{2}^{(i)} } = \frac{1}{m} (a^{[2](i)} - y^{(i)}) z2(i)J=m1(a[2](i)y(i))

  • 对于第二层权重 W 2 W_2 W2 的偏导数:
    ∂ J ∂ W 2 = ∂ J ∂ z 2 ( i ) a [ 1 ] ( i ) T \frac{\partial \mathcal{J} }{ \partial W_2 } = \frac{\partial \mathcal{J} }{ \partial z_{2}^{(i)} } a^{[1] (i) T} W2J=z2(i)Ja[1](i)T

  • 对于第二层偏置 b 2 b_2 b2 的偏导数:
    ∂ J ∂ b 2 = ∑ i ∂ J ∂ z 2 ( i ) \frac{\partial \mathcal{J} }{ \partial b_2 } = \sum_i{\frac{\partial \mathcal{J} }{ \partial z_{2}^{(i)}}} b2J=iz2(i)J

  • 对于第一层的 z z z 值的偏导数:
    ∂ J ∂ z 1 ( i ) = W 2 T ∂ J ∂ z 2 ( i ) ∗ ( 1 − a [ 1 ] ( i ) 2 ) \frac{\partial \mathcal{J} }{ \partial z_{1}^{(i)} } = W_2^T \frac{\partial \mathcal{J} }{ \partial z_{2}^{(i)} } * ( 1 - a^{[1] (i) 2}) z1(i)J=W2Tz2(i)J(1a[1](i)2)

  • 对于第一层权重 W 1 W_1 W1 的偏导数:
    ∂ J ∂ W 1 = ∂ J ∂ z 1 ( i ) X T \frac{\partial \mathcal{J} }{ \partial W_1 } = \frac{\partial \mathcal{J} }{ \partial z_{1}^{(i)} } X^T W1J=z1(i)JXT

  • 对于第一层偏置 b 1 b_1 b1 的偏导数:
    ∂ J i ∂ b 1 = ∑ i ∂ J ∂ z 1 ( i ) \frac{\partial \mathcal{J} _i }{ \partial b_1 } = \sum_i{\frac{\partial \mathcal{J} }{ \partial z_{1}^{(i)}}} b1Ji=iz1(i)J

请注意,星号 ( * ) 表示元素级乘法。
在这里插入图片描述
以上图为例, 我们先计算 L = − y log ⁡ ( a [ 2 ] ) − ( 1 − y ) log ⁡ ( 1 − a [ 2 ] ) L = -y\log(a^{[2]}) - (1 - y)\log(1 - a^{[2]}) L=ylog(a[2])(1y)log(1a[2])

d a [ 2 ] da^{[2]} da[2] 对应于 a [ 2 ] a^{[2]} a[2] 的梯度, 根据 d a [ 2 ] = d L d a [ 2 ] = − y a [ 2 ] + 1 − y 1 − a [ 2 ] da^{[2]} =\frac {dL}{da^{[2]}}= \frac{-y}{a^{[2]}} + \frac{1-y}{1-a^{[2]}} da[2]=da[2]dL=a[2]y+1a[2]1y

根据链式法则计算 d z [ 2 ] = d a [ 2 ] ∗ d a [ 2 ] d z [ 2 ] dz^{[2]} = da^{[2]} *\frac{da^{[2]}}{dz^{[2]}} dz[2]=da[2]dz[2]da[2]

因为 a [ 2 ] = sigmoid ( z [ 2 ] ) a^{[2]} = \text{sigmoid}(z^{[2]}) a[2]=sigmoid(z[2]),所以 d a [ 2 ] d z [ 2 ] = a [ 2 ] ( 1 − a [ 2 ] ) \frac{da^{[2]}}{dz^{[2]}} = a^{[2]}(1 - a^{[2]}) dz[2]da[2]=a[2](1a[2])

因此 d z [ 2 ] = − y a [ 2 ] ( 1 − a [ 2 ] ) + 1 − y 1 − a [ 2 ] a [ 2 ] = a [ 2 ] − y dz^{[2]} = \frac{-y}{a^{[2]}} (1 - a^{[2]}) + \frac{1-y}{1-a^{[2]}} a^{[2]} = a^{[2]} - y dz[2]=a[2]y(1a[2])+1a[2]1ya[2]=a[2]y

d w [ 2 ] = d z [ 2 ] ∗ d z [ 2 ] d w [ 2 ] dw^{[2]} = dz^{[2]} *\frac{dz^{[2]}}{dw^{[2]}} dw[2]=dz[2]dw[2]dz[2] 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 [ 1 ] = d z [ 2 ] d w [ 2 ] a^{[1]} = \frac{dz^{[2]}}{dw^{[2]}} a[1]=dw[2]dz[2] a [ 1 ] a^{[1]} a[1] 是关于 w [ 2 ] w^{[2]} w[2] 的函数, d z [ 2 ] dz^{[2]} dz[2] 的链式法则计算 d w [ 2 ] dw^{[2]} dw[2]
( n [ 2 ] , 1 ) (n^{[2]}, 1) (n[2],1) d w [ 2 ] dw^{[2]} dw[2] 的维度为 ( n [ 2 ] , n [ 1 ] ) (n^{[2]}, n^{[1]}) (n[2],n[1]) a [ 1 ] a^{[1]} a[1] 的维度和 w [ 2 ] w^{[2]} w[2] 的维度相同。
( n [ 1 ] , 1 ) (n^{[1]}, 1) (n[1],1),因此, d z [ 2 ] dz^{[2]} dz[2] w [ 2 ] w^{[2]} w[2] 的函数,所以 d z [ 2 ] dz^{[2]} dz[2] 可以表示为,用 a [ 1 ] a^{[1]} a[1] 的函数表示。

所以 d w [ 2 ] = d z [ 2 ] × a [ 1 ] T dw^{[2]} = dz^{[2]} \times a^{[1]T} dw[2]=dz[2]×a[1]T d b [ 2 ] = d z [ 2 ] × d z [ 2 ] d b [ 2 ] = d z [ 2 ] db^{[2]} = dz^{[2]} \times \frac{dz^{[2]}}{db^{[2]}} = dz^{[2]} db[2]=dz[2]×db[2]dz[2]=dz[2]

接下来计算 d a [ 1 ] da^{[1]} da[1]

d a [ 1 ] = d z [ 2 ] ∗ d z [ 2 ] d a [ 1 ] da^{[1]} = dz^{[2]}* \frac{dz^{[2]}}{da^{[1]}} da[1]=dz[2]da[1]dz[2] z [ 2 ] = w [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]} = w^{[2]}a^{[1]} + b^{[2]} z[2]=w[2]a[1]+b[2] d z [ 2 ] d a [ 1 ] = w [ 2 ] \frac{dz^{[2]}}{da^{[1]}} = w^{[2]} da[1]dz[2]=w[2]

因此 d a [ 1 ] = w [ 2 ] T d z [ 2 ] da^{[1]} = w^{[2]T} dz^{[2]} da[1]=w[2]Tdz[2] d a [ 1 ] da^{[1]} da[1] 的维度和 a [ 1 ] a^{[1]} a[1] 的维度相同,即 ( n [ 1 ] , 1 ) (n^{[1]}, 1) (n[1],1) w [ 2 ] w^{[2]} w[2] 的维度为 ( n [ 2 ] , n [ 1 ] ) (n^{[2]}, n^{[1]}) (n[2],n[1]) d z [ 2 ] dz^{[2]} dz[2] 的维度为 ( n [ 2 ] , 1 ) (n^{[2]}, 1) (n[2],1),所以关于 w [ 2 ] w^{[2]} w[2] 的函数为 d z [ 2 ] dz^{[2]} dz[2] 的函数。

d z [ 1 ] = d a [ 1 ] ∗ d a [ 1 ] d z [ 1 ] = w [ 2 ] T d z [ 2 ] ∗ ( sigmoid函数的导数 ) = w [ 2 ] T d z [ 2 ] ∗ ( 1 − a [ 1 ] 2 ) dz^{[1]} = da^{[1]} \ast \frac{da^{[1]}}{dz^{[1]}} = w^{[2]T} dz^{[2]} \ast (\text{sigmoid函数的导数})=w^{[2]T} dz^{[2]}*(1-a^{[1]2}) dz[1]=da[1]dz[1]da[1]=w[2]Tdz[2](sigmoid函数的导数)=w[2]Tdz[2](1a[1]2)

d w [ 1 ] = d z [ 1 ] × x [ 1 ] T dw^{[1]} = dz^{[1]} \times x^{[1]T} dw[1]=dz[1]×x[1]T d z [ 1 ] = d z [ 1 ] d w [ 1 ] dz^{[1]} = \frac{dz^{[1]}}{dw^{[1]}} dz[1]=dw[1]dz[1]

d b [ 1 ] = d z [ 1 ] db^{[1]} = dz^{[1]} db[1]=dz[1]

sigmoid函数求导

f ′ ( x ) = d d x [ 1 1 + e − x ]   = ( 1 + e − x ) ⋅ d d x [ 1 + e − x ] − 1 ⋅ d d x [ e − x ] ( 1 + e − x ) 2   = ( 1 + e − x ) ⋅ ( − e − x ) − 1 ⋅ ( − e − x ) ( 1 + e − x ) 2   = e − x ( 1 + e − x ) 2 \begin{aligned} f'(x) &= \frac{d}{dx} \left[ \frac{1}{1 + e^{-x}} \right] \ &= \frac{(1 + e^{-x}) \cdot \frac{d}{dx} [1 + e^{-x}] - 1 \cdot \frac{d}{dx} [e^{-x}]}{(1 + e^{-x})^2} \ &= \frac{(1 + e^{-x}) \cdot (-e^{-x}) - 1 \cdot (-e^{-x})}{(1 + e^{-x})^2} \ &= \frac{e^{-x}}{(1 + e^{-x})^2} \end{aligned} f(x)=dxd[1+ex1] =(1+ex)2(1+ex)dxd[1+ex]1dxd[ex] =(1+ex)2(1+ex)(ex)1(ex) =(1+ex)2ex

6.作业部分(举个例子,其他分开写)

dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))

这段py代码是sigmoid函数的梯度
其中激活函数的输出为 A L = 1 1 + e − Z AL=\frac{1}{1 + e^{-Z}} AL=1+eZ1,Z表示线性层的输出。

  • 对于 sigmoid 激活函数,损失函数为交叉熵损失函数:
    L = − ( Y ⋅ log ⁡ ( A L ) + ( 1 − Y ) ⋅ log ⁡ ( 1 − A L ) ) L = - (Y \cdot \log(AL) + (1 - Y) \cdot \log(1 - AL)) L=(Ylog(AL)+(1Y)log(1AL))

  • 其中,Y 是真实标签,AL 是神经网络的输出。根据链式法则,我们可以将交叉熵损失函数对 AL 的梯度表示为:
    d L d A L = − ( Y A L − 1 − Y 1 − A L )   \frac{dL}{dAL} = - \left( \frac{Y}{AL} - \frac{1 - Y}{1 - AL} \right)\ dALdL=(ALY1AL1Y) 

    • 首先,将 np.divide(Y, AL)np.divide(1 - Y, 1 - AL) 分别求导:
      d d A L [ Y A L ] = 1 A L − Y A L 2 \frac{d}{dAL} \left[ \frac{Y}{AL} \right] = \frac{1}{AL} - \frac{Y}{AL^2} dALd[ALY]=AL1AL2Y
      d d A L [ 1 − Y 1 − A L ] = − 1 1 − A L − 1 − Y ( 1 − A L ) 2 \frac{d}{dAL} \left[ \frac{1 - Y}{1 - AL} \right] = \frac{-1}{1 - AL} - \frac{1 - Y}{(1 - AL)^2} dALd[1AL1Y]=1AL1(1AL)21Y

    • 然后,将这两个导数相加:

d d A L [ − Y A L + 1 − Y 1 − A L ] = − d d A L [ Y A L ] + d d A L [ 1 − Y 1 − A L ]   = − ( 1 A L − Y A L 2 ) + ( − 1 1 − A L − 1 − Y ( 1 − A L ) 2 )   = − 1 A L + 1 1 − A L + Y A L 2 + Y ( 1 − A L ) 2   = − 1 A L + 1 1 − A L + Y A L ( 1 − A L ) \begin{aligned} \frac{d}{dAL} \left[ - \frac{Y}{AL} + \frac{1 - Y}{1 - AL} \right] &= - \frac{d}{dAL} \left[ \frac{Y}{AL} \right] + \frac{d}{dAL} \left[ \frac{1 - Y}{1 - AL} \right] \ &= - \left( \frac{1}{AL} - \frac{Y}{AL^2} \right) + \left( \frac{-1}{1 - AL} - \frac{1 - Y}{(1 - AL)^2} \right) \ &= - \frac{1}{AL} + \frac{1}{1 - AL} + \frac{Y}{AL^2} + \frac{Y}{(1 - AL)^2} \ &= \frac{-1}{AL} + \frac{1}{1 - AL} + \frac{Y}{AL(1 - AL)} \end{aligned} dALd[ALY+1AL1Y]=dALd[ALY]+dALd[1AL1Y] =(AL1AL2Y)+(1AL1(1AL)21Y) =AL1+1AL1+AL2Y+(1AL)2Y =AL1+1AL1+AL(1AL)Y

  • 最后,整理一下表达式:
    d L d A L = − 1 A L + 1 1 − A L − Y A L + Y 1 − A L = − Y A L + 1 − Y 1 − A L \frac{dL}{dAL} = \frac{-1}{AL} + \frac{1}{1 - AL} - \frac{Y}{AL} + \frac{Y}{1 - AL} = - \frac{Y}{AL} + \frac{1 - Y}{1 - AL} dALdL=AL1+1AL1ALY+1ALY=ALY+1AL1Y

【参考】:
1.https://www.cnblogs.com/southtonorth/p/9512559.html
2.https://zhuanlan.zhihu.com/p/161458241
3.http://www.ai-start.com/dl2017/html/lesson1-week3.html

  • 36
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值