学习笔记P12——BP算法

学习网址:https://www.bilibili.com/video/av48285039?p=12

用gradient descent的方法来train一个neuron network应该怎么做?通常利用BP【Backpropagation】算法。

本文主要介绍BP如何让neuron network的training变得有效率。

先介绍Gradient Descent的核心过程:

设network中的参数为:

初始化参数为:

根据梯度下降的原理,现对每个参数求微分:

然后再进行第二步参数的更新计算:

 

直到找到最优的那个参数。

这个过程和一般的LR求解过程没有差异,但是其中最大的不同就是在neuron network中有非常非常多的参数。

例如在做语音辨识系统时,会有7、8层的layer,每层layer有1K个neuron,即有上百万个参数。所以参数微分的vector是非常庞大的,因此现在的问题是通过什么方式把这上百万维的vector计算出来。这个就是BP算法做的事情。

BP算法并不是一个和GD不同的算法,它也是一个GD,只不过它是一个比较有效的演算法。BP算法我们需要注意的地方只有一个:链式法则(chain rule)。

Cn表示NN输出结果和实际结果之间的距离:距离越小NN效果越好,距离越大NN效果越差。

将其加和得到total loss L:

 

对上面左右两边求微分:

只要能计算出一个batch data的偏微分再将其加和,就可以得到所有loss;先考虑某一个neuron:

经过输入,得到:

怎么求解C对W的偏微分:

跟进Chain rule拆成两项:

计算前一项,我们称为forward pass,计算后一项我们称为backward pass。

OK,首先看看forward pass的过程:

根据:

可以计算出w1,w2的偏微分:

根据如上可知:W的偏微分就是输入值X。

forward pass 的示例:

开始输入为(1,-1),第一层的第二个neuron的输入为-1, z对w求偏微分即为-1;第一个neuron的值为0.12,则第二层第二个neuron 对w的偏微分为0.12.

backward pass:

则对应的求解过程,链式法则:

第一项:

对应的分布如下:

第二项偏微分的形式:

因为C和z的关系不明确,的值是不知道的。现在假设已经知道了的值,则的值就知道了,如下:

图示法:

此处是常数,因为z在forward pass的过程中就已经确定了;

现在,再回头看看整个网络:

只要确定了这两项,问题就都解决了。下面看看这两项该如何计算:

情况1:

假设Z'和Z‘’对应的neuron是最后的output layer,即上面图示的样子,则可以得到:

C是损失函数,以上两项都是可以计算得到的,则问题解决。

情况2:

最后对应的不是output layer,如下形式:

同上述可推出:

=(W5+W6

这样依次往后面计算,直至到output layer那一层即可完成。

这样由前往后计算直观上感觉很复杂,其实实际上只要换一下视角,backward pass和forward pass 的运算量是一样的;

假设现在有6个neuron,没有neuron的activation function分别是z1,z2,z3,....,z6。现在要计算:

总结:

a是neuron的输出值,通过forward pass知道,这层的偏微分结果就是a,然后在通过计算backward pass的两者相乘即得到C对W的偏微分;然后将计算得到的加和得到:

这样就可以用来更新参数

这样的过程不断继续知道求解得到最优的解。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值