文章目录

  • 前言
  • 一、阻尼牛顿法
  • 二、算法实例
  • 总结

前言

  在学习了牛顿法之后,我们了解到牛顿法存在一个致命的问题:牛顿法的搜索方向不一定就是下降方向。这直接可能会导致牛顿法不会收敛。为了解决这个问题,我们主要的改进的方向有两点:

  • 改进使得牛顿法的搜索方向就是其函数值下降的方向。
  • 改进使得牛顿法不是下降方向的搜索方向变成是下降方向的搜索方向。

一、阻尼牛顿法

  阻尼牛顿法就上述改进点中的第二点,为牛顿法沿牛顿方向增加一个一维搜索。
例如,我们知道在经典的牛顿法迭代公式中:

x(k+1)=x(k)+λd(k)x^{(k+1)}=x^{(k)}+\lambda d^{(k)}x(k+1)=x(k)+λd(k)
d(k)=−∇2f(x)−1∇f(x)d^{(k)}=-\nabla^{2} f(x)^{-1} \nabla f(x)d(k)=−∇2f(x)−1∇f(x)
  在经典牛顿法中上式中λ\lambdaλ为1,d(k)d^{(k)}d(k)为牛顿法的搜索方向。但是这个方向可能不是下降方向,于是可以想到在λ\lambdaλ上进行改进,取λ\lambdaλ为满足下面表达式的。
f(x(k)+λkd(k))=min⁡λf(x(k)+λd(k))f(x^{(k)}+\lambda_{k}d^{(k)})=\mathop {\min }\limits_\lambda f(x^{(k)}+\lambda d^{(k)})f(x(k)+λk​d(k))=λmin​f(x(k)+λd(k))
  满足上述为最小值的λ\lambdaλ的值就是阻尼牛顿法的一维搜索步长。所以在阻尼牛顿法中每一次计算搜索方向之后,都需要额外计算一次最优步长λk\lambda_{k}λk​,然后才能使用迭代公式更新xk+1x_{k+1}xk+1​。下面是阻尼牛顿法的计算步骤:

  1. 给定初始点x(1)x^{(1)}x(1),允许误差ε>0\varepsilon > 0ε>0,置k=1k=1k=1.
  2. 计算∇f(x(k)),∇2f(x(k))−1\nabla f(x^{(k)}),\nabla^{2}f(x^{(k)})^{-1}∇f(x(k)),∇2f(x(k))−1.
  3. 如果∥∇f(x(k))∥<ε\left\| {\nabla f({x^{(k)}})} \right\| < \varepsilon∥∥​∇f(x(k))∥∥​<ε,则停止迭代;否则,令:
    d(k)=−∇2f(x(k))−1∇f(x(k))d^{(k)}=-\nabla^{2}f(x^{(k)})^{-1}\nabla f(x^{(k)})d(k)=−∇2f(x(k))−1∇f(x(k))
  4. 从x(k)x^{(k)}x(k)出发,沿着方向d(k)d^{(k)}d(k)作一维搜索,
    min⁡λf(x(k)+λd(k))=f(x(k)+λkd(k))\mathop {\min }\limits_\lambda f({x^{(k)}} + \lambda {d^{(k)}}) = f({x^{(k)}} + {\lambda _k}{d^{(k)}})λmin​f(x(k)+λd(k))=f(x(k)+λk​d(k))
    令x(k+1)=x(k)+λkd(k)x^{(k+1)}=x^{(k)}+\lambda_{k}d^{(k)}x(k+1)=x(k)+λk​d(k).
  5. 置k:=k+1k:= k+1k:=k+1,转步骤

  从上述的迭代步骤来看,停止迭代是依靠计算停止误差来确定的。由于阻尼牛顿法含有一维搜索,因此每次迭代目标函数值一般有所下降,绝对不会出现上升的情况,并且可以证明,阻尼牛顿法和牛顿法相比肯定会收敛。
  而阻尼牛顿法最重要的改进点就在计算步长λk\lambda_{k}λk​中,在计算步长的过程中我们可以令其导数等于0,从而找到λk\lambda_{k}λk​的值。

二、算法实例

计算函数:
f=4x12+3x22−4x1x2+x1f=4x^{2}_{1}+3x^{2}_{2}-4x_{1}x_{2}+x_{1}f=4x12​+3x22​−4x1​x2​+x1​
的最小值。

% 牛顿法求解二元极值问题
syms x1 x2 a;
f = 4 * x1^2 + 3 * x2^2 - 4 * x1 * x2 + x1;
% 构造目标函数的f一阶导
fx = diff(f,x1);
fy = diff(f,x2);
gf = [fx,fy]';
% 求Hesse矩阵
fxx = diff(fx,x1);
fxy = diff(fx,x2);
fyx = diff(fy,x1);
fyy = diff(fy,x2);
H = [fxx,fxy;fyx,fyy];
% 初始化
ess = 1e-5; % 精度
x0 = [1,1]; % 初始点
xk = x0'; %
fk = subs(f,[x1,x2],x0); % 计算初始值
gk = subs(gf,[x1,x2],x0); % 计算初始导数
Hk = subs(H,[x1,x2],x0); % 计算初始黑塞矩阵
k = 0;
% 进入循环
while((norm(gk)>ess)&&(k<10))% 迭代进行dk = -Hk\gk;xk = xk + a * dk;f_xa = subs(f,[x1,x2],xk'); % 将含步长的表达式带入原函数diff_fa = diff(f_xa,a); % 求解一阶导a_n = solve(diff_fa,a); % 求根xk = subs(xk,a,a_n);% 计算新的函数值和梯度fk = subs(f,[x1,x2],xk');gk = subs(gf,[x1,x2],xk');Hk = subs(H,[x1,x2],xk');% 记录迭代次数k = k + 1;
end
xk = vpa(xk,10);
fk = vpa(fk,5);
disp(['最小值为:',num2str(double(fk))])
disp(['迭代次数为:',num2str(k)])

其实代码中与牛顿法相比主要就是增加了一个求解λk\lambda_{k}λk​的步骤,其它的没有太多变化。

总结

  阻尼牛顿法和牛顿法相比增加了一维搜索的步长因素,这样会使得牛顿法每次的搜索方向变为下降方向,这样可以保证阻尼牛顿法在适当的条件下进行收敛,算是对牛顿法的一种改进。
  但是阻尼牛顿法和牛顿法都没有解决实质性问题,那就是黑塞矩阵可能会出现奇异的情况,如果黑塞矩阵出现奇异情况,那么后续点就无法计算得出,这些更细节的方面就又是对牛顿法的进一步改进,这里不详细介绍。
  更多详细内容可以阅读《最优化理论与算法》这本书

机器学习笔记-阻尼牛顿法相关推荐

  1. 陈宝林《最优化理论与算法》超详细学习笔记 (一)————第十章 使用导数的最优化方法(最速下降法、牛顿法、阻尼牛顿法)

    陈宝林<最优化理论与算法>超详细学习笔记 (一)----第十章 使用导数的最优化方法(最速下降法.牛顿法.阻尼牛顿法) 写在前面 第十章 使用导数的最优化方法 最速下降法 牛顿法 阻尼牛顿 ...

  2. 寻找最优参数解:最速下降法,牛顿下降法,阻尼牛顿法,拟牛顿法

    感谢于建民的投稿,转载请注明出处:数盟社区 机器学习的一个重要组成部分是如何寻找最优参数解.本文就常见寻优方法进行总结,并给出简单python2.7实现,可能文章有点长,大家耐心些. 寻找最优参数解, ...

  3. 无约束优化:修正阻尼牛顿法

    文章目录 无约束优化:修正阻尼牛顿法 梯度法的困难 经典牛顿法 定义 收敛性证明 修正阻尼牛顿法 考虑修正阻尼牛顿法的起因 如何构造修正矩阵M 参考文献 无约束优化:修正阻尼牛顿法 梯度法的困难 无约 ...

  4. cs229 斯坦福机器学习笔记(一)-- 入门与LR模型

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Dinosoft/article/details/34960693 前言 说到机器学习,非常多人推荐的学习资 ...

  5. 迷人的神经网络——机器学习笔记1

    目录 迷人的神经网络--机器学习笔记1 第1章 神经元模型及网络结构 1.1 神经元模型 1.1.1 单输入神经元 1.1.2 激活函数 1.1.3 多输入神经元 1.2 网络结构 1.2.1 单层神 ...

  6. 【机器学习笔记】- 纵观全局 监督学习中的4个重要内容:模型、Loss/Cost、目标和优化

    [机器学习笔记]- 纵观全局 监督学习中的4个重要内容:模型.Loss/Cost.目标和优化 监督学中的4个重要内容:模型.Loss/Cost.目标.优化 发现想做数据分析,除了要学习概率统计,也真的 ...

  7. 一份520页的机器学习笔记!附下载链接

    点击上方"视学算法",选择"星标"公众号 第一时间获取价值内容 近日,来自SAP(全球第一大商业软件公司)的梁劲(Jim Liang)公开了自己所写的一份 52 ...

  8. 700 页的机器学习笔记火了!完整版开放下载

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 作者       梁劲(Jim Liang),来自SAP(全球第一大商业软件公司). 书籍特点       条理清晰 ...

  9. 机器学习笔记十四:随机森林

    在上一篇机器学习笔记十三:Ensemble思想(上)中,简要的提了一下集成学习的原理和两种主要的集成学习形式.  而在这部分要讲的随机森林,就算是其中属于bagging思路的一种学习方法.为了篇幅,b ...

  10. 机器学习笔记七:损失函数与风险函数

    一.损失函数 回顾之前讲过的线性回归模型,我们为了要学习参数使得得到的直线更好的拟合数据,我们使用了一个函数 这个函数就是比较模型得到的结果和"真实值"之间的"差距&qu ...

最新文章

  1. 【建站系列教程】2.2、fiddler手机抓包教程
  2. Django REST framework API 指南(25):状态码
  3. DuiLib学习笔记5——标题栏不能正常隐藏问题
  4. springboot简易集成mybatisPlus+多数据源
  5. pta - 1132 Cut Integer
  6. sicktim571操作手册_SICK激光传感器TIM310操作说明书
  7. 教你如何去淘便宜机票
  8. 【Photoshop】批处理与快捷批处理
  9. Springboot读取jar包中的MANIFEST.MF文件内容
  10. 搜狗推出卫星影像地图 将覆盖全部七个奥运城市
  11. LNMP环境下搭建wordpress
  12. windows安装telnet工具
  13. matlab金融时间序列分析,5 个 MATLAB 金融时序预测速查表
  14. SwiftUI内功之如何设计Struct和Class不要和陌生人说话
  15. Android 通话录音功能
  16. html 抽签分小组代码,javascript随机抽签程序
  17. 尤雨溪-写一个mini vue
  18. vmwaretools与open-vm-tools都无法使用的解决方法
  19. python 策略回测期货_量化投资实战教程(1)—基于backtrader的简单买入卖出策略
  20. 999策略手机论坛_999策略手机论坛

热门文章

  1. Javaweb实现登录界面“记住我”功能
  2. OA是什么?OA系统,OA,OA解决方案有哪些,OA有什么功能,OA有什么作用
  3. no zuo no die _0_
  4. servlet工作流程
  5. 获取句子迷的经典语录[Python版本]
  6. 【Java】实现wav格式音乐的 播放、停止、循环播放、音量调节
  7. EasyRTMP结合海康HCNetSDK获取海康摄像机H.264实时流并转化成为RTMP直播推流(附源码)
  8. SphereEx CEO 张亮:数据库上云是大势所趋|初心·问
  9. 【附源码】计算机毕业设计SSM七七美食汇
  10. Acer 4250G TL 58 Vista 系统装xp系统完全攻略