机器学习: 共轭梯度算法(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 系列之----共轭梯度
无预处理共轭梯度 要求解线性方程组 ,稳定双共轭梯度法从初始解 开始按以下步骤迭代: 任意选择向量 使得 ,例如, 对 若 足够精确则退出 预处理共轭梯度 预处理通常被用来加速迭代方法的收敛.要使用预 ...
随机推荐
- springmvc 自定义view支持json和jsonp格式数据返回
1.如果controlloer上用@ResponseBody注解,则用<mvc:message-converter>里面配置的json解析器进行解析 <mvc:annotation- ...
- 使用AndroidStudio导入github项目
1.在studio中配置github的项目地址 2.当你点击github,会这个样子 3.此处放你要clone的地址 ,然后点击clone. 4.等一会会出现这个页面,然后点击yes ,会出现这个页面 ...
- 从概率图模型pgm到rbm
有向图模型:directed acyclic graph DAG 贝叶斯网络 对称的,无向图, UGM: undirected graphic model UGM, 更有名的名称是MRF,mar ...
- mac ci框架安装使用 memcached存session
mac 安装memcached brew info memcached brew install memcached brew install memcached 安装过程具体不详细多讲 memcac ...
- 1-2Controller之Session
laravel5.5版本. 视频教程是慕课网中的:轻松学会Laravel-表单篇 1-2 /*session简介: 1.由于HTTP协议是无状态(Stateless)的,所以session提供一种保存 ...
- oracle中的对象创建及删除语句【原创】
oracle对象 1.表 a)创建表1 create table students( id number(10), stuno number(10) , sex varchar2(2), age in ...
- 动手动脑(Java)
1.仔细阅读示例: EnumTest.java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗? 答: public class EnumTest { public stat ...
- Springboot+MyBatis+mysql+jsp页面跳转详细示例
SpringBoot与MyBatis搭建环境,底层数据库为mysql,页面使用JSP(官网上不推荐使用jsp),完成从数据库中查询出数据,在jsp页面中显示,并且实现页面的跳转功能. 项 ...
- day04 列表
今天主要学习了 列表 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查 ...
- 《Python》IO模型
一.IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下: 同步:一件事情做完再做另一件事情 异步:同时做多件事情 阻塞:sleep.input.join.shutdown.get.acquire ...