神经网络的训练——由浅入深理解反向传播算法之一
神经网络非常强大,经过足够大数据量的训练之后,在诸多问题上往往能够表现出惊人的准确性。而我们也认识到,神经网络之所以能够有如此强大的性能,与其对参数的训练是离不开的,之前我们从感觉上认识到,所谓训练其实就是对参数值进行合理的设定或拟合,但是具体采用了何种高深的算法才能够对数量如此庞大的参数群进行精确拟合呢?这就是我们今天要讨论的话题——神经网络的训练方法。
如果你想彻底了解神经网络是如何进行训练的,那么就一定要做好心理准备,因为这里涉及一些(但不是很多)数学推导(其实用到的也就是基础的高等数学多元微分和线性代数矩阵的知识罢了,没有特别高深的理论),只要用心感受,看个两三回总能看明白。
先举个例子,相信看了这个例子后你马上就能触类旁通,明白神经网络的训练原理
对于计科专业的小伙伴,相信大多都开过诸如人工智能或机器学习的课程吧(本通信狗表示并没有开过,只能苦苦地自己学)?实在不行貌似数学建模里也有涉及到关于“线性回归”的问题,这个问题其实敲级简单。举个栗子,比如给你一个关于北京房价的数据集,描述了北京的房价与地理位置的关系,{(4.5环,80k),(5环,70k),(6环,50k),(5.2环,71k),(4.8环,78k),(6.5环,40k)…}(纯属瞎编,明白意思就好),然后让你预测一个给定位置(比如5.5环)的房价,这个问题该怎么解决?
其实这就是一个最基本的线性回归问题。本例子给出的每一个元素都是一个二维向量,因此可以轻松地将其画在平面坐标系中,如下图所示
这样看起来是不是直观些?那么下面我们如何来预测一个任意给定位置的房价呢?直觉告诉你,你可以做出一条漂亮的连续曲线来串联这些点,然后也画在坐标平面上,就是这样
这样拟合完全可以,线性回归中 实际上用的是更简单的 直线进行的拟合,在这里其实就是一次函数,即线性模型试图学得一个模型:
OK,有了这个模型,我们就可以大胆的使用它对其它数据进行预测了。
但是以上的拟合图都是Matlab帮忙做的,这条一次函数直线的倾斜度和截距是怎么确定的?
这里很重要,回顾下模型的表达式
f(xi)=wxi+b
,要确定模型,我们唯一要做的就是确定
w
和
如何合理的确定
w
和
稍稍解释一下,对于输入
xi
,模型输出的是
f(xi)
,而真实的输出应该是
yi
,那么我们让模型的预测值与真实值之间的累积误差最小,这个模型不就是一个好的模型了吗?真实值
yi
我们都知道了呀,就是一开始给出的那一堆数据(我们现在可以称其为训练数据了),模型的参数
w
和
最后一步,确定模型的参数
总之,这个公式很容易理解,它是一个关于
最后,相信你已经明白是怎么回事,对一个模型(比如此处的线性模型),正常情况下你都可以像上面一样列出模型的表达式(参数用未知数代替),然后理论上是可以列出这个模型的误差函数,然后利用数学知识获得误差的最小值,此最小值对应的参数取值就可以确定,然后这个模型得以训练~这就是训练原理,相信你通过本例能获得一定的收获,下期正式上干货,手推反向传播算法~