Levenberg-marquardt:如何使用固定参数计算雅可比

计算科学 优化 雅可比
2021-11-28 21:59:18

因此,我正在使用 levenberg-marquardt 算法研究拟合算法,但我对如何处理固定参数感到有些困惑。环顾其他代码,例如 lm 算法的 minpack 版本,看起来它们只是将固定参数的 jacobian 列设置为 0.0,这是有道理的,因为它们没有改变。J如果没有任何固定参数,则正在以数字方式计算并且工作正常。

问题是我总是得到一个奇异的不可逆矩阵JTJ当我这样做时,例如

[[       1005,          0,    -110500],
 [          0,          0,          0],
 [    -110500,          0,    3.013e7]]  

(在这种情况下,第二个参数保持不变......)

有人对LM算法有一些经验吗?关于如何处理 jacobian 中的固定参数的任何想法?我应该只创建一个只有自由参数和补丁在固定参数中的雅可比吗?

2个回答

这里有几个选项:

  1. 不要计算与固定参数相对应的雅可比元素,并且不要将这些参数包含在要拟合的参数向量中。在您的代码中,对于每个可能在对 LM 例程的特定调用中修复的参数集合,这将需要不同版本的函数和雅可比行列式。

  2. 计算所有元素FJ但然后删除那些元素J对应固定参数。这允许您编写一个用于计算雅可比行列的例程,但随后需要您修改您的 LM 例程,以便您可以指定哪些参数是固定的。删除列后J对应于固定参数,可以计算JTJ没有你提到的 0 的行和列。然而,向量Δp作为线性系统的解决方案,您需要在与固定参数相对应的位置插入 0。

  3. 您还可以修改线性方程组以强制解决方案执行您想要的操作。如果参数k是固定的,然后将列归零k和行kJTJ,然后在行中设置对角线条目k, 柱子k1. 最后,确保k右侧向量中的第 项为 0。这将确保Δpk=0.

我对这件事不太感兴趣,但是当我们使用 lm 训练神经网络时,我们使用了一个技巧:

原方程为

Δw=(JTJ)1JTe
通过减去项以使矩阵可逆,其中 u 是常数,I 是单位矩阵,因此方程将变为 所以当足够大时,它将确保矩阵是可逆的。uI
Δw=(JTJ+uI)1JTe
u

正如我所说,我是从 NN 的角度说的,参数是以迭代方式计算的,并且经常随着算法的进展而修改。因此,您可能需要根据您的最小化目标对其进行修改,如果我没有说得足够清楚,我很抱歉。u