508任务:对BP算法(反向传播算法 )理解与5.13式推导

     

误差逆传播算法是如今最成功,应用广泛的针对多层网络的学习算法,如今的许多学习算法都是它的变体与优化。不过初学很难理解,我也是学了不少时间才慢慢理解。

         推荐大家观看3Blue1Brown的3个关于深度学习的视频https://www.bilibili.com/video/BV1bx411M7Zx深度学习之神经网络的结构 part1

https://www.bilibili.com/video/BV1Ux411j7ri深度学习之梯度下降法  part2

https://www.bilibili.com/video/BV16x411V7Qg深度学习之反向传播算法  part3

        可以更好地理解BP算法。


一.概念与定义 from---百度百科---

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

反向传播算法主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止。

BP算法的学习过程由正向传播过程和反向传播过程组成。在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出与期望的误差的平方和作为目标函数,转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯量,作为修改权值的依据,网络的学习在权值修改过程中完成。误差达到所期望值时,网络学习结束。

激励传播

每次迭代中的传播环节包含两步:

  1. (前向传播阶段)将训练输入送入网络以获得激励响应;

  2. (反向传播阶段)将激励响应同训练输入对应的目标输出求差,从而获得隐层和输出层的响应误差。

权重更新

对于每个突触上的权重,按照以下步骤进行更新:

  1. 将输入激励和响应误差相乘,从而获得权重的梯度;

  2. 将这个梯度乘上一个比例并取反后加到权重上。

  3. 这个比例将会影响到训练过程的速度和效果,因此称为“训练因子”。梯度的方向指明了误差扩大的方向,因此在更新权重的时候需要对其取反,从而减小权重引起的误差。

二.通俗解释,个人理解,可能有误

1.首先要定义一大堆变量与概念。

训练集D={(x1,y1),(x2,y2),...,(xm,ym)},xi\inRd,yi\inRl.输入示例由d个属性描述(比如28*28的手写数字图片,输入是d=28*28个灰度数据),输出l维实值向量(输出0到9的数字)。

然后转化为多层前馈神经网络,有d个输入神经元,q个隐层神经元(对各个隐层神经元,阈值为γh),L个输出神经元(对各个输出神经元,阈值为\thetaj)。

 第i个输入神经元与第h个隐层神经元的连接权为Vih,第h个隐层神经元与第j个输出神经元的连接权为Whj

对第h个隐层神经元,接收量为\alpha h =\sum_{i=1}^{d}Vih*Xi,即所有输入值乘对应的权重的和,同理,   对第j个输出神经元,接收量为\beta j=\sum_{h=1}^{q}Whj*bh,b_{h}=f(\alpha _{j}-\gamma _{j})是隐层的输出量,用Sigmoid函数得出。

对训练例(xk,yk),假定神经网络的输出是\hat{y}k=\left (\hat{y}_{1}^{k},\hat{y}_{2}^{k},...,\hat{y}_{l}^{k} \right )中值最大的,即最有可能是结果的,然后对单个输出神经元的输出为\hat{y}_{j}^{k}=f\left ( \beta _{j}-\theta _{j} \right )=\sigma (\sum_{h=1}^{q}W_{hj}*b_{h}-\theta _{j}),为了更好比较,都会用挤压函数,将接收量减阈值的结果浓缩到0到1间的某个数,常用的为Sigmoid函数f(x)=\frac{1}{1+e^{-x}}

神经网络在(xk,yk)上的均方误差为E_{k}=\frac{1}{2}\sum_{j=1}^{l}(\hat{y}_{j}^{k}-y_{j}^{k})^{2},用E=\frac{1}{m}\sum_{k=1}^{m}E_{k}来表示测了m个训练集,得到m个误差,求和除m求平均值,这个平均值表示这个神经网络判断y_{j}^{k}的误差程度,误差小,说明测得准,反之越大,说明越垃圾。刚开始建立神经网络时,这个误差是很大的,因此我们要通过训练改一些数去减小预测的误差。


是哪些呢,我们发现通过修正权重和阈值可以减小误差,这个网络一共有d*q个Vih权重,q个γh阈值,q*L个Whj权重,L个阈值,这么多个数去修改,那改变量多大合适,可以更好得去减小误差。

这就是下一部分的内容,也是BP算法的精髓。

2.梯度下降策略

由高数微分学知识可得,函数值在某点沿梯度方向增长最快,加个负号,反方向及时下降最快。

(1).以Whj的改变量Δ为例,即\Delta W_{hj}=-\eta \frac{\partial E_{k}}{\partial W_{hj}},\eta是学习率


接下来就是纯粹的数学知识:链式法则求导

由链式法则可得\frac{\partial E_{k}}{\partial W_{hj}}= \frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}*\frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}*\frac{\partial \beta_{j}}{\partial W_{hj}},分成两部分算

(1)\frac{\partial \beta_{j}}{\partial W_{hj}}=\frac{\partial \sum_{h=1}^{q}W_{hj}*b_{h}}{\partial W_{hj}}=b_{h}

 

(2)\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}* \frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}这部分算别的修正值也会用,我们用g_{j}=-\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}* \frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}代指这一部分,注意,加了个负号。\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}= \frac{\partial \frac{1}{2}\sum_{j=1}^{l}(\hat{y}_{j}^{k}-y_{j}^{k})^{2}}{\partial \hat{y}_{j}^{k}}=(\hat{y}_{j}^{k}-y_{j}^{k}),算\frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}这部分要用到Sigmoid的一个性质,f{}'(x)=f(x)(1-f(x)),这样很方便的得出\frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}=f{}'(\beta _{j}-\theta _{j})= \hat{y}_{j}^{k}(1- \hat{y}_{j}^{k}) 

从而g_{j}=-\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}* \frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}= -\hat{y}_{j}^{k}(1- \hat{y}_{j}^{k})(\hat{y}_{j}^{k}-y_{j}^{k})=\hat{y}_{j}^{k}(1- \hat{y}_{j}^{k})(y_{j}^{k}-\hat{y}_{j}^{k})

综上,可得\Delta W_{hj}=-\eta *(-g_{j})*b_{h}=\eta g_{j}b_{h}


\Delta \theta _{j} ,\Delta V_{ih} ,\Delta \gamma _{h}都是类似过程,下面逐个写出公式


(2).\Delta \theta _{j}=-\eta \frac{\partial E_{k}}{\partial \theta _{j}},而\frac{\partial E_{k}}{\partial \theta _{j}}=\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}} \frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}} \frac{\partial \beta_{j}}{\partial\theta _{j}},前两部分在第(1)算过了,接下来看\frac{\partial \beta_{j}}{\partial\theta _{j}}=-1

故有\frac{\partial \beta_{j}}{\partial\theta _{j}}=-\eta g_{j}

(3)\Delta V_{ih} =-\eta \frac{\partial E_{k}}{\partial V_{ih} },即有\frac{\partial E_{k}}{\partial V_{ih} } = \frac{\partial E_{k}}{\partial b_{h} } \frac{\partial b_{h}}{\partial \alpha _{h} } \frac{\partial \alpha _{h}}{\partial V_{ih} },也是分成两部分算

 (1)\frac{\partial \alpha _{h}}{\partial V_{ih} }=x_{i}

 (2)\frac{\partial E_{k}}{\partial b_{h} } \frac{\partial b_{h}}{\partial \alpha _{h} },这部分算下一个也会用到,用e_{h}=-\frac{\partial E_{k}}{\partial b_{h} } \frac{\partial b_{h}}{\partial \alpha _{h} }代指,注意,有个负号,

\frac{\partial E_{k}}{\partial b_{h} } =\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \beta_{j} } \frac{\partial \beta _{j}}{\partial b _{h} }=\sum_{j=1}^{l}w_{hj}*(-g_{j})=-\sum_{j=1}^{l}w_{hj}*g_{j},而\frac{\partial b_{h}}{\partial \alpha _{h} }=b_{h}(1-b_{h})

即可得e_{h}=b_{h}(1-b_{h})\sum_{j=1}^{l}w_{hj}g_{j},

综上,可得\Delta V_{ih} =-\eta \frac{\partial E_{k}}{\partial V_{ih} }=\eta e_{h}x_{i}这也是书中5.13式的证明

(4)\Delta \gamma_{h} =-\eta \frac{\partial E_{k}}{\partial \gamma_{h}},即有\frac{\partial E_{k}}{\partial \gamma_{h} } = \frac{\partial E_{k}}{\partial b_{h} } \frac{\partial b_{h}}{\partial \alpha _{h} } \frac{\partial \alpha _{h}}{\partial \gamma_{h}}=(-e_{h})*(-1)=e_{h}

 故有\Delta \gamma_{h} =-\eta \frac{\partial E_{k}}{\partial \gamma_{h}}=-\eta e_{h}


终于,四个修正量的公式证明出来,通过输入训练集,然后根据结果和正确答案的误差去根据公式算出这四个修正量,随着训练量的增大,网络也在不断修正,然后误差越来越小 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值