本节作为处理具有正交列的矩阵目标函数的示例指南。我们发现了一些值得强调的常见技巧。
一旦有了目标函数 F(Y) 的公式,我们就通过 \mathrm{tr}(V^*dF(Y)) =\frac{d}{dt} F(Y(t)) \vert _{t=0} 隐式定义 dF(Y) 的公式,其中 Y(t) = Y+tV(或任何满足 \dot{Y}(0)=V 的曲线 Y(t))。读者可能记得 \mathrm{tr}(A^* B)= \sum_{i,j} A_{ij} B_{ij},因此它就像向量的实内积一样,[1]dF(Y) 的隐式定义实际上是无约束函数在欧几里得空间中梯度方向导数的解释。
对于我们在示例中使用的大多数函数,获取 dF 公式的最简单方法是实际使用隐式定义。
例如,如果 F(Y) = \mathrm{tr}(A Y^* B Y),则有
我们推荐的过程是:
作为检查,我们建议在使用提供的子目录 finitediff
中的有限差分代码 dF.m
检查推导之前进行。
软件需要一个名为 ddF.m
的函数,该函数返回 \frac{d}{dt} dF(Y(t))\vert _{t=0} 对于 \dot{Y}(0) = H。软件所需的二阶导数信息比一阶导数更容易推导。如果有一个 dF(Y) 的解析表达式,那么只需对其进行微分。
如果由于某种原因,ddF.m
的计算成本远高于使用 dF.m
进行两次 dF(Y) 评估的成本,读者可以考虑使用 finitediff
中找到的有限差分函数 ddF.m
(或仅将其用作检查)。
然而,强烈建议使用解析表达式来计算 dF(Y),因为它的有限差分代码需要大量的函数评估(2np)。