系数矩阵为Hessian矩阵时的使用Pearlmutter trick的共轭梯度解法

Προμηθεύς / 2023-05-31 / 原文

共轭梯度法已经在前文中给出介绍:

python版本的“共轭梯度法”算法代码

 

 

=======================================

 

 

使用共轭梯度法时,如果系数矩阵为Hessian矩阵,那么我们可以使用Pearlmutter trick技术来减少计算过程中的内存消耗,加速计算。

 

使用Pearlmutter trick的共轭梯度解法源自论文:

Fast Exact Multiplication by the Hessian

 

论文地址:

https://www.bcl.hamilton.ie/~barak/papers/nc-hessian.pdf

 

 

由于原论文中内容较多,所以我们介绍Pearlmutter trick技术建议看的资料为其他网文blog:

https://justindomke.wordpress.com/2009/01/17/hessian-vector-products/

 

 ======================================

依照上面内容解释一下:

Hession 矩阵 H(x) 为 f(x) 的二阶导数矩阵,因此有:

 

 

 

我们可以将  g(x)  按照泰勒公式展开为一阶导形式:

 

 

v 为一个向量vector,根据上面的公式我们可以得到:

其中 γ 为标量系数,该系数极小,因此γv可以看做为Δx

 

 

 

因此我们可以得到下面形式的公式:

 

 

--------------------------------------------------------

 

因为 H(x) 必然为正定对称矩阵,因此我们对  H(x) * y = b 形式的求解式可以使用共轭梯度法,而共轭梯度法在计算过程中需要重复的计算  H(x)*p, 其中 p 为计算过程中的迭代向量,p是在迭代过程中不断变化的,而H(x) 是系数矩阵在迭代过程中是不变的。