BP反向传播算法

目录

导语

什么是反向传播?

计算反向传播基本步骤

传播案例图解析

具体步骤

1.计算参数维度

​2.前向传播步骤及维度

​3.进行反向传播计算

结论公式


 


导语


   说到神经网络的实现,其实就是调整各个神经元之间的参数(w,b),但是介于各层神经元之间的连接,所以推出反向传播来实现各个参数的调整,接下来,我们看一下如何进行反向传播。


什么是反向传播?


   BP算法(即反向传播算法)适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。


计算反向传播基本步骤


1.    计算参数维度(方便计算矩阵相乘关系)
2.    梳理前向传播的步骤及维度(更好推导反向传播)
3.    进行反向传播计算(利用链式编程)

传播案例图解析



这是一个简单的神经网络结构图,输入两个维度的数据,最后通过两次sigmoid激活预测二分类结果。


具体步骤


1.计算参数维度


2.前向传播步骤及维度


3.进行反向传播计算


利用反向传播,进行梯度下降,求出dw1,dw2,db1,db2的值,然后使用公式计算


第一步,求da2的偏导数

(这里的da2只是一个符号,不要误会!!!以下符号相同)

\begin{aligned} da_2&=\frac{\partial{L}}{\partial{a_2}}\\ &=-[\frac{y}{a_2}+\frac{1-y}{1-a_2}\cdot(-1)]\\ &=\frac{1-y}{1-a_2}-\frac{y}{a_2}\\ &=\frac{a_2-a_2y}{a_2(1-a_2)}-\frac{y-a_2y}{a_1(1-a_2)}\\ &=\frac{a_2-y}{a_2(1-a_2)}\\ \end{aligned}

第二步,求dz2的偏导数(利用链式推导):

先求  \frac{\partial{a_2}}{\partial{z_2}}\\  的偏导

\begin{aligned} \frac{\partial{da_2}}{\partial{dz_2}}&=\frac{-e^{-z_2}\cdot(-1)}{(1+e^{-z_2})^2}\\ &=\frac{e^{-z_2}}{(1+e^{-z_2})^2}\\ &=\frac{1+e^{-z_2}-1}{(1+e^{-z_2})^2}\\ &=\frac{1+e^{-z_2}}{(1+e^{-z_2})^2}-\frac{1}{(1+e^{-z_2})^2}\\ &=a_2-{a_2}^2\\ &=a_2(1-a_2) \end{aligned}

通过上式求\frac{\partial{L}}{\partial{dz_2}}:

dz_2=\frac{\partial{L}}{\partial{z_2}} =\frac{\partial{L}}{\partial{a_2}}\cdot\frac{\partial{a_2}}{\partial{z_2}} =\frac{a_2-y}{a_2(1-a_2)}\cdot{a_2(1-a_2)}=a_2-y

第三步,通过得到dz2可以继续求偏导得到dw2,db2

在此之前,首先需要求得\frac{\partial{z_2}}{\partial{w_2}},\frac{\partial{z_2}}{\partial{b_2}}

\frac{\partial{z_2}}{\partial{w_2}}={a_1}^T

\frac{\partial{z_2}}{\partial{b_2}}=1

根据上面的偏导,可得:

下列公式涉及矩阵乘法,为了对应维度,计算结果如下{a_1}^T(3,m),dz_2(m,1)

dw_2 = \frac{\partial{L}}{\partial{z_2}}\cdot\frac{\partial{z_2}}{\partial{w_2}}={a_1}^T\cdot{dz_2}

db_2 = \frac{\partial{L}}{\partial{z_2}}\cdot\frac{\partial{z_2}}{\partial{b_2}}={dz_2}

第四步,继续求da1

在此之前,先求\frac{\partial{z_2}}{\partial{a_1}}

\frac{\partial{z_2}}{\partial{a_1}}={w_2}^T

下列公式涉及矩阵乘法,为了对应维度,计算结果如下dz_2(m,1),{w_2}^T(1,3)

da_1=\frac{\partial{L}}{\partial{a_1}} =\frac{\partial{L}}{\partial{z_2}}\cdot\frac{\partial{z_2}}{\partial{a_1}} ={dz_2}\cdot{w_2}^T

第五步,通过da1求dz1

在此之前,先求\frac{\partial{z_1}}{\partial{a_1}}

\frac{\partial{z_1}}{\partial{a_1}}=a_1\cdot(1-a_1)

根据此公式得到:

dz_1=\frac{\partial{L}}{\partial{z_1}} =\frac{\partial{L}}{\partial{a_1}}\cdot\frac{\partial{a_1}}{\partial{z_1}} =da_1\cdot{a_1}(1-a_1)

第六步,通过dz1求dw1,db1

在此之前,求\frac{\partial{z_1}}{\partial{w_1}}\frac{\partial{z_1}}{\partial{b_1}}

\frac{\partial{z_1}}{\partial{w_1}}=x^T

\frac{\partial{z_1}}{\partial{b_1}}=1

下列公式涉及矩阵乘法,为了对应维度,计算结果如下x^T(2,m),a_1(m,3)

dw_1=\frac{\partial{L}}{\partial{w_1}} =\frac{\partial{L}}{\partial{z_1}}\cdot\frac{\partial{z_1}}{\partial{w_1}}=x^Tdz_1

db_1=\frac{\partial{L}}{\partial{b_1}} =\frac{\partial{L}}{\partial{z_1}}\cdot\frac{\partial{z_1}}{\partial{b_1}}=dz_1

结论公式

  1. dz_2=a_2-y
  2. dw_2={a_1}^Tdz_2
  3. db_2=dz_2
  4. da_1=dz_2{w_2}^T
  5. dz_1=da_1\cdot{a_1}(1-a_1)
  6. dw_1=x^Tdz_1
  7. db_1=dz_1

由于以上公式都是在多样本的前提下计算的结果,为了保证计算参数的均值,对w,b等项进行平均值计算:

  1. dz_2=a_2-y
  2. dw_2=\frac{1}{m}{a_1}^Tdz_2
  3. db_2=\frac{1}{m}dz_2
  4. da_1=dz_2{w_2}^T
  5. dz_1=da_1\cdot{a_1}(1-a_1)
  6. dw_1=\frac{1}{m}x^Tdz_1
  7. db_1=\frac{1}{m}dz_1

以上就是反向传播推导算法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值