栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

最优化学期学习笔记---共轭梯度法(代码记录)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最优化学期学习笔记---共轭梯度法(代码记录)

最优化记录

文章目录
  • 最优化记录
  • 一、梯度与共轭梯度置于最优化
  • 二、代码实例


一、梯度与共轭梯度置于最优化 到了最优化领域当中,解析法(求导数=0得极值点)已经不能直接应用,因为多维直接解析计算量非常大,由此引申出了迭代法。机器学习的优化算法也可划分到此,不过似乎演化算法与梯度同属优化但内在多种不同。

解析法:
在我们本科学习的高数当中,要想求极小点,首先考虑的便是一阶导数为0的点,同理,高维空间中对应的概念则是梯度为0的点。(不是偏导,而是由所有偏导组成的向量)


多维空间二次函数的1/2在这里没有很大的特殊意义,只是为了再对X2进行求导后多出来的2系数进行抵消。

迭代公式:Xk+1=Xk + akdk

最速下降法: 方向d为负梯度方向 步长a可以利用局部极小点的一阶必要条件

共轭梯度法:定义两个向量d1,d2,矩阵Q。d1Qd2=0。则d1与d2方向共轭。在优化中则可以理解为上一次搜索方法与这一次的应当方向共轭。即dk与dk+1方向共轭。但由于初始方向d0往往是负梯度方向,故而共轭梯度。

(共轭梯度具有二次终结性,即几维空间就迭代几次,属于线性搜索,相较于牛顿法尔和拟牛顿法等超线性方法还是速度慢了)

算法步骤这里直接截图最优化算法导论这本书的算法

二、代码实例

考虑最优化如下函数:

首先需要将其转换为标准形态

X0作为初始点,利用共轭梯度法进行计算,原题只为2维空间,只需要迭代两次即可

import numpy as np
Q = np.array([[4/3,-1],[-1,1]])
x0 = np.array([[-2],[4]])
B = np.array([[2],[0]])
g0 = np.dot(Q,x0)-B
d0 = -g0
a0 = -( ( g0.T.dot(d0) ) /  (d0.T.dot(Q).dot(d0)) )
x1 = x0+a0*d0
g1 =  np.dot(Q,x1)-B
beta0 = ( g1.T.dot(Q).dot(d0) ) / ( d0.T.dot(Q).dot(d0))
d1 = -g1 + beta0*d0
a1 = -( ( g1.T.dot(d1) ) /  (d1.T.dot(Q).dot(d1)) )
x2 = x1+a1*d1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号