【机器学习】梯度下降算法

先思考下:

  • 梯度下降的数学原理以及几何意义?
  • 梯度下降的作用?

之前我们提到过用梯度下降,求解最优的θ,使损失函数J(θ)取最小值。(点击)

概述

1、梯度:
在微积分里面,对多元函数参数求偏导数,把求的各参数的偏导数以向量的形式写出来,就是梯度。
那么这个梯度向量求出来有什么意义呢?梯度向量从几何意义上讲,就是函数变化增加最快的地方,沿着梯度向量的方向更容易找到函数的最大值,沿着向量相反的方向,梯度减小最快,更容易找到函数最小值。

2、梯度下降与梯度上升可以互相转化。求损失函数f(θ)的最小值,用梯度下降法迭代,亦可反过来求损失函数 -f(θ)的最大值,用梯度上升法。

【百度百科】梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

梯度下降算法

首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

这里写图片描述

我们先来看当训练样本只有一个的时候的情况,然后在将训练样本扩大到多个的情况。
求解使得J(θ)最小的θ值的基本思想:我们首先随便给θ一个初始化的值,然后改变θ值让J(θ)的取值变小,不断重复改变θ使J(θ)变小的过程直至J(θ)约等于最小值。

  • 目标函数 θ 求解:
  • J ( θ ) = 1 2 i = 1 m ( h θ ( x ( i ) y ( i ) ) 2
  • 初始化θ(随机初始化,可以初始为0)
  • 沿着负梯度方向迭代,更新后的θ使J(θ)更小
  • θ j = θ j α J ( θ ) θ j
  • α :学习率,步长;它控制θ每次向J(θ)变小的方向迭代时的变化幅度。J(θ)对θ的偏导表示J(θ)变化最大的方向。由于求的是极小值,因此梯度方向是偏导数的反方向。

求解偏导,过程如下:

θ j J ( θ ) = θ j 1 2 ( h θ ( x ) y ) 2

= 2 1 2 ( h θ ( x ) y ) θ j ( h θ ( x ) y )

= ( h θ ( x ) y ) θ j ( i = 0 n θ i x j y )

= ( h θ ( x ) y ) x j

其中: h θ ( x ) = i = 0 n θ i x j

那么 θ 的迭代公式就为:

θ j = θ j + α ( y h θ ( x ) ) x j

批量梯度下降(BGD)

批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。

如下公式是处理一个样本的表达式:

θ j = θ j + α ( y h θ ( x ) ) x j

转化为处理多个样本,公式如下:
θ j J ( θ ) = i = 1 m ( h θ ( x ( i ) ) y ( i ) ) x j ( i )

θ j = θ j + α i = 1 m ( y ( i ) h θ ( x ( i ) ) ) x j ( i )

这种新的表达式每一步都是计算的全部训练集的数据,所以称之为批梯度下降(batch gradient descent)。

由于每次迭代的时候都要对所有的数据集计算求和,计算量就会很大,尤其是训练数据集特别大的时候。此时,我们就可以用随机梯度下降。

随机梯度下降(SGD)

随机梯度下降在计算下降最快的方向时随机选一个数据进行计算,而不是扫描全部训练数据集,这样就加快了迭代速度。

随机梯度下降并不是沿着J(θ)下降最快的方向收敛,而是震荡的方式趋向极小点。

这里写图片描述

迭代公式为:

for i=1 to m {

θ j = θ j + α ( y ( i ) h θ ( x ( i ) ) ) x j ( i )

}

BGD和SGD算法比较

  • SGD速度比BGD快(迭代次数少)
  • SGD在某些情况下(全局存在多个相对最优解/J(θ)不是一个二次),SGD有可能跳出某些小的局部最优解,所以不会比BGD坏
  • BGD一定能够得到一个局部最优解(在线性回归模型中一定是得到一个全局最优解),SGD由于随机性的存在可能导致最终结果比BGD的差
  • 注意:优先选择SGD

补充(小批量梯度下降 MBGD)

如果既需要保证算法的训练过程比较快,又需要保证最终参数训练的准确率,可以选择小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)。MBGD中不是每拿一个样本就更新一次梯度,而且拿b个样本(b一般为10)的平均梯度作为更新方向。

迭代公式为:

θ j = θ j + α i = 1 10 ( y ( i ) h θ ( x ( i ) ) ) x j ( i )

猜你喜欢

转载自blog.csdn.net/daycym/article/details/80012348