神经网络识别训练(神经网络的训练)
神经网络识别训练(神经网络的训练)下面问题就转化为如何求出线性拟合公式中的a和b。我们知道不重合的2个点决定了一条直线,从5个点中任取2个点就能求出一组参数a、b,但是除非5点共线,否则其他3个点肯定有不在这条直线上的,如图2所示。这样求出来的直线将有以下特性:在少数点上没有误差,在其他点上有较大的误差。这通常不符合我们的需求,我们希望求拟合得到直线在每个点上都有尽量小的误差。我们可以假设这种线性关系为:假如我们经营着一家小卖部,夏天到了,有很多人来买冰可乐,我们统计了气温x和冰可乐y销量的数据,如表1所示,并绘制了散点图,如图1所示,随着气温的上升,冰可乐的销量也在提升,这也符合我们的常识,且气温和冰可乐销量似乎是一种线性关系。表1、气温和冰可乐销量图1、气温和冰可乐销量的散点图
摘要
本文由适创科技智测皓微团队工程师撰写,介绍了神经网络中几种较为广泛、基础的训练方式,帮助初学者快速熟悉并应用。
前言在前几篇文章中,我们介绍了神经网络的历史和基本结构,也举例展示了如何利用神经网络解决一些简单的问题,然而,使用神经网络解决分类或者回归等问题,不仅需要设计好神经网络的结构,更重要的是为网络中每个神经元的参数配置参数,即训练一个神经网络。为了解决这个问题,我们从最小二乘法(ordinary least squares)讲起。
最小二乘法相信很多人对线性回归问题并不陌生,但线性回归的公式是如何得到的可能就不一定清楚了。这里,我们以一个销售冰可乐的例子介绍使用最小二乘法解决线性回归问题。
假如我们经营着一家小卖部,夏天到了,有很多人来买冰可乐,我们统计了气温x和冰可乐y销量的数据,如表1所示,并绘制了散点图,如图1所示,随着气温的上升,冰可乐的销量也在提升,这也符合我们的常识,且气温和冰可乐销量似乎是一种线性关系。
表1、气温和冰可乐销量
图1、气温和冰可乐销量的散点图
我们可以假设这种线性关系为:
下面问题就转化为如何求出线性拟合公式中的a和b。我们知道不重合的2个点决定了一条直线,从5个点中任取2个点就能求出一组参数a、b,但是除非5点共线,否则其他3个点肯定有不在这条直线上的,如图2所示。这样求出来的直线将有以下特性:在少数点上没有误差,在其他点上有较大的误差。这通常不符合我们的需求,我们希望求拟合得到直线在每个点上都有尽量小的误差。
图2、使用2个点拟合得到直线
对于数据点,拟合的结果是,则拟合的误差是,误差越接近0,说明拟合得越好,一个自然的想法是将每个点上误差的绝对值加起来,以此评估拟合的准确性:
然而,由于该求和中包含绝对值这种不方便求导的函数,导致直接求出最小值存在困难。因此,可以使用平方代替绝对值函数,得到损失函数L,即:
可以看出,L是关于a、b的开口向上的二次函数,其分别对a、b求导,求解L的极值点,同时也是L的最小值点:
在我们销售冰可乐的例子中,可以求出相应的参数a和b,并把拟合得到的直线绘制出来,如图3所示。可以发现,拟合的直线在每个数据点上都有一定的误差,但整体上反映了数据点的趋势,这就是最小二乘法,即最小化均方误差。高斯-马尔科夫定理(Gauss-Markov Theorem)证明了如果误差满足零均值、同方差且互不相关,那么利用最小二乘法进行线性回归得到的估计参数是最佳的以及无偏的。在回归问题中,损失函数L通常使用均方误差。
图3、使用最小二乘法拟合得到直线
这样,对于一个拟合问题y=f(x θ),在确定了f的形式和观测到的数据后,问题就转化为了求最小时的θ。因此,损失函数L可以将拟合问题转化最优化问题,这方便了问题的求解。当然,解决同一个问题可以使用不同的损失函数,这样拟合得到的结果往往也是不同的,实际使用中要根据问题的具体情况和经验选取合适的损失函数。
类似的,神经网络也可以抽象为函数y=f(x θ),x是输入层,y是输出层,θ是神经元的权重,这样神经网络的训练问题就转化为优化损失函数了,然而对于神经网络,f(x θ)是十分复杂的,通常没有显式的表达式,导致优化目标是关于参数θ的复杂函数,首先很难求出损失函数关于θ的导数的表达式,其次即使求出了导数,也很难求出导数为0的点,最后,由于f(x θ)的复杂性,导致优化目标导数为0的地方可能有很多,很难找到其最小值。
那怎么才能求出使得求出最小时的θ或其近似值呢?我们可以使用梯度下降法(gradient descent)。
梯度下降法在一元微积分中,函数f(x)在点上的导数定义为:
它在几何上的含义就是f(x)在点上的切线。通常来说,为了计算某个函数f(x)的最大值或者最小值,通常都会计算它的导数f'(x),然后求解方程f'(x)=0就可以得到函数的临界点,进一步判断这些临界点是否是最大值或者最小值。但是对于比较复杂的f'(x),求解方程f'(x)=0可能是很难的,此时可以使用梯度下降法代替。f(x)在附近的Taylor级数是:
如果在附近想取一个x使得,则根据Taylor级数,忽略二阶小量的情况下,即:,取,即可满足,其中η是一个小量,一般称为步长或者学习率,这样。如果重复上述的过程,即:
当满足收敛条件(达到迭代步骤上限或者小于阈值)后,最后一次迭代获得就是使得f(x)达到最小的x的近似值。
我们以f(x)=x²最小值为例,展示梯度下降法的使用,f(x)的导数为f'(x)=2x,初始值取,步长取η=0.2,则:
以此类推,迭代9次后,已经非常接近f(x)=x²的最小值点0,如图4所示。
图4、梯度下降法示意
梯度下降法的效果很依赖f(x)的性质以及初值、步长η的取值。如果目标函数f(x)是凸函数,则一定能求出其唯一最小值,否则很有可能求出的是局部最小值,此时选取不同的初值可能取出不同的局部最小值。
为了保证迭代过程变化的稳定性,η的取值应该尽量小,满足忽略Taylor级数近似的条件,否则迭代结果可能不收敛,例如在上面的例子中,取η=1.1,迭代过程如图5所示,发现迭代过程反而在远离最小值点,的值越来越大。
图5、过大步长下的梯度下降法
当然,步长η的取值也不能过小,否则虽然可以收敛,但是需要迭代很多次才能达到最小值点的附近,取η=0.05,则迭代过程如图6所示,迭代10次后,,距离最小值点还有很大距离。
图6、过小步长下的梯度下降法
因此,步长的选择依赖于经验和尝试,可以依次尝试从大到小不同的步长,如果目标函数没有减小甚至增大,则步长过大,如果目标函数在减小,但是速度很慢,则步长过小,所以算法的步长需要多次尝试后才能得到一个较为适当的值。
对于多元函数,可以用梯度代替导数,由于梯度是函数值增大最快的方向,则梯度的反方向就是函数值下降的方向,这样也是梯度下降法名字的由来。形象上看,这一过程就像在山顶放了一个球,一松手它就会顺着山坡最陡峭的角度滚落到谷底,如图7所示。
图7、三维的梯度下降法示意
当然,这里介绍的是最简单的梯度下降法,为了更好地解决神经网络的训练问题,研究人员提出了随机梯度下降、带动量的梯度下降、自适应学习率梯度下降等等方法,在具体应用中可以按照需求选择合适的梯度下降法。
反向传播针对一个确定的神经网络问题y=f(x,θ),如何使用梯度下降法求出最优的参数θ呢?由于很难显式地写出f(x,θ),因此直接用优化的目标L对θ求导是不太现实的,为了求出L对θ的梯度,这里我们将y=f(x,θ)中的分解为
其中表示输出,表示输入经过n层网络后的输出,是第i层网络的参数,表示损失函数。如何才能求出 呢?我们从最好求的开始:
其中 可以根据求出,可以根据求出,因此能最终求出,类似的:
其中可以根据求出,但是怎么获得呢?根据链式法则:
由于可以根据求出,则可以根据求出。
这样,可以从神经网络的最后一层,依次求出每层中的和,这一过程被形象地称为反向传播(back propagation)。
训练在掌握了梯度下降和反向传播之后,我们就能正式开始训练神经网络了,首先为神经网络中的每个参数:赋一个初值,然后根据输入层算出每层的输出值,最后求出损失函数L,这一过程被称为向前传播。再根据反向传播原理,求出损失函数L对每个参数:的导数,就可以根据梯度下降法更新参数:
重复上述的向前传播、反向传播和权重更新的过程,就可以不断优化神经网络的参数,使得损失函数L不断降低,当权重更新迭代直至收敛时,就获得了最优的参数。
当然使用梯度下降加反向传播的方法优化损失函数L的过程往往不是一帆风顺的,这个过程中可能会遇到病态、局部极小值、高原、鞍点、悬崖、梯度爆炸等诸多问题,研究人员也提出正则化、自适应学习率等算法解决优化中的问题。到现在为止,神经网络的训练问题依然困扰着研究者,如何为神经网络选择越快越好的优化方法还是一门“玄学”。
封面来源:YOU CANalytics
作者:宗艺
工学硕士,适创科技图像算法工程师,曾先后在清华大学材料学院取得学士和硕士学位,求学期间从事金属材料智能设计研究。
编辑:田恒易