系数矩阵为Hessian矩阵时的使用Pearlmutter trick的共轭梯度解法
共轭梯度法已经在前文中给出介绍:
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) 是系数矩阵在迭代过程中是不变的。