BP神经网络算法

来源:互联网 发布:青城山景区旅游数据 编辑:程序博客网 时间:2024/04/30 01:47

参考
学了一个星期高数,我以一个初学者的身份来描述一下这个算法,希望我能讲的通俗易懂。
1、在学习这个算法之前,先看一下如何解决下面这个问题。
有一组点{(2,3,5),(4,5,7),(6,8,10)},如何确定一条直线能最大的拟合这些点?
我们把这个问题转换一下就是,确定一个函数表达式z=f(x,y)=ax+by,使用这个函数表达式求得的值与真实点z坐标的值相差的平方S,
S=(2a+3b-5)²+(4a+5b-7)²+(6a+8b-10)²=56a²+98b²+174+148ab-196a-260b,
现在我们胡乱地给a,b赋值,a=1,b=2,那么
S=(1*2+2*3-5)²+(1*4+2*5-7)²+(1*6+2*8-10)²=9+49+144=202;
因为a,b是我们随便取的值,所以此时很大概率这两个值不合理,也是说a,b可以取其他的值可以让s更小。那么问题来了,怎么我们通过什么方法可以快速的取到合理的a,b值?
数学中有一个概念叫梯度,它其实就是一个向量(▽=ci+dj),每个方向上的值就是函数在这个方向上的偏导数。但是这个向量很神奇,怎么神奇呢?如果说,在三维坐标某一点的二维坐标(x,y)上的值p1(1,2),你想通过改变x、y的坐标值来移动这个点来改变z的值,并且让z的值减小的最快,那么你就可以沿着梯度这个向量移动。那么问题又来了如何计算梯度?
首先,梯度的表达式:梯度公式
所以S的梯度表达式▽=(112a+148b-196)i+(196b+148a+260)j,现在把a=1,b=2代入可得▽=212i+232j,然后你就可以通过上个a,b的点p2(1,2)减去这个梯度向量(212,232),得到一个新的点(-211,-231),你将这个点代入S的表达式发现,S的值更大了,,,,这是不是与我们预期的目标不相符?只是为什么呢?
你可能会说,现在a,b取的就是最合理的值,但是这不可能,因为如果此时的a,b值最合理,那么他的梯度应该是0向量。
那是为什么?
想象一下,你在攀登一座山,你本来想登顶,在你快到顶的时候,你一个大步迈过去,结果越过了山头,到达了更低的地方。你的方向没有错,只是因为你的步长太大了。所以你可以缩小步长,但是不改变方向。比如这次步长是原来的1/232,那么这次到达了点p3(20/232,1),现在我们看此时的代入S的表达式,如果还是比原来的大,那么继续缩小步长。如果比原来的小,此时其实有两种情况情况,一种情况是你依然在上坡,还有一种情况其实是你已经在走下坡路(请自行脑补登山过程)。假设是第一种情况,我们再求到达的这个点p3(20/232,1)的梯度,按照上一步的操作循环往复的做。如果是第二种情况,依然是在第一步的时候缩小步长。那么,你如何判别你是哪种情况呢?
你可以在在这一点梯度和上一点的梯度是否相反了。比如你在p3的梯度是(-1,-1),前面的p2的梯度是(212,232),那就是在走下坡路了,此时你需要继续缩短步长。
想了解更多,就看前面的参考吧,我当时是这个问题没搞懂,才看不懂bp,但是看完这个,我就懂了bp神经网络算法。