首页 > 编程语言 >BFGS算法中的SWM公式应用

BFGS算法中的SWM公式应用

时间:2023-04-04 11:56:36浏览次数:53  
标签:BFGS frac Ty Ts ks 算法 SWM ky TB

BFGS算法矩阵$ B_k $的迭代公式为:

$$B_{k+1}=B_k+\frac{y_ky_k^T}{y_k^T\delta_k}-\frac{B_k\delta_k\delta_k^TB_k}{\delta_k^TB_k\delta_k}$$

Sherman-Morrison公式为:

假设 A 是 n 阶可逆矩阵, t 为常量,u,v 是 n 维向量,且 $A+uv^T $也是可逆矩阵,则

$$(A+\frac{uv^T}{t})^{-1}=A^{-1}-\frac{A^{-1}uv^TA^{-1}}{t+v^TA^{-1}u}$$

下面我们需要根据上述两个式子,得到$B_{k+1}$的逆矩阵$H_{k+1}$的迭代格式。注意下面推导过程中第二个等号和第三个等号分别利用了一次Sherman-Morrison公式。\begin{align*} & B_{k+1}^{-1} =(B_k+\frac{y_ky_k^T}{y_k^Ts_k}-\frac{B_ks_ks_k^TB_k}{s_k^TB_ks_k})^{-1}\\ &=(B_k+\frac{y_ky_k^T}{y_k^Ts_k})^{-1}+(B_k+\frac{y_ky_k^T}{y_k^Ts_k})^{-1}\frac{B_ks_ks_k^TB_k}{s_k^TB_ks_k-s_k^TB_k(B_k+\frac{y_ky_k^T}{y_k^Ts_k})^{-1}B_ks_k}(B_k+\frac{y_ky_k^T}{y_k^Ts_k})^{-1}\\ &=(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})+(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^T\delta_k+y_k^TB_k^{-1}y_k})\frac{B_ks_ks_k^TB_k}{s_k^TB_ks_k-s_k^TB_k(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})B_ks_k}(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})\\ &=(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})+(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})\frac{B_ks_ks_k^TB_k}{\frac{s_k^Ty_ky_k^Ts_k}{y_k^Ts_k+y_k^TB_k^{-1}y_k}}(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})\\ &=(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})+\frac{B_k^{-1}B_ks_ks_k^TB_kB_k^{-1}}{\frac{s_k^Ty_ky_k^Ts_k}{y_k^Ts_k+y_k^TB_k^{-1}y_k}}-\frac{B_k^{-1}B_ks_ks_k^TB_k}{\frac{s_k^Ty_ky_k^Ts_k}{y_k^Ts_k+y_k^TB_k^{-1}y_k}}\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k}\frac{B_ks_ks_k^TB_k}{\frac{s_k^Ty_ky_k^Ts_k}{y_k^Ts_k+y_k^TB_k^{-1}y_k}}B_k^{-1}+\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k}\frac{B_ksa_ks_k^TB_k}{\frac{s_k^Ty_ky_k^Ts_k}{y_k^Ts_k+y_k^TB_k^{-1}y_k}}\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k}\\ &=(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k})+\frac{s_ks_k^T(y_k^Ts_k+y_k^TB_k^{-1}y_k)}{s_k^Ty_ky_k^Ts_k}-\frac{s_ks_k^Ty_ky_k^TB_k^{-1}}{s_k^Ty_ky_k^Ts_k}- \frac{B_k^{-1}y_ky_k^Ts_ks_k^T}{s_k^Ty_ky_k^Ts_k}+\frac{B_k^{-1}y_k(y_k^Ts_ks_k^Ty_k)y_k^TB_k^{-1}}{(y_k^Ts_k+y_k^TB_k^{-1}y_k)(s_k^Ty_ky_k^Ts_k)}\\ &=(B_k^{-1}-\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{y_k^Ts_k+y_k^TB_k^{-1}y_k}) +\frac{s_ks_k^T(y_k^Ts_k+y_k^TB_k^{-1}y_k)}{(s_k^Ty_k)^2} -\frac{s_k(s_k^Ty_k)y_k^TB_k^{-1}}{(s_k^Ty_k)^2} -\frac{B_k^{-1}y_k(y_k^Ts_k)s_k^T}{(s_k^Ty_k)^2}+\frac{B_k^{-1}y_ky_k^TB_k^{-1}}{(y_k^Ts_k+y_k^TB_k^{-1}y_k)}\\ &=B_k^{-1} +\frac{s_ks_k^T(y_k^Ts_k)}{(s_k^Ty_k)^2} +\frac{s_ks_k^T(y_k^TB_k^{-1}y_k)}{(s_k^Ty_k)^2} -\frac{s_ky_k^TB_k^{-1}}{s_k^Ty_k} -\frac{B_k^{-1}y_ks_k^T}{s_k^Ty_k}\\ &=B_k^{-1} -\frac{B_k^{-1}y_ks_k^T}{s_k^Ty_k} -\frac{s_ky_k^TB_k^{-1}}{s_k^Ty_k} +\frac{s_k(y_k^TB_k^{-1}y_k)s_k^T}{(s_k^Ty_k)^2} +\frac{s_ks_k^T}{s_k^Ty_k}\\ &=B_k^{-1}(I-\frac{y_ks_k^T}{s_k^Ty_k}) -\frac{s_ky_k^TB_k^{-1}}{s_k^Ty_k}(I-\frac{y_ks_k^T}{s_k^Ty_k}) +\frac{s_ks_k^T}{s_k^Ty_k}\\ &=(I-\frac{s_ky_k^T}{s_k^Ty_k})B_k^{-1}(I-\frac{y_ks_k^T}{s_k^Ty_k})+\frac{s_ks_k^T}{s_k^Ty_k}\\ &=(I-\frac{s_ky_k^T}{s_k^Ty_k})B_k^{-1}(I-\frac{s_ky_k^T}{s_k^Ty_k})^T+\frac{s_ks_k^T}{s_k^Ty_k} \end{align*}

记:$H_k=B_k^{-1},H_{k+1}=H_{k+1}^{-1}$,则有
$$H_{k+1}=(I-\frac{s_ky_k^T}{s_k^Ty_k})H_k(I-\frac{s_ky_k^T}{s_k^Ty_k})^T+\frac{s_ks_k^T}{s_k^Ty_k}$$

本文参考这篇知乎文章:

Broyden类算法:BFGS算法的迭代公式推导(应用两次Sherman-Morrison公式) - 知乎 (zhihu.com) 

 

标签:BFGS,frac,Ty,Ts,ks,算法,SWM,ky,TB
From: https://www.cnblogs.com/wjma2719/p/17285935.html

相关文章

  • 【初赛】各种排序算法总结
    一、算法评价排序方法平均时间最好时间最坏时间冒泡排序(稳定)O(n^2)O(n)O(n^2)选择排序(不稳定)O(n^2)O(n^2)O(n^2)插入排序(稳定)O(n^2)O(n)O(n^2)快速排序(不稳定)O(nlogn)O(nlogn)O(n^2)归并排序(稳定)O(nlogn)O(nlogn)O(nlogn)堆排序(不稳定)O(nlogn)O(nlogn)O(nlogn)基数排序......
  • IdWorker 雪花算法生成id
    packageentity;importjava.lang.management.ManagementFactory;importjava.net.InetAddress;importjava.net.NetworkInterface;/***<p>名称:IdWorker.java</p>*<p>描述:分布式自增长ID</p>*<pre>*Twitter的SnowflakeJAVA实现方案......
  • BF(Brute-Force)算法
    一、问题引入模式匹配算法是对两个字符串进行比较匹配的算法。在两个串中字符逐个匹配,若完全匹配,则返回位置,否则返回-1。二、解决过程#include<stdio.h>intindex_bf(char*S,char*T,intpos){ intS_len=strlen(S); intT_len=strlen(T); if(S_len==0||T_......
  • KMP算法--模板
    生成Pattern的字符串的next数组,长度为m+1点击查看代码voidgetNext(vector<int>&next,string&pattern){intn=pattern.size();for(intj=0,k=-1;j<n;){if(k==-1||pattern[j]==pattern[k])next[++j]=++k;......
  • 太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)
     Datawhale 作者:尹晓丹,Datawhale优秀学习者寄语:首先,简单介绍了生成模型和判别模型,对条件概率、先验概率和后验概率进行了总结;其次,对朴素贝叶斯的原理及公式推导做了详细解读;再次,对三种可能遇到的问题进行了解析,给出了合理的解决办法;最后,对朴素贝叶斯的sklearn参数和代码进行了详......
  • 冒泡排序算法(超级详细)
    泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的......
  • 算法笔记
    笔记仅为个人总结模板和理解。。。快速幂:while(n)//n为多少次方{if(n&1)k=k*x%mod;n>>=1;x=x*x%mod;}returnk;} 差分:for(inti=1;i<=n;i++){intt,c;cin>>t>&......
  • 二分查找(算法笔记)
    核心代码(循环):intf=-1;while(left<=right){intmid=(left+right)/2;if(a[mid]==key){f=mid;break;}if(key<a[mid])right=mid-1;if(key>a[mid])left=mid+1;}if(f==-1)cout<<“没找到”elsecout<<f<<endl......
  • 从传感器和算法原理讲起,机器人是如何避障的
    避障是指移动机器人在行走过程中,通过传感器感知到在其规划路线上存在静态或动态障碍物时,按照一定的算法实时更新路径,绕过障碍物,最后达到目标点。避障常用哪些传感器不管是要进行导航规划还是避障,感知周边环境信息是第一步。就避障来说,移动机器人需要通过传感器实时获取自身周围......
  • 重要!每个开发者都应该掌握的9个核心算法
    许多开发者似乎都有一个很大的误解,认为算法在编程工作中没什么用处,只是工作面试中的加分项。其实并不是这样的,成为一名有秀的开发者,极其重要的是具备算法思维能力。不仅能够复制和修改标准算法,还能够使用代码运用算法解决遇到的任何问题。这里介绍9种核心算法,这是你成为高阶开发......