最优化-无约束最优化方法总结

 目录:

  1. 计算例题汇总
  2. 最速下降法
  3. 牛顿法
  4. 拟牛顿法
  5. DFP算法

最速下降法(Steepest Descent Method)梯度下降法(Gradient Descent Method)是不同的两个方法,最速下降法要找到泰勒一阶展开式令目标函数下降最多的方向,最速下降法的收到范数的限制。

当取欧式范数,就变成了梯度下降法,梯度下降法是最速下降法的特殊形式。

当选取了矩阵2范数,就得到牛顿法(Newton Method),梯度下降法和牛顿法在迭代公式上的区别只有一处,梯度下降法和牛顿法都以梯度作为更新方向,牛顿法计算Hessian矩阵逆矩阵G^{-1},与梯度的乘积作为更新方向。

牛顿法虽然比梯度下降法计算复杂,但是收敛效率要比梯度下降法高。但同时牛顿法的要求非常苛刻,不仅要求Hessian矩阵在迭代过程中至少要半正定,其次Hessian矩阵在高维的情况下的空间代价和计算时间代价都很高。因此就出现了拟牛顿法(quasi-newton method),拟牛顿法不直接Hessian矩阵及其逆矩阵,而是直接用一个矩阵H_k代替Hessian逆矩阵,所有满足该形式的都是quasi-newton法。

SR1方法DFP方法(Davidon-Fletcher-Powell)BFGS方法(Broyden-Fletcher-Goldfarb-Shanno)是常见的三个拟牛顿法。其中DFP和BFGS的公式高度对称,交换s_k和y_k,就得到了对方的H_k和B_k,两算法互为对偶。有时也会取两个公式的加权组合,即Broyden族。

共轭梯度法(CG)是动量法的理论最优。共轭方向法和梯度下降法的区别在于,梯度下降法一次更新多个维度,而共轭方向发一次只更新一个维度,之多n次就能找到最优解。而且这多个方向之间互相共轭,所谓共轭就是经过线性变换的正交(不正的正交),例如斜着的椭圆解空间,如果是梯度下降法可能要更新很多次,共轭方向只需要两次。共轭方向法旨在找到一组共轭向量组。

参考:

  • 梯度下降法和最速下降法:笔记 || 梯度法与最速下降法的本质区别 - 一土木蒙的文章 - 知乎 https://zhuanlan.zhihu.com/p/67564794笔记 || 梯度法与最速下降法的本质区别 - 一土木蒙的文章 - 知乎 https://zhuanlan.zhihu.com/p/67564794https://zhuanlan.zhihu.com/p/67564794

计算例题汇总

  • 最速下降法:https://blog.csdn.net/yu_moumou/article/details/104060401
  • 牛顿法:https://blog.csdn.net/yu_moumou/article/details/104076675
  • 拟牛顿法-BFGS:https://blog.csdn.net/yu_moumou/article/details/104513444
  • 共轭梯度法理论推导:https://blog.csdn.net/weixin_37895339/article/details/84640137
  • 共轭梯度法Fletcher-Reeves程序:https://blog.csdn.net/HelloWorldTM/article/details/123647243

最速下降法

f(x)xk附近连续可微,d为单位方向,gk=f(xk)0

根据Taylor公式:f(xk+αd)=f(xk)+αgkTd+o(α),α>0

θdgkT的夹角,则有gkTd=gkcosθ,当θ=0时,gkTd取最小值,此时f下降最快,d=gkT,也即负梯度方向是最速下降方向。

牛顿法

f(x)的二阶导数2f(x)连续,记gk=f(xk),gk=2f(xk)

Taylor展开式前三项为:qk(x)=f(xk)+gkT(xxk)+12(xxkT)Gk(xxk)

qk(x)的驻点,得0=qk(x)=gk+Gk(xxk),

如果Gk非奇异,那么牛顿迭代法的公式为xk+1=xkGk1gk

如果Gk奇异,那么dk由该式确定:Gkd=gk

Algorithm:

  1. 给定初始点和终止误差。
  2. 检验终止条件。
  3. 计算搜索方向,计算新点。

Python程序示例如下:

复制代码
# -*- coding: utf-8 -*-
# @Author : ZhaoKe
# @Time : 2022-10-05 21:31
import numpy as np
from typing import List


class NewtonMethod():
    def fun1(self, x):
        # print(x)
        return (x[0] - 3) ** 4 + (x[0] - 3*x[1]) ** 2

    def fun1_grad(self, x):
        res = np.zeros((2, 1))
        res[0, 0] = 4*(x[0]-3)**3+2*(x[0]-3*x[1])
        res[1, 0] = -6*(x[0]-3*x[1])
        return res

    def fun1_hessian(self, x):
        return np.mat([[float(12*(x[0]-3)**2)+2, -6], [-6, 18]])

    def newtonMethod(self, x0):
        cur_x = x0
        min_fun = self.fun1(cur_x)
        MAX_ITER = 40
        EPS = 0.01
        for it in range(MAX_ITER):
            print(f'=========={it}=============')
            print('------grad------')
            gk = self.fun1_grad(cur_x)
            print(gk)
            if np.linalg.norm(gk) < EPS:
                break
            print('------hessian-----')
            print(self.fun1_hessian(cur_x))
            print(np.linalg.inv(self.fun1_hessian(cur_x)))
            # print(np.linalg.inv(self.fun1_hessian(cur_x)) * self.fun1_grad(cur_x))
            dk = - np.linalg.inv(self.fun1_hessian(cur_x)) * gk
            print(f"d{it}: {dk}")
            cur_x = cur_x + dk
            cur_fun = self.fun1(cur_x)
            print(f"x{it}: {cur_x}, f_{it}: {cur_fun}")
            if min_fun > cur_fun:
                min_fun = cur_fun
        print(f"min_x: {cur_x}")
        print(f"min_f: {min_fun}")
        return cur_x


if __name__ == '__main__':
    so = NewtonMethod()
    so.newtonMethod(np.mat([[0], [0]]))
复制代码

输出结果:

min_x: [[2.88294467]
 [0.96098156]]
min_f: [[0.00018774]]

 拟牛顿法f(x):RnR在开集DRn上二次连续可微,fxk+1附近的二次近似为:

f(x)f(xk+1)+gk+1T(xxk+1)+12(xxk+1)TGk+1(xxk+1)
两侧求导得:g(x)gk+1+Gk+1(xxk+1)

x=xk,sk=xk+1xk,yk=gk+1gk,则有Gk+1Tyksk,对于二次函数,这个关系精确成立,现要求在拟牛顿法中构造出Hesse矩阵逆近似Hk+1满足这种关系式:

Hk+1yk=sk

称为:拟牛顿方程 或 拟牛顿条件。搜索得方向由dk=Hkgk确定,此外,sk称为位移,yk称为梯度差。同时还要求Hk是对称正定矩阵,Hk+1Hk经过简单的修正得到:

Hk+1=Hk+Ek

满足拟牛顿方程和上述性质所确立的方法就称为拟牛顿法,也叫变尺度法。

DFP算法

DFP算法是一个具有代表性的拟牛顿法,用于求解无约束最优化问题。

设Hesse矩阵逆近似公式中Ek为秩二矩阵时有Ek=auuT+bvvT

这里的u,v并不是唯一确定得,可以选取:u=sk,v=Hkyk,因此

a=1/skTyk,b=1/ykTHkyk

从而:Hk+1=HkHkykykTHkykTHkyk+skskTskTyk

sk=Hkyk+auuTyk+bvvTyk

 正在更新...

最速下降法

共轭梯度法

posted @   倦鸟已归时  阅读(602)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示