机器学习入门系列04,Gradient Descent(梯度下降法)

Posted yofer张耀琦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习入门系列04,Gradient Descent(梯度下降法)相关的知识,希望对你有一定的参考价值。

Gitbook整理地址:https://yoferzhang.gitbooks.io/machinelearningstudy/content/20170327ML04GradientDescent.html

什么是Gradient Descent(梯度下降法)?

在第二篇文章中有介绍到梯度下降法的做法,传送门:机器学习入门系列02,Regression 回归:案例研究

Review: 梯度下降法

在回归问题的第三步中,需要解决下面的最优化问题:

θ=argminθL(θ)

L:lossfunction

θ:parameters

这里的parameters是复数,即 θ 指代一堆参数,比如上篇说到的 w b

我们要找一组参数 θ ,让损失函数越小越好,这个问题可以用梯度下降法解决:

假设 θ 有里面有两个参数 θ1,θ2

随机选取初始值 θ0=[θ01θ02] ,这里可能某个平台不支持矩阵输入,看下图就好。

然后分别计算初始点处,两个参数对 L 的偏微分,然后 θ0 减掉 η 乘上偏微分的值,得到一组新的参数。同理反复进行这样的计算。黄色部分为简洁的写法, L(θ) 即为梯度

η 叫做Learning rates(学习速率)

上图举例将梯度下降法的计算过程进行可视化。

Tip1:调整 learning rates(学习速率)

小心翼翼地调整 learning rate

举例:

上图左边黑色为损失函数的曲线,假设从左边最高点开始,如果 learning rate 调整的刚刚好,比如红色的线,就能顺利找到最低点。如果 learning rate 调整的太小,比如蓝色的线,就会走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。如果 learning rate 调整的有点大,比如绿色的线,就会在上面震荡,走不下去,永远无法到达最低点。还有可能非常大,比如黄色的线,直接就飞出去了,update参数的时候只会发现损失函数越更新越大。

虽然这样的可视化可以很直观观察,但可视化也只是能在参数是一维或者二维的时候进行,更高维的情况已经无法可视化了。

解决方法就是上图右边的方案,将参数改变对损失函数的影响进行可视化。比如 learning rate 太小(蓝色的线),损失函数下降的非常慢;learning rate 太大(绿色的线),损失函数下降很快,但马上就卡住不下降了;learning rate特别大(黄色的线),损失函数就飞出去了;红色的就是差不多刚好,可以得到一个好的结果。

自适应 learning rate

举一个简单的思想:随着次数的增加,通过一些因子来减少 learning rate

  • 通常刚开始,初始点会距离最低点比较远,所以使用大一点的 learning rate
  • update好几次参数之后呢,比较靠近最低点了,此时减少 learning rate
  • 比如 ηt=η/t+1 t 是次数。随着次数的增加,ηt 减小

但 learning rate 不能是 one-size-fits-all ,不同的参数需要不同的 learning rate

Adagrad 算法

Adagrad 是什么?

每个参数的学习率都把它除上之前微分的均方根。解释:

普通的梯度下降为:

wt+1wtηtgt

ηt=ηt+1

w 是一个参数

Adagrad 可以做的更好:

wt+1wtηtσgt

gt=L(θt)w

σt :之前参数的所有微分的均方根,对于每个参数都是不一样的。

Adagrad举例

下图是一个参数的更新过程

将 Adagrad 的式子进行化简:

Adagrad 存在的矛盾?

在 Adagrad 中,当梯度越大的时候,步伐应该越大,但下面分母又导致当梯度越大的时候,步伐会越小。

下图是一个直观的解释:

下面给一个正式的解释:

比如初始点在 机器学习系列(11)_Python中Gradient Boosting Machine(GBM)调参方法详解

李宏毅《机器学习》丨3. Gradient Descent(梯度下降)

机器学习机器学习入门05 - 梯度下降法

机器学习数学基础- gradient descent算法(上)

[机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

机器学习入门复习1机器学习导论