返回介绍

数学基础

统计学习

深度学习

工具

Scala

四、牛顿法

发布于 2023-07-17 23:38:26 字数 4048 浏览 0 评论 0 收藏 0

  1. 梯度下降法有个缺陷:它未能利用海森矩阵的信息。

    • 当海森矩阵的条件数较大时,不同方向的梯度的变化差异很大。

      • 在某些方向上,梯度变化很快;在有些方向上,梯度变化很慢。

      • 梯度下降法未能利用海森矩阵,也就不知道应该优先搜索导数长期为负或者长期为正的方向。

        本质上应该沿着负梯度方向搜索。但是沿着该方向的一段区间内,如果导数一直为正或者一直为负,则可以直接跨过该区间。前提是:必须保证该区间内,该方向导数不会发生正负改变。

    • 当海森矩阵的条件数较大时,也难以选择合适的步长。

      • 步长必须足够小,从而能够适应较强曲率的地方(对应着较大的二阶导数,即该区域比较陡峭)。
      • 但是如果步长太小,对于曲率较小的地方(对应着较小的二阶导数,即该区域比较平缓)则推进太慢。
  2. 下图是利用梯度下降法寻找函数最小值的路径。该函数是二次函数,海森矩阵条件数为 5,表明最大曲率是最小曲率的5倍。红线为梯度下降的搜索路径。

    它没有用最速下降法,而是用到线性搜索。如果是最速下降法,则相邻两次搜索的方向正交。

    g_descent.PNG

  3. 牛顿法结合了海森矩阵。

    考虑泰勒展开式: $ MathJax-Element-189 $ 。其中 $ MathJax-Element-190 $ 为 $ MathJax-Element-193 $ 处的梯度; $ MathJax-Element-325 $ 为 $ MathJax-Element-193 $ 处的海森矩阵。

    如果 $ MathJax-Element-194 $ 为极值点,则有: $ MathJax-Element-195 $ ,则有: $ MathJax-Element-196 $ 。

    • 当 $ MathJax-Element-461 $ 是个正定的二次型,则牛顿法直接一次就能到达最小值点。
    • 当 $ MathJax-Element-461 $ 不是正定的二次型,则可以在局部近似为正定的二次型,那么则采用多次牛顿法即可到达最小值点。
  4. 一维情况下,梯度下降法和牛顿法的原理展示:

    newton

    • 梯度下降法:下一次迭代的点 $ MathJax-Element-199 $ 。

      对于一维的情况,可以固定 $ MathJax-Element-200 $ 。由于随着迭代的推进, $ MathJax-Element-201 $ 绝对值是减小的(直到0),因此越靠近极值点, $ MathJax-Element-202 $ 越小。

    • 牛顿法:目标是 $ MathJax-Element-203 $ 。

      在一维情况下就是求解 $ MathJax-Element-204 $ 。牛顿法的方法是:以 $ MathJax-Element-205 $ 做 $ MathJax-Element-206 $ 切线,该切线过点 $ MathJax-Element-207 $ 。该切线在 $ MathJax-Element-208 $ 轴上的交点就是: $ MathJax-Element-209 $ 。

      推广到多维情况下就是: $ MathJax-Element-244 $ 。

  5. 当位于一个极小值点附近时,牛顿法比梯度下降法能更快地到达极小值点。

    如果在一个鞍点附近,牛顿法效果很差,因为牛顿法会主动跳入鞍点。而梯度下降法此时效果较好(除非负梯度的方向刚好指向了鞍点)。

  6. 仅仅利用了梯度的优化算法(如梯度下降法)称作一阶优化算法,同时利用了海森矩阵的优化算法(如牛顿法)称作二阶优化算法。

  7. 牛顿法算法:

    • 输入:

      • 目标函数 $ MathJax-Element-433 $
      • 梯度 $ MathJax-Element-337 $
      • 海森矩阵 $ MathJax-Element-213 $
      • 精度要求 $ MathJax-Element-300 $
    • 输出: $ MathJax-Element-433 $ 的极小值点 $ MathJax-Element-340 $

    • 算法步骤:

      • 选取初始值 $ MathJax-Element-341 $ , 置 $ MathJax-Element-343 $ 。

      • 迭代,停止条件为:梯度收敛。迭代步骤为:

        • 计算 $ MathJax-Element-344 $ 。

        • 若 $ MathJax-Element-345 $ , 则停止计算,得到近似解 $ MathJax-Element-358 $ 。

        • 若 $ MathJax-Element-347 $ , 则:

          • 计算 $ MathJax-Element-223 $ ,并求 $ MathJax-Element-349 $ ,使得: $ MathJax-Element-225 $ 。
          • 置 $ MathJax-Element-226 $ 。
          • 置 $ MathJax-Element-360 $ ,继续迭代。
  8. 梯度下降法中,每一次 $ MathJax-Element-449 $ 增加的方向一定是梯度相反的方向 $ MathJax-Element-229 $ 。增加的幅度由 $ MathJax-Element-363 $ 决定,若跨度过大容易引发震荡。

    而牛顿法中,每一次 $ MathJax-Element-449 $ 增加的方向是梯度增速最大的反方向 $ MathJax-Element-232 $ (它通常情况下与梯度不共线)。增加的幅度已经包含在 $ MathJax-Element-233 $ 中(也可以乘以学习率作为幅度的系数)。

    gradient_descent_newton

  9. 深度学习中的目标函数非常复杂,无法保证可以通过上述优化算法进行优化。因此有时会限定目标函数具有Lipschitz连续,或者其导数Lipschitz连续。

    • Lipschitz连续的定义:对于函数 $ MathJax-Element-461 $ ,存在一个Lipschitz常数 $ MathJax-Element-235 $ ,使得:
    $ \forall \mathbf{\vec x},\forall \mathbf{\vec y}, |f(\mathbf{\vec x})-f(\mathbf{\vec y})| \le \mathcal L ||\mathbf{\vec x}-\mathbf{\vec y}||_2 $
    • Lipschitz连续的意义是:输入的一个很小的变化,会引起输出的一个很小的变化。

      与之相反的是:输入的一个很小的变化,会引起输出的一个很大的变化

  10. 凸优化在某些特殊的领域取得了巨大的成功。但是在深度学习中,大多数优化问题都难以用凸优化来描述。

    凸优化的重要性在深度学习中大大降低。凸优化仅仅作为一些深度学习算法的子程序。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文