机器学习: 共轭梯度算法(PCG)
今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。
我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组:
这里的 A(n×n)" role="presentation" style="position: relative;">A(n×n)A(n×n) 是对称,正定矩阵, b(n×1)" role="presentation" style="position: relative;">b(n×1)b(n×1) 同样也是已知的列向量,我们需要通过 A" role="presentation" style="position: relative;">AA 和 b" role="presentation" style="position: relative;">bb 来求解 x(n×1)" role="presentation" style="position: relative;">x(n×1)x(n×1), 这其实是我们熟知的一些线性系统的表达式。
直接求解
首先,我们来看一种直观的解法,我们定义满足如下关系的向量为关于 矩阵 A" role="presentation" style="position: relative;">AA 的共轭向量,
因为矩阵 A" role="presentation" style="position: relative;">AA 是对称正定矩阵,所以矩阵 A" role="presentation" style="position: relative;">AA 定义了一个内积空间:
基于此,我们可以定义一组向量 P" role="presentation" style="position: relative;">PP
其中的向量 p1" role="presentation" style="position: relative;">p1p1 , p2" role="presentation" style="position: relative;">p2p2, … , pn" role="presentation" style="position: relative;">pnpn 都是互为共轭的,那么 P" role="presentation" style="position: relative;">PP 构成了 Rn" role="presentation" style="position: relative;">RnRn 空间的一个基,上述方程的解 x∗" role="presentation" style="position: relative;">x∗x∗ 可以表示成 P" role="presentation" style="position: relative;">PP 中向量的线性组合:
根据上面的表达式,我们可以得到:
这意味着:
所以,如果我们要直接求解的,可以先对矩阵 A" role="presentation" style="position: relative;">AA 进行特征值分解,求出一系列的共轭向量,然后求出系数,最后可以得到方程的解 x∗" role="presentation" style="position: relative;">x∗x∗
迭代求解
上面的方法已经说明,x∗" role="presentation" style="position: relative;">x∗x∗ 是一系列共轭向量 p" role="presentation" style="position: relative;">pp 的线性组合,学过 PCA 的都知道,可以用前面占比高的向量组合进行逼近,而不需要把所有的向量都组合到一起,PCG 也是用到了这种思想,通过仔细的挑选共轭向量 p" role="presentation" style="position: relative;">pp 来重建方程的解 x∗" role="presentation" style="position: relative;">x∗x∗。
我们先来看下面的一个方程:
对上面的方程求导,我们可以得到:
可以看到,方程的一阶导数就是我们需要解的线性方程组,令一阶导数为 0,那么我们需要解的就是这样一个线性方程组了。
假设我们随机定义 x" role="presentation" style="position: relative;">xx 的一个初始向量为 x0" role="presentation" style="position: relative;">x0x0,那么我们可以定义第一个共轭向量为 p0=b−Ax0" role="presentation" style="position: relative;">p0=b−Ax0p0=b−Ax0, 后续的基向量都是和梯度共轭的,所以称为共轭梯度法。
下面给出详细的算法流程:
而 preconditioned conjugate gradient method 与共轭梯度法的不同之处在于预先定义了一个特殊矩阵 M" role="presentation" style="position: relative;">MM:
参考来源:wiki 百科
https://en.wikipedia.org/wiki/Conjugate_gradient_method#The_preconditioned_conjugate_gradient_method
机器学习: 共轭梯度算法(PCG)的更多相关文章
- 共轭梯度算法求最小值-scipy
# coding=utf-8 #共轭梯度算法求最小值 import numpy as np from scipy import optimize def f(x, *args): u, v = x a ...
- 机器学习中的算法-决策树模型组合之随机森林与GBDT
机器学习中的算法(1)-决策树模型组合之随机森林与GBDT 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使 ...
- [机器学习Lesson3] 梯度下降算法
1. Gradient Descent(梯度下降) 梯度下降算法是很常用的算法,可以将代价函数J最小化.它不仅被用在线性回归上,也被广泛应用于机器学习领域中的众多领域. 1.1 线性回归问题应用 我们 ...
- 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法
原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...
- 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...
- 【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍
考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表. 1.机器学习之PageRank算法应用与C#实现(1)算法介绍 2.机器学习之PageRank算法应用与C#实现(2 ...
- 机器学习十大算法之KNN(K最近邻,k-NearestNeighbor)算法
机器学习十大算法之KNN算法 前段时间一直在搞tkinter,机器学习荒废了一阵子.如今想重新写一个,发现遇到不少问题,不过最终还是解决了.希望与大家共同进步. 闲话少说,进入正题. KNN算法也称最 ...
- 机器学习十大算法 之 kNN(一)
机器学习十大算法 之 kNN(一) 最近在学习机器学习领域的十大经典算法,先从kNN开始吧. 简介 kNN是一种有监督学习方法,它的思想很简单,对于一个未分类的样本来说,通过距离它最近的k个" ...
- Mahout 系列之----共轭梯度
无预处理共轭梯度 要求解线性方程组 ,稳定双共轭梯度法从初始解 开始按以下步骤迭代: 任意选择向量 使得 ,例如, 对 若 足够精确则退出 预处理共轭梯度 预处理通常被用来加速迭代方法的收敛.要使用预 ...
随机推荐
- 使用iText快速更新书签
一.介绍 pdfbox基于Apache协议,商用无需开放源代码. iText基于APGL协议,打包和修改需发布源码,除非花钱买断. 二.用途 下载的电子书,有的书签是FitHeight,也就是缩放后整 ...
- MapReduce分布式算法
一.MapReduce 有一种特殊的并行算法,就是分布式算法.在并行算法只需要两个到四个内核时,完全可以在笔记本电脑上运行,但是如果需要数百个内核,这种情况下,可让算法在多台计算机上运行. 假设你有一 ...
- Chargen UDP服务远程拒绝服务攻击漏洞修复教程
一.前置说明 chargen服务最初设计用于测试网络状态,监听19端口(包括TCP和UDP),其中UDP协议存在“Chargen UDP服务远程拒绝服务攻击漏洞”. chargen一般不会使用,所以直 ...
- Weblogic domain扩展教程
weblogic扩展domain有两种扩展,一是机器上已有要扩展的domain只是在其内增加受管服务器,二是机器上没有domain要新建domain然后增加受管服务器 一.机器上已有要扩展的domai ...
- MySQL修改版本号教程
处理扫描器扫出的漏洞,基本有四种方法:一是升级软件包到新版本(包括打补丁和整个替换升级),二是修改banner配置项(包括禁用banner和修改banner内容),三是添加白名单(包括主机防火墙和软件 ...
- weblogic开启http访问日志并实时写入日志文件
由于http访问会产生大量日志,耗去不少IO和CPU所以在生产一般是不启用的:但有时我们会想启用http访问日志,尤其是在系统上线调试的时候. weblogic的日志默认在domain_name/se ...
- globals() 和 locals() 函数
globals() 和 locals() 函数 根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字. 如果在函数内部调用 locals(),返回的 ...
- php 日志模块源码解析
php日志模块设计 Monolog 是PHP的一个日志类库解析 整体介绍:monolog日志模块遵循 PSR3 的接口规范.主要有日志格式类接口(格式化日志信息),处理类接口(写日志的驱动,通过扩展写 ...
- checkbox多选按钮变成单选
<input id="a" type="checkbox"/><input id="b" type="check ...
- NOI2019冬令营报到通知
由中国计算机学会(CCF)主办的2019全国青少年信息学奥林匹克冬令营(CCF NOI 2019冬令营)将于2019年1月24日-31日在广州市第二中学举行.其中1月24日为报到日,1月31日为疏散日 ...