更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

牛顿法和拟牛顿法

牛顿法(Newton method)和拟牛顿法(quasi-Newton method)和梯度下降法一样也是求解最优化问题的常用方法,但是他们的收敛速度比梯度下降法快。牛顿法是迭代算法,每一步都需要求目标函数的海森矩阵的逆矩阵,计算复杂;拟牛顿法通过正定矩阵近似海森矩阵的逆矩阵,简化这个计算过程。

一、牛顿法详解

1.1 无约束最优化问题

对于一个约束问题
\[
\underbrace{min}_{x\in{R^n}}f(x)
\]
其中\(x^*\)为目标函数的极小点。

1.2 牛顿法迭代公式

假设\(f(x)\)具有二阶连续偏导数,如果第\(k\)次迭代值为\(x^{(k)}\),则可以把\(f(x)\)在\(x^{(k)}\)附近使用二阶泰勒展开
\[
f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)})
\]
其中\(g_k=g(x^{(k)})=\nabla{f(x^{(k)})}\)是\(f(x)\)的梯度向量在点\(x^{(k)}\)的值,\(H(x^{(k)})\)是\(f(x)\)的海森矩阵
\[
H(x)=[\frac{\partial^2f}{\partial{x_i}\partial{x_j}}]_{m*n}
\]
在点\(x^{(k)}\)的值。函数\(f(x)\)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别是当\(H(x^{(k)})\)是正定矩阵的时候,函数\(f(x)\)的极值为极小值。
牛顿法利用极小点的必要条件
\[
\nabla{f(x)}=0
\]
每次迭代中从点\(x^{(k)}\)开始,求目标函数的极小点,作为第\(k+1\)次迭代值\(x^{(k+1)}\),即假设\(x^{(k+1)}\)满足
\[
\nabla{f(x^{(k+1)}}=0
\]
通过泰勒二阶展开式即可得
\[
\nabla{f(x)}=g_k+H_k(x-x^{(k)})
\]
其中\(H_k=H(x^{(k)})\),由此\(\nabla{f(x^{(k+1)}}=0\)变成
\[
g_k+H_k(x^{(k+1)}-x^{(k)}) = 0
\]
因此
\[
x^{(k+1)}=x^{(k)}-H_k^{-1}g_k
\]

\[
x^{(k+1)}=x^{(k)}+p_k
\]
其中
\[
\begin{align}
& x^{(k+1)}=x^{(k)}-H_k^{-1}g_k=x^{(k)}+p_k \\
& -H_k^{-1}g_k=p_k \\
& H_kp_k=-g_k
\end{align}
\]
使用\(x^{(k+1)}=x^{(k)}-H_k^{-1}g_k\)作为迭代公式的算法就是牛顿法。

1.3 牛顿法和梯度下降法

从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。

虽然牛顿法看起来比梯度下降法好很多,但是别忘记了牛顿法迭代过程中需要计算海森矩阵的逆矩阵,如果数据量较大的话,牛顿法的计算开销将远远大于梯度下降法。

二、牛顿法流程

2.1 输入

目标函数\(f(x)\),梯度\(g(x)=\nabla{f(x)}\),海森矩阵\(H(x)\),精度要求\(\epsilon\)

2.2 输出

\(f(x)\)的极小点\(x^*\)

2.3 流程

  1. 取初始点\(x^{(0)}\),并且让\(k=0\)
  2. 计算\(g_k=g(x^{(k)})\)
  3. 如果\(||g_k||\leq\epsilon\),停止计算,得到近似解\(x^*=x^{(k)}\)
  4. 计算\(H_k=H(x^{(k)})\),并求出\(p_k\)
    \[
    H_kp_k=-g_k
    \]
  5. 让\(x^{(k+1)}=x^{(k)}+p_k\)
  6. 让\(k=k+1\),转到第2步

在第4步求\(p_k\)的时候,\(p_k=-H_k^{-1}g_k\),要求求海森矩阵的逆矩阵\(H_k^{-1}\),计算会比较复杂。

三、拟牛顿法简介

在牛顿法的迭代中,需要计算海森矩阵的逆矩阵\(H^{-1}\),这个过程是比较复杂的,而拟牛顿法则使用了一个\(n\)阶矩阵\(G_k=G(x^{(k)})\)近似替代\(H_k^{-1}=H^{-1}(x^{(k)})\),此处不多赘述。

A-03 牛顿法和拟牛顿法的更多相关文章

  1. 【原创】牛顿法和拟牛顿法 -- BFGS, L-BFGS, OWL-QN

    数据.特征和数值优化算法是机器学习的核心,而牛顿法及其改良(拟牛顿法)是机器最常用的一类数字优化算法,今天就从牛顿法开始,介绍几个拟牛顿法算法.本博文只介绍算法的思想,具体的数学推导过程不做介绍. 1 ...

  2. Todd's Matlab讲义第3讲:牛顿法和for循环

    方程数值求解 下面几讲,我们将聚集如下方程的解法: \begin{equation} f(x)=0 \tag{3.1}\label{3.1} \end{equation} 在微积分课程中,我们知道,许 ...

  3. 大叔学ML第一:梯度下降

    目录 原理 实践一:求\(y = x^2 - 4x + 1\)的最小值 实践二:求\(z = x^2 + y^2 + 5\)的最小值 问答时间 原理 梯度下降是一个很常见的通过迭代求解函数极值的方法, ...

  4. 梯度下降(Gradient Descent)小结

    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法.这里就对梯度下降法做一个完整的总结. 1. 梯度 在微 ...

  5. [Math] 常见的几种最优化方法

    我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素 ...

  6. (转) ICML2016 TUTORIAL参会分享

    ICML2016 TUTORIAL参会分享 本文转自: https://mp.weixin.qq.com/s?__biz=MzI3MDE4NTk4MQ==&mid=2658399541& ...

  7. 机器学习入门-BP神经网络模型及梯度下降法-2017年9月5日14:58:16

    BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...

  8. 大叔学ML第五:逻辑回归

    目录 基本形式 代价函数 用梯度下降法求\(\vec\theta\) 扩展 基本形式 逻辑回归是最常用的分类模型,在线性回归基础之上扩展而来,是一种广义线性回归.下面举例说明什么是逻辑回归:假设我们有 ...

  9. 梯度下降(Gradient Descent)

    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法.这里就对梯度下降法做一个完整的总结. 1. 梯度 在微 ...

随机推荐

  1. 【Offer】[56-2] 【数组中唯一只出现一次的数字】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字 [牛客网刷题地址]无 思路分析 如果一个数字出现 ...

  2. RobotFramework自动化测试框架-MongoDBLibrary库的使用

    笔者接着 RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作) 继续分享robotframework 对数据库中的MongoDB的详细操作. Mongo ...

  3. Unity - 2D中的物理关节

    本文概述: 分析Unity中几个2D物理关节组件的基本功能.使用方法.运用场景等 开发环境:Unity2019.3.0a2 / VS2017 项目资源包: 2D Joints Starter 说明: ...

  4. 054 Python程序设计思维

    目录 一.单元开篇 二.计算思维与程序设计 2.1 计算思维 2.1.1 第3种人类思维特征 2.1.2 抽象和自动化 2.1.3 计数求和:计算1-100的计数和 2.1.4 圆周率的计算 2.1. ...

  5. Apache JMeter (一)环境的配置和操作

    JMeter是Apache组织的开放源代码项目,是一款优秀的开源测试工具,可以做功能测试和性能测试.是每个资深的测试工程师必须掌握的测试工具,熟悉JMeter可以大大提高工作效率. 1.下载Jmete ...

  6. FreeSql (十五)查询数据

    FreeSql在查询数据下足了功能,链式查询语法.多表查询.表达式函数支持得非常到位. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnect ...

  7. jvm内存溢出问题的定位方法

    jvm内存溢出问题的定位方法 今天给大家带来JVM体验之内存溢出问题的定位方法. 废话不多说直接开始: 一.Java堆溢出 测试代码如下: import java.util.*; public cla ...

  8. Java 中的 syncronized 你真的用对了吗

    生活中随处可见并行的例子,并行 顾名思义就是一起进行的意思,同样的程序在某些时候也需要并行来提高效率,在上一篇文章中我们了解了 Java 语言对缓存导致的可见性问题.编译优化导致的顺序性问题的解决方法 ...

  9. ZooKeeper 介绍及集群环境搭建

    本篇由鄙人学习ZooKeeper亲自整理的一些资料 包括:ZooKeeper的介绍,我们要学习ZooKeeper的话,首先就要知道他是干嘛的对吧. 其次教大家如何去安装这个精巧的智慧品! 相信你能研究 ...

  10. F#周报2019年第38期

    新闻 宣告.NET Core 3.0第一个候选版本 .NET Core 3.0第一个候选版本中ASP.NET Core与Blazor的更新 F#的就业市场情形如何 Finalization实现细节 G ...