机器学习

梯度下降法极速复习笔记

2018-07-29  本文已影响62人  吴金君

1.动机

在机器学习或者深度学习中,我们经常会遇到一些最优化问题,往往是最大化或者最小化一个函数f(x)。我们一般把需要优化的函数称为目标函数、准则、代价函数、损失函数或者误差函数。这些术语都可以表示待优化函数f(x),可能在不同的书里,他们的称呼都不一样。
我们通常会怎么做呢?通常会解决这样一个问题:
x^*=arg\min{f(x)}
意思是我们需要找到一个x值,使得函数f(x)能够最小化。梯度下降法要解决的事情就是一步一步地找到合适的x,使得函数f(x)最终能够达到最小。

2.梯度下降的思想

回忆高数里的导数和微分的知识。导数f'(x)就是函数f(x)在点x处的斜率。如果函数f(x)x的定义域内处处可导,那么就对于任何一个点x^*都存在一个\epsilon使得:
f(x^*+\epsilon)\approx f(x^*)+\epsilon f'(x^*)
假设\epsilon f'(x)为正,那么f(x^*+\epsilon)相比于f(x^*)就多出来了\epsilon f'(x^*)大小的值。对于函数f(x)而言,f(x^*+\epsilon)\geqslant f(x^*).
\begin{aligned} f(x^*_n+\epsilon)& \approx f(x^*_n)+\epsilon f'(x^*_n) \Rightarrow f(x^*_n+\epsilon)\geqslant f(x^*_n)\\ let \ \ x^*_{n+1}=x^*_n+\epsilon,&\ and\ rewrite:\\ f(x^*_{n+1})&\approx f(x^*_{n})+\epsilon f'(x^*_{n}) \Rightarrow f(x^*_{n+1})\geqslant f(x^*_n)\\ \end{aligned}
我们利用这个规律继续迭代呢?
\begin{aligned} f(x^*_{n+1})&\approx f(x^*_{n})+\epsilon f'(x^*_{n}) \Rightarrow f(x^*_{n+1})\geqslant f(x^*_n)\\ f(x^*_{n+2})&\approx f(x^*_{n+1})+\epsilon f'(x^*_{n+1}) \Rightarrow f(x^*_{n+2})\geqslant f(x^*_{n+1})\\ ............\\ f(x^*_{n+i})&\approx f(x^*_{n+i-1})+\epsilon f'(x^*_{n+i-1}) \Rightarrow f(x^*_{n+i})\geqslant f(x^*_{n+i-1})\\ \end{aligned}
假设f(x^*_{n+i-1})达到了最小值或者达到了收敛条件,那么我们的梯度下降法就完成了它的任务。

3.梯度下降法中的学习率和梯度向量

通过上面的例子应该能大概理解梯度下降的思想,但实际应用中,不会有如此简单的情况。为了彻底搞清楚梯度下降法,还需要明白两个概念,那就是梯度下降的学习率梯度向量。我们用一个新的式子来描述梯度下降中的参数更新:
x'=x-\epsilon \nabla_x f(x)
其中,x'表示每次更新后的参数,x表示更新前的参数,\epsilon表示学习率,\nabla_x f(x)表示梯度方向。
学习率:确定了参数更新过程中的步长大小,是一个正标量。
梯度方向:确定了函数f(x)下降最快的方向,如在二次函数中f(x)在某个点x处的梯度,就是使得该点处函数值变化最大。在梯度下降法中,为了使得目标函数值更小,我们常沿着负梯度方向更新参数。(前面举的例子中,为了简洁明了地说明梯度下降法的思想,没有提到负梯度这回事)

上一篇下一篇

猜你喜欢

热点阅读