zoukankan      html  css  js  c++  java
  • 梯度下降小结

    机器学习中,很多监督学习模型需要构建损失函数,再用优化算法对损失函数进行优化,找到最优参数。常用到的优化算法有梯度下降法和最小二乘法,这里总结梯度下降法。

    1 梯度下降原理

    梯度下降在求解过程中,只需要求解损失函数的一阶导数,计算代价较小。基本思想:从某一点出发,沿着变化最快的方向前进,到达一个点后,再找下一个变化最快的地方,直到到达收敛点。
    介绍梯度下降前,需要了解以下数学概念。

    1.1 梯度下降必备数学基础

    导数——简单来说,导数就是函数(y=f(x))在某一点(((x_{0},y_{0})))切线的斜率,记作(f'{(x_{0})})(frac{mathrm{d} y}{mathrm{d} x}|x=x_{0})
    偏导数——在某一点(((x_{0},y_{0})))处的偏导数的几何意义是曲面(f(x,y))与面(x=x_{0})或面(y=y_{0})交线在(y=y_{0})(x=x_{0})处切线的斜率,记作(f_{x}(x_{0},y_{0}))(frac{partial f}{partial x})(frac{partial f}{partial y})
    方向导数——简单来说,方向导数就是函数沿着某个方向的变化率。
    梯度:函数(f(x,y))在平面域内具有连续的一阶偏导数,对于每一个点(P(x,y))都有向量((frac{partial f}{partial x},frac{partial f}{partial y})),则将其称为函数在点(P)的梯度,记作(igtriangledown f(x,y))
    梯度向量的几何意义就是函数变化最快的地方,沿着梯度向量的方向,更容易找到最大值,而沿着梯度方向相反的方向,更易找到函数的最小值。

    1.2 梯度下降

    机器学习算法中,用梯度下降法迭代求解,使得损失函数最小化、得到模型参数。如果需要求解损失函数最大值,就需要梯度上升法迭代。实际,梯度下降法和梯度上升法可以相互转换,下面详细介绍梯度下降法。

    2 梯度下降算法

    以线性回归模型为例,设一个特征(x)与参数( heta _{0})( heta _{1}),得到假设函数为:(h_{ heta }(x^{(i)})= heta _{0}+ heta _{1}x^{(i)}) 损失函数:(J( heta _{0}, heta _{1})=frac{1}{2m}sum_{i=1}^{m}(h_{ heta }(x^{(i)})-y^{(i)})^{2}) 优化目标: (min_{ heta_{0} , heta _{1}}J( heta _{0}, heta _{1}))
    梯度下降算法,同步更新所有参数( heta)

    [ heta_{j}:= heta_{j}-alpha frac{partial }{partial heta _{j}}J( heta _{0}, heta _{1}) ]

    简单地说,梯度下降目的如下图,就是找到损失函数(J( heta _{0}, heta _{1}))的最小值。

    梯度下降有三种形式:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-Batch Gradient Descent),下面分别介绍三种梯度下降算法。

    3 批量梯度下降

    批量梯度下降是梯度下降最原始的形式,每一次迭代使用全部样本进行梯度更新,具体理解为,对目标函数求偏导

    [frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}=frac{1}{m}sum_{i=1}^{m}(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

    每次迭代对参数进行更新:

    [ heta _{j}:= heta _{j}-alpha frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}= heta _{j}-alphafrac{1}{m}sum_{i=1}^{m}(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

    优点:
    1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
    2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
    缺点:
    当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

    4 随机梯度下降

    随机梯度下降每次迭代只用一个样本对参数进行更新,加快了训练速度。
    一个样本的目标函数:

    [J( heta _{0}, heta _{1})=frac{1}{2}(h_{ heta }(x^{(i)})-y^{(i)})^{2} ]

    目标函数求偏导:

    [frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}=(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

    参数更新:

    [ heta _{j}:= heta _{j}-alpha frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}= heta _{j}-alpha(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

    优点:
    由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
    缺点:
    1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
    2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
    3)不易于并行实现。

    5 小批量梯度下降

    小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代使用小批量个样本来对参数进行更新。
    优点:
    1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
    2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
    3)可实现并行化。
    缺点:
    小批量样本个数的不当选择可能会带来一些问题

    6 梯度下降总结

    如果样本量比较小,采用批量梯度下降算法。如果样本太大,或者在线算法,使用随机梯度下降算法。在实际的一般情况下,采用小批量梯度下降算法。

    ***参考:统计学习方法 梯度下降小结 ***

  • 相关阅读:
    托付和事件的使用
    在使用supervisord 管理tomcat时遇到的小问题
    无法安装vmware tools的解决方PLEASE WAIT! VMware Tools is currently being installed on your system. Dependin
    (转)Openlayers 2.X加载高德地图
    (转)openlayers实现在线编辑
    (转) Arcgis for js加载百度地图
    (转)Arcgis for js加载天地图
    (转) 基于Arcgis for Js的web GIS数据在线采集简介
    (转) Arcgis for js之WKT和GEOMETRY的相互转换
    (转)Arcgis for Js之Graphiclayer扩展详解
  • 原文地址:https://www.cnblogs.com/eugene0/p/11449604.html
Copyright © 2011-2022 走看看