共轭梯度法不需要预先给定Q\boldsymbol{Q}共轭方向,而是随着迭代的进行不断产生Q\boldsymbol{Q}共轭方向。在每次的迭代中,利用上一个搜索方向和目标函数在当前迭代点的梯度向量 之间的线性组合构造一个新的方向,使其与前边已经产生的搜索方向组成Q\boldsymbol{Q}共轭方向。对于一个nn维二次型函数,沿着Q\boldsymbol{Q}共轭方向进行搜索,经过nn次迭代,即可得到极小点。
    考虑二次型函数:

f(x)=12xTQx−xTb,x∈Rn

f(\boldsymbol{x}) = \frac{1}{2}\boldsymbol{x}^T\boldsymbol{Qx}-\boldsymbol{x}^T\boldsymbol{b}, \boldsymbol{x} \in \mathbb{R}^n
其中, Q=QT>0\boldsymbol{Q} = \boldsymbol{Q}^T > 0。初始点x(0)\boldsymbol{x}^{(0)},搜索方向采用最速下降法的方向,即函数ff在x(0)\boldsymbol{x}^{(0)}处梯度的负方向,即:

d(0)=−g(0)

\boldsymbol{d}^{(0)} = - \boldsymbol{g}^{(0)}
产生下一个迭代点:

x(1)=x(0)+α0d(0)

\boldsymbol{x}^{(1)} = \boldsymbol{x}^{(0)} + \alpha_0\boldsymbol{d}^{(0)}
其中,步长为:

α0=argminα≥0f(x(0)+α0d(0))=−g(0)Td(0)d(0)TQd(0)

\alpha_0 = \arg \min_{\alpha \ge 0} f(\boldsymbol{x}^{(0)} + \alpha_0 \boldsymbol{d}^{(0)}) = -\frac{\boldsymbol{g}^{(0)T}\boldsymbol{d}^{(0)}}{\boldsymbol{d}^{(0)T}\boldsymbol{Q}\boldsymbol{d}^{(0)}}
再展开下一次迭代,搜索方向 d(0)\boldsymbol{d}^{(0)}和 d(1)\boldsymbol{d}^{(1)}应该是关于 Q\boldsymbol{Q}共轭的。推广开来,在 k+1k+1词迭代中:

d(k+1)=−g(k+1)+βkd(k),k=0,1,2…

\boldsymbol{d}^{(k+1)} = - \boldsymbol{g}^{(k+1)} + \beta_k\boldsymbol{d}^{(k)} ,\quad k =0,1,2\dots
按照如下方式选择 βk\beta_k, 可以使得 d(k+1)\boldsymbol{d}^{(k+1)}和 d(0),d(1),…,d(k)\boldsymbol{d}^{(0)},\boldsymbol{d}^{(1)}, \dots,\boldsymbol{d}^{(k)}组成 Q\boldsymbol{Q}共轭方向:

βk=g(k+1)TQd(k)d(k)TQd(k)

\beta_k = \frac{\boldsymbol{g}^{(k+1)T}\boldsymbol{Q}\boldsymbol{d}^{(k)}}{\boldsymbol{d}^{(k)T}\boldsymbol{Q}\boldsymbol{d}^{(k)}}

共轭梯度法的算法步骤可以归纳如下:

  1. 令 k=0k=0,选择初始值:x(0)\boldsymbol{x}^{(0)}
  2. 计算g(0)=∇f(x(0))\boldsymbol{g}^{(0)} = \nabla f(\boldsymbol{x}^{(0)}),如果g(0)=0\boldsymbol{g}^{(0)}=\boldsymbol{0},停止。否则:d(0)=−g(0)\boldsymbol{d}^{(0)}= - \boldsymbol{g}^{(0)}.
  3. 计算αk=−g(k)Td(k)d(k)TQd(k)\alpha_k = -\frac{\boldsymbol{g}^{(k)T}\boldsymbol{d}^{(k)}}{\boldsymbol{d}^{(k)T}\boldsymbol{Q}\boldsymbol{d}^{(k)}}
  4. 计算 x(k+1)=x(k)+αkd(k)\boldsymbol{x}^{(k+1)} = \boldsymbol{x}^{(k)} + \alpha_k\boldsymbol{d}^{(k)}
  5. 计算g(k+1)=∇f(x(k+1))\boldsymbol{g}^{(k+1)} = \nabla f(\boldsymbol{x}^{(k+1)}),如果g(k+1)=0\boldsymbol{g}^{(k+1)}=\boldsymbol{0},停止。
  6. 计算βk=g(k+1)TQd(k)d(k)TQd(k)\beta_k = \frac{\boldsymbol{g}^{(k+1)T}\boldsymbol{Q}\boldsymbol{d}^{(k)}}{\boldsymbol{d}^{(k)T}\boldsymbol{Q}\boldsymbol{d}^{(k)}}
  7. 计算d(k+1)=−g(k+1)+βkd(k)\boldsymbol{d}^{(k+1)} = - \boldsymbol{g}^{(k+1)} + \beta_k\boldsymbol{d}^{(k)}
  8. 令k=k+1k=k+1,回到第3<script type="math/tex" id="MathJax-Element-10156">3</script>步。

最优化学习笔记(十四)——共轭梯度法相关推荐

  1. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  2. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  3. 最优化学习笔记(四)共轭梯度法

  4. 【神经网络】学习笔记十四——Seq2Seq模型

    本文简要介绍seq2seq,即序列到序列的基本知识,是深度学习和NLP中一个重要的知识. 从三部分来说,seq2seq基本简介,应用场景和原理解析. 一.什么是Seq2Seq 所谓Seq2Seq(Se ...

  5. 重新认识错过(通向财富自由之路学习笔记十四)

    本周学习<通向财富自由之路>专栏重新认识错过的文章,在文章中作者介绍了自己是如何错过一次升级的.对于这种错过,非常有同感.比如在中学时候,需要学习生物.历史.地理等学科,而这些学科不需要计 ...

  6. 【theano-windows】学习笔记十四——堆叠去噪自编码器

    前言 前面已经学习了softmax,多层感知器,CNN,AE,dAE,接下来可以仿照多层感知器的方法去堆叠自编码器 国际惯例,参考文献: Stacked Denoising Autoencoders ...

  7. Mr.J-- jQuery学习笔记(十四)--动画显示隐藏

    eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...

  8. linux学习笔记十四:安装SAMBA(Server Message Block)

    NFS:仅用于Linux之间 CIFS:仅用于Windows之间 SAMBA:可用于Linux与Windows之间,基于NetBIOS协议(用于LAN内部,不能跨路由),没有IP地址的概念,根据 Ne ...

  9. 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题

    这个问题我在网上看来很多方法,有些看得似懂非懂的,后来自己采用一种比较投机的方法,居然可行,呵呵,拿出来跟大家分享一下. 其实就是把画的线向下偏移一定高度,当然针对不同分辨率,这个值也就不同: (因为 ...

  10. 步步为营 .NET 设计模式学习笔记 十四、Decorator(装饰模式)

    概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性:并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多 ...

最新文章

  1. 添加打印机还显示脱机_打印机总是显示脱机无法打印的解决办法
  2. R语言学习笔记:向量
  3. 不带头结点链表,尾部插入法创建
  4. SAP CRM呼叫中心toolbar的cancel按钮会导致session清理
  5. IDE日志分析方法pt。 1个
  6. 天刀现在最新服务器,天涯明月刀8.21服务器更新公告
  7. 6年级下册计算机教案,六年级下册信息技术教案 (6).doc
  8. C# 控制台 打印输出
  9. 如何为Kalman Studio编写T4模板
  10. 绿色版Tomcat的配置
  11. 水晶报表CrystalReports很强大也很简单!
  12. git使用时报错:fatal: unable to access ‘xxx‘ : Failed to connect to github.com port 443 after: 【Time out】
  13. mbedtls学习3.mbedtls_API分析
  14. 大数据——Flink 知识点整理
  15. 两大数据库安全产品比拼:IBM Guardium VS Imperva SecureSpher
  16. 内存映射I/O与端口映射I/O的区别
  17. 此错误(HTTP 500 内部服务器错误)意味着您正在访问的网站出现了服务器问题,此问题阻止了该网页的显示
  18. (转载)类欧几里得(知识点整理+板子总结)
  19. 考公 or 直接找工作,该怎么选?
  20. Linux基本操作2.0

热门文章

  1. 博弈论 —— matlab
  2. 国产自主可控的MBSE建模与仿真平台SkyEye
  3. java英语词汇_java常用的英语单词
  4. python lxml xpath_Python/lxml/Xpath:如何找到包含特定文本的行?
  5. Django连接现有mysql数据库
  6. 史上最全的前端开发面试题(含详细答案)
  7. win10 安装mysql 8.0.12
  8. 数据库MySQL/mariadb知识点——数据类型
  9. rhel Linux 网络配置
  10. Effective前端5:减少前端代码耦合