【笔记】 BP算法(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20936739/article/details/82250529

1. BP算法

神经网络的训练过程就是确定每层函数的权重W 和偏置b。为了确定权重和偏执,神经网络采用梯度下降的的方式,即对所有参数设定一个不为零的随机初始值,然后对各个参数求偏导,得到梯度反方向后进行不断迭代。

BP算法目的是解决一个问题:复合函数的求导。

2.一个简单的例子

来源:https://www.zhihu.com/question/27239198

作者:Anonymous(侵删)

这个例子简单来说就是:复合函数为 e= (a+b)*(b+1),求a=2,b=1处偏导数。

正常求导方式是利用链式法则:

链式法则是一层一层求导,如果更清楚地表示求导法则的过程,上面图可以画成

 也就是说,正常的链式求导法则是“相同路径相乘,不同路径相加”。链式求导法则是向前求导,对a求偏导从a=2-----> c=a+b------>e=c*d,而对b求导的时候,也要经过c=a+b  ---> e=c*d。这样会造成路径的冗余。这种方法实际上是一种搜索路径的方法,神经网通常规模很大,因此遍历路径很复杂。

反向算法避免了这个问题。

如果倒过来看,复合函数求导实际上就是从最后一层到第一层,先对各个部分求偏导,如对a求偏导,e--->c --->a,实际上就是a的偏导数d*\:\frac{\partial c}{\partial a}。d的值在BP算法的前向传播过程中进行计算d=b+1=2,同时会被该节点保存下来,只要计算\:\frac{\partial c}{\partial a}就可以了。

也就是说,反向传播求导需要知道的是输入数值(a,b)和之后的反向传播误差(backpropagation error),也就是此处的d和c。

输入通常位前一层神经元的输出或是输入层,而反向传播误差会在BP算法的向前传播过程中记录在每一层的节点中,计算导数是时,只要沿着路径把各层的传播误差乘起来即可。

猜你喜欢

转载自blog.csdn.net/qq_20936739/article/details/82250529