学习笔记P12——BP算法

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

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

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

先介绍Gradient Descent的核心过程:

设network中的参数为:

学习笔记P12——BP算法

初始化参数为:

学习笔记P12——BP算法

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

学习笔记P12——BP算法

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

 

学习笔记P12——BP算法

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

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

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

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

学习笔记P12——BP算法

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

将其加和得到total loss L:

 

学习笔记P12——BP算法

对上面左右两边求微分:

学习笔记P12——BP算法

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

学习笔记P12——BP算法

经过输入,得到:

学习笔记P12——BP算法

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

学习笔记P12——BP算法

跟进Chain rule拆成两项:

学习笔记P12——BP算法

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

学习笔记P12——BP算法

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

根据:学习笔记P12——BP算法

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

学习笔记P12——BP算法

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

forward pass 的示例:

学习笔记P12——BP算法

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

backward pass:

学习笔记P12——BP算法

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

学习笔记P12——BP算法

第一项:

学习笔记P12——BP算法学习笔记P12——BP算法

对应的分布如下:

学习笔记P12——BP算法

第二项偏微分的形式:

学习笔记P12——BP算法

因为C和z的关系不明确,学习笔记P12——BP算法的值是不知道的。现在假设已经知道了学习笔记P12——BP算法学习笔记P12——BP算法的值,则学习笔记P12——BP算法的值就知道了,如下:

学习笔记P12——BP算法

学习笔记P12——BP算法

图示法:

学习笔记P12——BP算法

此处学习笔记P12——BP算法是常数,因为z在forward pass的过程中就已经确定了;

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

学习笔记P12——BP算法

只要确定了学习笔记P12——BP算法学习笔记P12——BP算法这两项,问题就都解决了。下面看看这两项该如何计算:

情况1:

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

学习笔记P12——BP算法

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

情况2:

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

学习笔记P12——BP算法

同上述可推出:

学习笔记P12——BP算法=学习笔记P12——BP算法(W5学习笔记P12——BP算法+W6学习笔记P12——BP算法

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

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

假设现在有6个neuron,没有neuron的activation function分别是z1,z2,z3,....,z6。现在要计算:学习笔记P12——BP算法

学习笔记P12——BP算法

总结:

学习笔记P12——BP算法

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

这样就可以用来更新参数学习笔记P12——BP算法

学习笔记P12——BP算法

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