吴恩达深度学习课程疑难点笔记系列-神经网络和深度学习-第2周

本笔记系列参照吴恩达深度学习课程的视频和课件,并在学习和做练习过程中从CSDN博主何宽分享的文章中得到了帮助,再此表示感谢。


本周主要学习的内容有:二元分类、logistic回归、logistic回归损失函数、梯度下降法、计算图、logistic回归中的梯度下降法、向量化logistic回归以及梯度输出、Python广播操作


二元分类问题是指输出值为0或1的问题,属于离散输出问题,我们可以使用逻辑回归算法来解决,换句话来说逻辑回归可以有效解决输出值为0或1这样的二元分类问题。逻辑回归模型的数学表达如下

给定一个输出 x ( i ) x^{(i)} x(i)及其对应的标签值 y ( i ) y^{(i)} y(i):
我们首先进行初始化权重W和偏差b后得到
z ( i ) = w T x ( i ) + b (1) z^{(i)} = w^T x^{(i)} + b \tag{1} z(i)=wTx(i)+b(1)
根据sigmoid激活函数我们可以得到本次模型的预测值 y ^ ( i ) \hat{y}^{(i)} y^(i):
y ^ ( i ) = a ( i ) = s i g m o i d ( z ( i ) ) = 1 1 + e − z (2) \hat{y}^{(i)} = a^{(i)} = sigmoid(z^{(i)})=\frac{1}{1+e^{-z}}\tag{2} y^(i)=a(i)=sigmoid(z(i))=1+ez1(2)
进一步我们得出本次输出的损失函数为:
L ( a ( i ) , y ( i ) ) = − y ( i ) log ⁡ ( a ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − a ( i ) ) (3) \mathcal{L}(a^{(i)}, y^{(i)}) = - y^{(i)} \log(a^{(i)}) - (1-y^{(i)} ) \log(1-a^{(i)})\tag{3} L(a(i),y(i))=y(i)log(a(i))(1y(i))log(1a(i))(3)

对于m个样本模型的损失函数为:
J = 1 m ∑ i = 1 m L ( a ( i ) , y ( i ) ) (4) J = \frac{1}{m} \sum_{i=1}^m \mathcal{L}(a^{(i)}, y^{(i)})\tag{4} J=m1i=1mL(a(i),y(i))(4)

以上就是一次前向传播的推导过程,如下图中蓝色箭头所示,
在这里插入图片描述
而对于反向传播实际上等效于复合函数求导,反向传播过程如下图中的红色箭头所示:
在这里插入图片描述
逻辑回归模型的反向传播推导过程如下:

为方便说明,先讨论一个样本,由上图及微积分中的链式法则可知:

∂ L ∂ w = ∂ L ∂ a ∂ a ∂ z ∂ z ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \frac{\partial a}{\partial z} \frac{\partial z}{\partial w} wL=aLzawz
∂ L ∂ b = ∂ L ∂ a ∂ a ∂ z ∂ z ∂ b \frac{\partial L}{\partial b} = \frac{\partial L}{\partial a} \frac{\partial a}{\partial z} \frac{\partial z}{\partial b} bL=aLzabz

  • 1.已知 L ( a , y ) = − [ y l o g ( a ) + ( 1 − y ) l o g ( 1 − a ) ] L(a,y)=-[ylog(a)+(1-y)log(1-a)] L(a,y)=[ylog(a)+(1y)log(1a)],很容易算出 ∂ L ∂ a = − y a + 1 − y 1 − a = a − y a ( 1 − a ) (5) \frac{\partial L}{\partial a} = - \frac{y}{a}+\frac{1-y}{1-a} = \frac{a-y}{a(1-a)} \tag{5} aL=ay+1a1y=a(1a)ay(5)

  • 2.另外 a = 1 1 + e − z a = \frac{1}{1+e^{-z}} a=1+ez1,则有 ∂ a ∂ z = a ( 1 − a ) (6) \frac{\partial a}{\partial z} = a(1-a) \tag{6} za=a(1a)(6)

  • 3.还有 z = w 1 x 1 + w 2 x 2 + b z = w_1x_1+w_2x_2+b z=w1x1+w2x2+b,故 ∂ z ∂ w = [ x 1 , x 2 ] (7) \frac{\partial z}{\partial w}=[x_1, x_2] \tag{7} wz=[x1,x2](7)

同理有 ∂ z ∂ b = 1 (8) \frac{\partial z}{\partial b} = 1 \tag{8} bz=1(8)

通过(5)~(8)式得出对于单个样本有:
∂ L ∂ w = ∂ L ∂ a ∂ a ∂ z ∂ z ∂ w = a − y a ( 1 − a ) a ( 1 − a ) x = ( a − y ) x \frac{\partial L}{\partial w} =\frac{\partial L}{\partial a} \frac{\partial a}{\partial z} \frac{\partial z}{\partial w} = \frac{a-y}{a(1-a)} a(1-a)x \\= (a-y)x wL=aLzawz=a(1a)aya(1a)x=(ay)x

∂ L ∂ b = ∂ L ∂ a ∂ a ∂ z ∂ z ∂ b = a − y a ( 1 − a ) a ( 1 − a ) = ( a − y ) \frac{\partial L}{\partial b} =\frac{\partial L}{\partial a} \frac{\partial a}{\partial z} \frac{\partial z}{\partial b} = \frac{a-y}{a(1-a)} a(1-a) \\ = (a-y) bL=aLzabz=a(1a)aya(1a)=(ay)

对于所有样本则有如下(9)(10)公式所示:

  • 给定一组逻辑回归模型输入矩阵 X
  • 我们通过计算得到 A = σ ( w T X + b ) = ( a ( 0 ) , a ( 1 ) , . . . , a ( m − 1 ) , a ( m ) ) A = \sigma(w^T X + b) = (a^{(0)}, a^{(1)}, ..., a^{(m-1)}, a^{(m)}) A=σ(wTX+b)=(a(0),a(1),...,a(m1),a(m))
  • 然后我们可以计算逻辑回归模型的损失函数 J = − 1 m ∑ i = 1 m y ( i ) log ⁡ ( a ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − a ( i ) ) J = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\log(a^{(i)})+(1-y^{(i)})\log(1-a^{(i)}) J=m1i=1my(i)log(a(i))+(1y(i))log(1a(i))
  • 根据上面(5)(6)(7)(8)公式的推导出
    d w = ∂ J ∂ w = 1 m X ( A − Y ) T (9) dw=\frac{\partial J}{\partial w} = \frac{1}{m}X(A-Y)^T\tag{9} dw=wJ=m1X(AY)T(9)
    d b = ∂ J ∂ b = 1 m ∑ i = 1 m ( a ( i ) − y ( i ) ) (10) db=\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^m (a^{(i)}-y^{(i)})\tag{10} db=bJ=m1i=1m(a(i)y(i))(10)

根据(9)(10)公式得到的dw和db,模型会对参数进行一次更新:
w ′ = w − α d w w'=w-\alpha{dw} w=wαdw
b ′ = b − α d b b'=b-\alpha{db} b=bαdb
得到w’和b’重新进行前向传播,得到新的输出值,代价函数,如此循环…

因此,从以上的推理分析来看,深度神经网络的训练计算过程我们可以这样来理解:

  • 对于给定的输入X及其标签Y,我们首先给模型初始化设置一组参数W和b,学习速率 α \alpha α
  • 模型根据参数对输入X进行计算,得到预测值 Y ^ \hat Y Y^
  • 通过标签Y和预测值 Y ^ \hat Y Y^,我们计算得到模型本次输出的损失函数J,至此这是模型的一次前向传播过程
  • 很明显,模型不可能只进行一次训练就能让预测值 Y ^ \hat Y Y^十分接近标签值Y,我们需要将不断地减小损失函数J,而让函数曲线递减,用微积分的观念理解是不断地给损失函数一个递减量dJ,理解到这儿后,我们可以联想到复合函数的求导概念,要想损失函数在下一次输出时变换一个递减量dJ,我们只需要更新下参数w和b的值即可,而反向传播就是为了计算得出参数W和b在下一次训练需要的变化量dw和db,所以根据公式(9)(10),模型得到新的参数w’和b’,这样模型可以进行新的一次迭代,如此反复,指的模型的损失函数值达到我们可接受的范围为止。

Python中的广播机制(Broadcasting):如果你有一个mn的矩阵,让它加减乘除一个1n的矩阵,它会被复制m次,成为一个mn的矩阵,然后再逐元素地进行加减乘除操作。同样地对m1的矩阵成立,广播机制可以减少我们的代码量,特别是for循环,在深度学习编程中我们要遵循的一条重要规则是:无论何时,尽可能地避免显示地使用for循环
在这里插入图片描述
广播机制在深度学习函数构建中应用得很广,比如说我们在逻辑回归函数中,激活函数z = wT * X + b, b是一个数而前面的wT * X是一个1*n的矩阵,由于python这种机制,不需要我们为b构建向量,这就减轻了代码量。

注意:Python和numpy中矩阵的元素乘法用a*b表示,而矩阵的乘法运算用np.dot(a,b)表示
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值