您的位置:首页 > 运维架构

理解反向传播(BackPropagation)算法(之一)

2017-07-13 14:22 232 查看

神经网络的训练——由浅入深理解反向传播算法之一

神经网络非常强大,经过足够大数据量的训练之后,在诸多问题上往往能够表现出惊人的准确性。而我们也认识到,神经网络之所以能够有如此强大的性能,与其对参数的训练是离不开的,之前我们从感觉上认识到,所谓训练其实就是对参数值进行合理的设定或拟合,但是具体采用了何种高深的算法才能够对数量如此庞大的参数群进行精确拟合呢?这就是我们今天要讨论的话题——神经网络的训练方法。

如果你想彻底了解神经网络是如何进行训练的,那么就一定要做好心理准备,因为这里涉及一些(但不是很多)数学推导(其实用到的也就是基础的高等数学多元微分和线性代数矩阵的知识罢了,没有特别高深的理论),只要用心感受,看个两三回总能看明白。

先举个例子,相信看了这个例子后你马上就能触类旁通,明白神经网络的训练原理

对于计科专业的小伙伴,相信大多都开过诸如人工智能或机器学习的课程吧(本通信狗表示并没有开过,只能苦苦地自己学)?实在不行貌似数学建模里也有涉及到关于“线性回归”的问题,这个问题其实敲级简单。举个栗子,比如给你一个关于北京房价的数据集,描述了北京的房价与地理位置的关系,{(4.5环,80k),(5环,70k),(6环,50k),(5.2环,71k),(4.8环,78k),(6.5环,40k)…}(纯属瞎编,明白意思就好),然后让你预测一个给定位置(比如5.5环)的房价,这个问题该怎么解决?

其实这就是一个最基本的线性回归问题。本例子给出的每一个元素都是一个二维向量,因此可以轻松地将其画在平面坐标系中,如下图所示



这样看起来是不是直观些?那么下面我们如何来预测一个任意给定位置的房价呢?直觉告诉你,你可以做出一条漂亮的连续曲线来串联这些点,然后也画在坐标平面上,就是这样



这样拟合完全可以,线性回归中实际上用的是更简单的直线进行的拟合,在这里其实就是一次函数,即线性模型试图学得一个模型:f(xi)=wxi+b,使得f(xi)约等于yi(1)解释下这个式子,这个模型对任意输出xi都可以输出一个预测结果f(xi)使得f(xi)尽量接近真实结果yi,模型的大致模样见下图:



OK,有了这个模型,我们就可以大胆的使用它对其它数据进行预测了。

但是以上的拟合图都是Matlab帮忙做的,这条一次函数直线的倾斜度和截距是怎么确定的?

这里很重要,回顾下模型的表达式f(xi)=wxi+b,要确定模型,我们唯一要做的就是确定w和b的值,使得模型对现有数据拟合的更准确。

如何合理的确定w和b?其实这里用的方法和后面神经网络训练的方法本质上也是一样的,简单粗暴,只需要让现有数据到这个一次函数线欧式距离累加起来最小就行。

稍稍解释一下,对于输入xi,模型输出的是f(xi),而真实的输出应该是yi,那么我们让模型的预测值与真实值之间的累积误差最小,这个模型不就是一个好的模型了吗?真实值yi我们都知道了呀,就是一开始给出的那一堆数据(我们现在可以称其为训练数据了),模型的参数w和x我们当成未知数来对待,就可以列出误差函数了,这里的误差我们使用均方误差,即

C(w,b)=∑i=1m(f(xi)−yi)2(2)其中C(w,b)表示均方误差,m表示训练集中元素的个数。

最后一步,确定模型的参数

总之,这个公式很容易理解,它是一个关于w和b的函数,我们的目标就是求这个函数的最小值点。不知大家高等数学下册的内容还记得不?多元函数求极值点的方法“很套路”,就是对此函的每一个自变量各自求一次导,然后另导数为零,解方程便得到极值点(可能不止一个),然后比较所有极值点对应函数值的大小,便能确定最小点,对应的极值点便是w和b最终应该取得值。由于这个式子的形式比较简单,相信你像考试一样拿起笔算两下就明白了(别犯懒~),输入公式实在太麻烦,而且这里重在获得启发性思考,重要的是神经网络的训练,所以我就不推下去了。

最后,相信你已经明白是怎么回事,对一个模型(比如此处的线性模型),正常情况下你都可以像上面一样列出模型的表达式(参数用未知数代替),然后理论上是可以列出这个模型的误差函数,然后利用数学知识获得误差的最小值,此最小值对应的参数取值就可以确定,然后这个模型得以训练~这就是训练原理,相信你通过本例能获得一定的收获,下期正式上干货,手推反向传播算法~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  神经网络 算法