吴恩达老师课程中的BP网络的推导过程

本文详细介绍了神经网络的前向传播和反向传播过程,包括向量化实现和梯度计算。通过吴恩达的深度学习课程,作者对交叉熵损失函数进行了讨论,并解释了为何在反向传播中需要转置权重矩阵。文章旨在帮助读者理解这些关键概念和计算步骤。
摘要由CSDN通过智能技术生成

目录

前言

前向传播

前向传播向量化实现

损失函数

反向传播

反向传播推导过程

反向传播的过程如下

反向传播向量化

总结

前言

        本文根据吴恩达深度学习课程,给出了神经网络前向传播和反向传播的推导过程,本文给出了老师视频中没有推导的细节,纯数学推导。

前向传播

        在深度神经网络中,隐含层的数目可以有很多,这里拿出其中的第l层作为例子。还是引用老师视频里的符号输入为a^{^{[l-1]}},输出为a^{^{[l]}},缓存为z^{^{[l]}}。本文只讨论推导不讨论维度。

前向传播的式子可写为:

 z^{[l]}=W ^{^{[l]}}\cdot a^{[l-1]}+b^{[l]}

 a^{[l]}=g^{[l]}\cdot (z^{[l]})

 这里的a^{^{[l-1]}}表示隐含层l层前一层的输出,在前向传播过程中,作为下一层的输入使用。

前向传播向量化实现

 Z^{[l]}=W ^{^{[l]}}\cdot A^{[l-1]}+b^{[l]}

 A^{[l]}=g^{[l]}\cdot (Z^{[l]})

损失函数

        定义成交叉熵函数,在编程过程中给出公式就可以了,具体运算计算机就已经做好了,我们只需要清楚推导过程。明白网络如何工作就可以了。视频中使用的损失函数是交叉熵函数。a是预测值,y是真实值。X是输入样本。

L(a,y)=-y(loga+(1-y)log(1-a))

反向传播

        本质就是求梯度的过程,获取梯度之后对权值进行不断更新。从而获取最优的模型。在网络得到输出a^{^{[l]}}后,损失函数对其求导作为反向传播的输入,最后我们期望的到的值是dW ^{^{[l]}}db ^{^{[l]}},用来更新权值。dW ^{^{[l]}}db ^{^{[l]}}都是损失函数L(a,y)关于W ^{^{[l]}}b ^{^{[l]}}求导。
 

反向传播推导过程

dz^{^{[l]}}=\frac{\partial{} L}{\partial{} z^{[l]}} =\frac{\partial{} L}{\partial {} a^{^{[l]}}}\mathbf{}\times \frac{\partial a^{l}}{\partial z^{^{[l]}}}=da^{[l]}*g^{[l]}{}'(z^{[l]})  

dw^{^{[l]}}=\frac{\partial{} L}{\partial{} w^{[l]}} =\frac{\partial{} L}{\partial {} a^{^{[l]}}}\mathbf{}\times \frac{\partial a^{[l]}}{\partial z^{^{[l]}}}\times \frac{\partial z^{^{[l]}}}{\partial w^{[l]}}= dz^{[l]}\cdot X^{T}

视频中对于l层来说,X=a^{[l-1]}

dw^{^{[l]}}= dz^{[l]}\cdot a^{[l-1]T }

db^{^{[l]}}=\frac{\partial{} L}{\partial{} b^{[l]}} =\frac{\partial{} L}{\partial {} a^{^{[l]}}}\mathbf{}\times \frac{\partial a^{[l]}}{\partial z^{^{[l]}}}\times \frac{\partial z^{^{[l]}}}{\partial b^{[l]}}= dz^{[l]}

da^{^{[l-1]}}=\frac{\partial{} L}{\partial{} a^{[l-1]}} =\frac{\partial{} L}{\partial {} a^{^{[l]}}}\mathbf{}\times \frac{\partial a^{[l]}}{\partial z^{^{[l]}}}\times \frac{\partial z^{^{[l]}}}{\partial a^{[l-1]}}= dz^{[l]}\cdot w^{[l]T}=w^{[l]T}\cdot dz^{[l]}

        至于为什么w转置我的理解是这样的:设有n _ x个样本,隐含层数为n _ h,在网络进行正向传播时w维度为(n_h,n_x),在进行反向传播时刚好正向输入的层变成输出层,输出的层变成输入的,所以这个w应该转置,A转置的原因也应如此。个人理解,如有问题请各位大佬指正,小弟不甚感激。

                               将da^{^{[l-1]}}=w^{[l]T}dz^{[l]}   代入  dz^{^{[l]}}=da^{[l]}*g^{[l]}{}'(z^{[l]})   中得 :

 dz^{^{[l]}}=w^{[l+1]T}dz^{^{[l+1]}}*g^{[l]}{}'(z^{[l]})

反向传播的过程如下

dw^{^{[l]}}= dz^{[l]}\cdot a^{[l-1]T }

db^{^{[l]}}= dz^{[l]}

dz^{^{[l]}}=w^{[l+1]T}dz^{^{[l+1]}}*g^{[l]}{}'(z^{[l]})

反向传播向量化

dZ^{^{[l]}}=dA^{[l]}*g^{[l]}{}'(Z^{[l]})

dW^{^{[l]}}= \frac{1}{m}(dZ^{[l]}\cdot A^{[l-1]T})

db^{^{[l]}}=\frac{1}{m} (np.sum(dZ^{[l]},axis=1,keepdims=True))

dA^{^{[l-1]}}=W^{[l]T}\cdot dA^{[l]}   

老师在视频中说这个值没有什么意义,我个人觉得这只是个中间值。

根据样本的维度会有m个w和b产生,所以求一下均值。

总结

        推导过程就是链式求导法则的应用,搞清楚每个参数的作用和神经网络的原理是推导的前提,过程还是挺复杂的,我在学习的过程中一直很迷糊,所以整理成这篇文章,文中如果有错误,请大家指出,共同学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值