更新、更全的《机器学习》的更新网站,更有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)})\),此处不多赘述。

最新文章

  1. Emit学习(3) - OpCodes - 动态添加属性、构造函数、方法
  2. 对状态空间图搜索的几种算法比较(图)【深度、宽度、动态规划(均一代价)、最佳优先和A*算法】
  3. 【Ext.Net学习笔记】07:后续
  4. html中的src与href的区别
  5. HTML5——购物车
  6. QT快捷键
  7. oracle 索引失效原因及解决方法
  8. JAVA之关于super的用法
  9. Digit (数位DP)
  10. android:screenOrientation的说明 固定屏幕显示方向
  11. 深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes
  12. 2016022610 - redis列表命令集合
  13. Qt5-控件-QRadioButton-单选按钮-用于从多个选项中选取一个-单选神器
  14. CPU使用率和Load Average的关系
  15. Java 多线程编程两个简单的例子
  16. 数据挖掘 ID3
  17. ISG 2018 Web Writeup
  18. 【托业】【新托业TOEIC新题型真题】学习笔记9-题库七+八--P4-5
  19. Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi dp
  20. CentOS 7 搭建PXC 数据库集群

热门文章

  1. 微信小程序 自定义组件 多列选择器 对象数组 ObjectArray 自关联 三级联动
  2. 关于JQuery.form.js异步上传文件点滴
  3. 那些年,我们误解的 JavaScript 闭包
  4. Maven学习归纳(二)——几个常用命令解析
  5. spring security集成cas实现单点登录
  6. Redis在新项目中的使用场景
  7. Swift从入门到精通第十五篇 - 类型转换 初识
  8. zookeeper 集群相关配置实践
  9. Linux之vim、压缩与解压缩
  10. Kubernetes学习之k8s