梯度降低算法

  在求解机器学习算法的模型参数,即无约束优化问题时,梯度降低(Gradient Descent)是最常采用的方法之一,另外一种经常使用的方法是最小二乘法。这里就对梯度降低法作一个完整的总结。算法

  1、梯度机器学习

  在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。好比函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),若是是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。函数

  那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增长最快的地方。具体来讲,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增长最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来讲,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减小最快,也就是更加容易找到函数的最小值。学习

  2、梯度降低与梯度上升优化

  在机器学习算法中,在最小化损失函数时,能够经过梯度降低法来一步步的迭代求解,获得最小化的损失函数,和模型参数值。反过来,若是咱们须要求解损失函数的最大值,这时就须要用梯度上升法来迭代了。atom

  梯度降低法和梯度上升法是能够互相转化的。好比咱们须要求解损失函数f(θ)的最小值,这时咱们须要用梯度降低法来迭代求解。可是实际上,咱们能够反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。spa

  3、梯度降低算法xml

  梯度降低算法能够看作是一个下山的过程,咱们不知道如何下山,因而决定走一步算一步,没走一步都计算一下当前位置的梯度,而后沿着梯度的负方向,迈出下一步。就这样一步一步的走下去,直至走到山脚下,可是还可能会走到一个局部的山峰低谷。blog

  从上面能够看出梯度降低算法不必定会获得全局最优解,还可能会获得局部最优解。当损失函数是凸函数时,梯度降低算法必定会获得全局最优解。it

  3.1梯度降低算法的一些相关概念

  (1)步长(learning rate):步长决定了在梯度降低迭代的过程当中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

  (2)特征(feature):指的是样本中输入部分,好比2个单特征的样本x(0),y(0),x(1),y(1)(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0)x(0),第一个样本输出为y(0)y(0)。

  (3)假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)hθ(x)。好比对于单个特征的m个样本x(i),y(i)(i=1,2,...m)(x(i),y(i))(i=1,2,...m),能够采用拟合函数以下: hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x。

  (4) 损失函数(loss function):为了评估模型拟合的好坏,一般用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数一般为样本输出和假设函数的差取平方。好比对于m个样本xi,yi(i=1,2,...m)(xi,yi)(i=1,2,...m),采用线性回归,损失函数为:

  J(θ0,θ1)=i=1m(hθ(xi)yi)2J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2

  其中xixi表示第i个样本特征,yiyi表示第i个样本对应的输出,hθ(xi)hθ(xi)为假设函数。

  4 不一样的梯度降低算法 

4.1 批量梯度降低法(Batch Gradient Descent)

    批量梯度降低法,是梯度降低法最经常使用的形式,具体作法也就是在更新参数时使用全部的样原本进行更新,这个方法对应于前面3.3.1的线性回归的梯度降低算法,也就是说3.3.1的梯度降低算法就是批量梯度降低法。  

    θi=θiαj=0m(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)iθi=θi−α∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

    因为咱们有m个样本,这里求梯度的时候就用了全部m个样本的梯度数据。

4.2 随机梯度降低法(Stochastic Gradient Descent)

    随机梯度降低法,其实和批量梯度降低法原理相似,区别在与求梯度时没有用全部的m个样本的数据,而是仅仅选取一个样本j来求梯度。对应的更新公式是:

    θi=θiα(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)iθi=θi−α(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

    随机梯度降低法,和4.1的批量梯度降低法是两个极端,一个采用全部数据来梯度降低,一个用一个样原本梯度降低。天然各自的优缺点都很是突出。对于训练速度来讲,随机梯度降低法因为每次仅仅采用一个样原本迭代,训练速度很快,而批量梯度降低法在样本量很大的时候,训练速度不能让人满意。对于准确度来讲,随机梯度降低法用于仅仅用一个样本决定梯度方向,致使解颇有可能不是最优。对于收敛速度来讲,因为随机梯度降低法一次迭代一个样本,致使迭代方向变化很大,不能很快的收敛到局部最优解。

    那么,有没有一个中庸的办法可以结合两种方法的优势呢?有!这就是4.3的小批量梯度降低法。

4.3 小批量梯度降低法(Mini-batch Gradient Descent)

  小批量梯度降低法是批量梯度降低法和随机梯度降低法的折衷,也就是对于m个样本,咱们采用x个样子来迭代,1<x<m。通常能够取x=10,固然根据样本的数据,能够调整这个x的值。对应的更新公式是:

    θi=θiαj=tt+x1(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)i

相关文章
相关标签/搜索