美文网首页看场电影
梯度下降——寻找那个最优解

梯度下降——寻找那个最优解

作者: oceanLong | 来源:发表于2018-06-02 11:48 被阅读192次

    前言

    在机器学习中,我们面对一个实际问题,收集了数据,建立了模型。接下来,就需要求解模型。即我们要取怎样的参数,才能使模型完成尽可能准确的预测呢?

    在求解机器学习算法的模型参数,即无约束优化问题时,我们最常用的方法之一,便是梯度下降法

    思考一个问题

    如果坐标系内有两个点,此时,我们需要寻找一条直线将使得这两点损失最小。
    这个问题非常容易。因为一条直线是可以覆盖两个点的,我们可以计算出:

    这很容易,那么如果有三个点,情况会怎么样呢?

    image.png

    虽然我们还是能一眼看出,哪条线更符合我们的要求,但要求解它,已经不那么容易了。
    如果有成千上万个点呢?

    image.png

    在机器学习的场景中,我们的数据是海量的。我们如何在海量数据中找到那一组损失最小,我们最需要的模型参数。这就是梯度下降带给我们的意义。

    什么是梯度下降法

    梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法

    这是梯度下降法的在维基百科上的定义。我们应该如何理解呢?


    可以想象一个情景。我们站在半山腰,需要最快的下山。这个山腰的高度就是模型任意参数时的损失值,山底就是损失值最小的点。而此时四周又有大雾,我们该如何下山呢?梯度下降法的思路就是,我们会以一步为限,寻找四周,我这一步能下降最多的方向,迈出这一步。然后再寻找能下降最多的方向,再迈出一步,经过不懈努力就能下山了。

    对照上面的例子,因为我们无法计算出最佳参数是什么,所以我们需要进行反复试验摸索。每一步的距离,即为步长。下降最多的方向,即为损失函数对各方向上的偏导。山底就是我们使用梯度下降法,寻找到的最优解,即损失函数的极小值。

    梯度下降的过程

    结合我们一开始的例子,假设我们需要用一条直接去覆盖很多的点。我们会这样定义一个损失函数:

    式中,h函数即为我们的kx+b。
    因为我们要寻找它下降最快的方向。我们会对其求偏导。



    根据求出的偏导,不断更新theta:



    此时, 我们也可以给theta后面的项,乘以一个常数,这个常数即为步长,它可以控制梯度下降的整体幅度。

    这个方法就叫做:批量梯度下降法

    批量梯度下降法的困境

    上面的迭代方法,虽然能帮助我们找到全局极小值。但是,在实际计算中,也会有相当的困难。每一次迭代,我们都需要对m项进行求和。如果m非常大,这个计算将会变得相当困难。

    为了解决这样的困难,我们找到了一个新方法:随机梯度下降法

    随机梯度下降法

    如果我们的迭代只使用一个样本,会发生什么情况呢?

    整个过程似乎会变得不可控了,因为随着样本的随机性。我们的梯度下降的方向,可能会产生一些随机因素。但如果样本数量足够大,当我们经历其中一部分样本后,我们就已经能到达最优解了。
    相比于批量梯度下降,两者的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

    所以对比两种方式:

    • 批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。

    • 随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。

    以上就是梯度下降的基本知识。如有问题,欢迎指正。

    相关文章

      网友评论

        本文标题:梯度下降——寻找那个最优解

        本文链接:https://www.haomeiwen.com/subject/jjnhsftx.html