梯度下降法阿育王2017.6.131.引言梯度下降(GD)是最小化风险函数、损失函数的一种常用方法。在应用机器学习算法时,通常采用梯度下降法来对采用的算法进行训练。梯度下降法包含三种不同形式:批量梯度下降BGD(BatchGradientDescent)随机梯度下降SGD(StochasticGradientDescent)小批量梯度下降法MBGD(Mini-BatchGradientDescent)下文将以线性回归算法为例来对三种梯度下降法进行比较2.先导知识一元线性回归(拟合曲线)假设这里存在m=6组数据(x,y)从图上可以看出,大致数据的大致走势是可以用线性模型y=kx+b来表示的,为此我们建立一维线性回归模型。假设一维线性模型表达式如下:其中:hƟ(x)是假设函数,即要拟合的函数θ为待求解参数,即要迭代求解的值,θ求解出来了那最终要拟合的函数hƟ(x)就确定了。n表示输入特征数,为方便计算,所有的样本都加入了x0=1这个特征,所以维数为n+1维。对应的损失/误差函数,即估计值与真实值之间的差距,这里用2-范数表示为:其中:m是训练集的样本个数1/2是为了后面求导计算方便一个二维参数(θ0,θ1)组对应能量函数(描述整个系统的优化程度,随着网络的变化而减小,最终网络稳定时能量达到最小)的可视化图3.批量梯度下降法BGD更新算法的目的:误差函数尽可能小,即求解参数使误差函数尽可能小。主要思想:首先,随机初始化参数;然后,不断反复的更新参数使得误差函数减小,直到满足要求时停止。梯度下降算法,利用初始化的参数θ并且反复更新参数θ:α代表学习率,表示每次向着函数J最陡峭的方向迈步的大小(步长?)(1)将J(θ)对θ求偏导,得到每个θ对应的的梯度当m=1时,即只有一个样本数据(x,y),J对第j个参数θj的偏导数是:对所有m个样本数据,上述损失函数的偏导(累和)为:(2)由于是要最小化风险函数,所以按每个参数θ的梯度负方向,来更新每个θj(j=0,1,2,…,n)上例中,利用BGD求得由更新公式可知,批量梯度下降得到的是一个全局最优解,每一次的参数更新都用到了所有的训练数据,如果训练数据非常多的话,执行效率较低。批量梯度下降法的收敛图(迭代的次数相对较少):4.随机梯度下降法SGD由于批梯度下降每更新一个参数的时候,要用到所有样本,所以训练速度会随着样本数量的增加而变得非常缓慢。随机梯度下降正是为了解决这个办法而提出的。它是利用单个样本的损失函数对θ求偏导得到对应的梯度,来更新θ。上例中,利用SGD求得随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将参数迭代到最优解。对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。SGD的问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。随机梯度下降收敛图(SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。但是大体上是往着最优值方向移动。)5.小批量梯度下降法MBGD为综合解决BGD的训练速度慢,以及SGD的准确性低的问题,提出MBGD它是利用部分样本的损失函数对θ求偏导得到对应的梯度,来更新θ。6.总结方法优点缺点BGD最小化所有训练样本的损失函数,使得最终求解的是全局的最优解如果样本值很大的话,更新速度会很慢。SGD最小化每个样本的损失函数,大大加快更新速度,最终的结果在全局最优解附近。训练数据的噪声较多,导致不是每次迭代得到的损失函数都向着全局最优方向。MBGD训练速度快,参数准确性高不同的问题需要设置不同的小批量值。参考文献