梯度降低是迭代法的一种,能够用于求解最小二乘问题(线性和非线性均可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度降低(Gradient Descent)是最常采用的方法之一,另外一种经常使用的方法是最小二乘法。在求解损失函数的最小值时,能够经过梯度降低法来一步步的迭代求解,获得最小化的损失函数和模型参数值。反过来,若是咱们须要求解损失函数的最大值,这时就须要用梯度上升法来迭代了。在机器学习中,基于基本的梯度降低法发展了两种梯度降低方法,分别为随机梯度降低法和批量梯度降低法。html
简单地说,梯度降低就是沿着沿梯度降低的方向求解极小值时的自变量。算法
关于梯度的知识可参考《多变量微积分5——梯度与方向导数》机器学习
二元函数w(x,y) = (x – 10)2 + (y – 10)2,其梯度:函数
若是在w上选取一点(xn, yn),w沿着梯度降低方向,在x方向上的变化率:学习
自变量x沿着梯度降低方向的变化:优化
反复迭代,在达到临界点时,就可求得w在极小值时的x;同理可求得在极小值时的y。spa
问题是这样作实在太慢,迭代过程及其耗时,因此人们在此基础上设计出更加快速的处理办法——舍弃精确值,求得可接受的近似值。.net
实际应用中,梯度降低法增长了“学习率”的概念:设计
上式中的α就是学习率,也称为“步长”。梯度降低算法每次迭代,都会受到学习速率α的影响。偏导指明了变化的方向,而学习率则指明变化的步伐,实际上每次迭代一下,就能够更换一个新的α,只是为了方便才用一个。htm
本节剩余内容摘自 https://blog.csdn.net/chenguolinblog/article/details/52138510
若是α较小,则达到收敛所须要迭代的次数就会很是高;若是α较大,则每次迭代可能不会减少代价函数的结果,甚至会超过局部最小值致使没法收敛。以下图所示状况:
根据经验,能够从如下几个数值开始试验α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …
α初始值位0.001, 不符合预期乘以3倍用0.003代替,不符合预期再用0.01替代,如此循环直至找到最合适的α,而后对于这些不一样的 α 值,绘制 J(θ)随迭代步数变化的曲线,而后选择看上去使得 J(θ)快速降低的一个α值。观察下图,能够发现这2种状况下代价函数 J(θ)的迭代都不是正确的:
根据经验,能够从如下几个数值开始试验α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …
α初始值位0.001, 不符合预期乘以3倍用0.003代替,不符合预期再用0.01替代,如此循环直至找到最合适的α,而后对于这些不一样的 α 值,绘制 J(θ)随迭代步数变化的曲线,而后选择看上去使得 J(θ)快速降低的一个α值。观察下图,能够发现这2种状况下代价函数 J(θ)的迭代都不是正确的:
第一幅图,曲线在上升,明显J(θ)的值变得愈来愈大,说明应该选择较小的α
第二幅图,J(θ)的曲线,先降低,而后上升,接着又降低,而后又上升,如此往复。一般解决这个问题,仍是选取较小的α。
若是机器学习算法的假设函数(hypothesis function) hθ(x)以下:
hθ(x) 是线性回归模型,设x0= 1,θ是权重,每一个训练样本有n个特征,即训练样本是n维数据。对于初始权重,可所有设为一个常数。
对于给定的训练集,目标是找到最佳的hθ(x)以拟合最多数据,此时损失函数J(θ),也就是机器学习策略函数达到最小。若是所有预测正确,则对于全部训练数据都有hθ(x) – y =0
若是用平方和定义J(θ),则:
上式表示共有m训练样本,y表示实际结果,上标表示第i个训练样本,hθ(x(i)) - y(i) 表示在训练集的第i个样本中,预测结果与实际结果的差值。前面加上1/2是为了在求导时使J(θ)简化,在后续推导中能够看到。
假设m = 1,即仅有一个训练样本,此时:
目标是使J(θ)达到最小,因为x和y已知,此时的 θ 值即为所求参数,根据梯度降低法:
当i = 1时,第一个权重:
根据链式求导法则计算偏导(可参考《多变量微积分》的相关章节):
推广至m个训练样本,对于任意θ,梯度降低迭表明达式为:
若是令θ是n维向量,可将上式化简:
若是用矩阵表示,梯度降低能够更加简洁:
当梯度降低到必定数值后,每次迭代的变化很小,这时能够设定一个阈值,只要变化小于该阈值,就中止迭代,而获得的结果也近似于最优解。须要注意的是,在新一轮迭代时,由于θ已经获得了更新,因此将使用新的hθ
以二元特征为例,下面是正确作法和错误作法的对比:
上面对于权重的推导过程就是批量梯度降低法,每一次迭代都要遍历全部训练样本,不适用于训练样本数量极多的状况,因而提出了随机梯度降低。
优势:全局最优解;易于并行实现;
缺点:当样本数目不少时,训练过程会很慢。
随机梯度降低法,其实和批量梯度降低法原理相似,区别在与求梯度时没有用全部的m个样本的数据,而是每次仅仅选取第 i 个随机样原本求梯度:
i 不是定值,在每次迭代时都从新选取。随机梯度降低法速度比批量梯度降低快了不少。随机梯度降低的每次迭代,有可能变大或变小,但整体趋势接近全局最优解,一般参数值会十分接近最小值。
优势:训练速度快;
缺点:准确度降低,并非全局最优;不易于并行实现。
小批量梯度降低法是批量梯度降低法和随机梯度降低法的折衷,也就是对于m个样本,咱们采用其中的k个来迭代,1<k<m。通常能够取x=10,固然根据样本的数据,能够调整k的值:
优势:两种算法的折中;
缺点:两种算法的折中。
若是样本量比较小,采用批量梯度降低算法。若是样本太大,或者在线算法,使用随机梯度降低算法。在通常状况下,采用小批量梯度降低算法。
梯度降低法和最小二乘法相比,梯度降低法须要选择步长,而最小二乘法不须要。梯度降低法是迭代求解,最小二乘法是计算解析解。若是样本量不算很大,且存在解析解,最小二乘法比起梯度降低法要有优点,计算速度很快。可是若是样本量很大,用最小二乘法因为须要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度降低法比较有优点。最小二乘法可参考《多变量微积分笔记2——最小二乘法》。
做者:我是8位的
出处:http://www.cnblogs.com/bigmonkey
本文以学习、研究和分享为主,如需转载,请联系本人,标明做者和出处,非商业用途!
扫描二维码关注公众号“我是8位的”