Wirtinger流

从复数梯度到Wirtinger流

有了前文对复数梯度的定义,我们已经可以在复数域中建立与实数优化完全对应的一阶迭代方法。对于实值函数

\(f:{\mathbb{C}^n} \to \mathbb{R}\),

其在点z处的一阶变化满足

\[{\rm{d}}\mathcal{L} = {\mathop{\rm Re}\nolimits} \left\langle {2\nabla _{{\bf{\bar z}}}\mathcal{L},{\rm{d}}{\bf{z}}} \right\rangle\]
(1)

因此,当沿着方向

\(- \eta \nabla _{{\bf{\bar z}}}\mathcal{L}\)

进行更新是,函数在一阶近似下将取得最快下降。于是,复数域中的梯度下降自然写为

\[{{\bf{z}}_{k + 1}} = {{\bf{z}}_k} - {\eta _k}\nabla _{{{{\bf{\bar z}}}_k}}\mathcal{L}\left( {{{\bf{z}}_k}} \right)\]
(2)

这说明,一旦目标函数\(\mathcal{L}\)确定,Wirtinger流的核心问题便转化为“如何计算\(\nabla _{{\bf{\bar z}}}\mathcal{L}\)”。下面以最经典的相位恢复模型为例进行推导。

设未知信号为\({\bf{z}} \in {\mathbb{C}^n}\),测量向量为\({{\bf{a}}_r} \in {\mathbb{C}^n}\),则观测强度满足

\[{{\bf{y}}_r} = {\left| {\left\langle {{{\bf{a}}_r},{\bf{z}}} \right\rangle } \right|^2},{\rm{ }}r = 1,{\rm{ }}2,{\rm{ }} \cdots m\]
(3)

这里\(\left\langle {{{\bf{a}}_r},{\bf{z}}} \right\rangle = {\bf{a}}_r^\dagger {\bf{z}}\)表示复内积,上标\(\dagger \)表示共轭转置。相位恢复的目标是在只知道强度\({{\bf{y}}_r}\)的条件下恢复z

为了将该问题转化为优化问题,通常考虑如下非凸最小二乘目标函数:

\[\mathcal{L}\left( {\bf{z}} \right) = \frac{1}{{2m}}\sum\limits_{r = 1}^m {{{\left( {{{\left| {{\bf{a}}_r^\dagger {\bf{z}}} \right|}^2} - {{\bf{y}}_r}} \right)}^2}}\]
(4)

这是一个定义在复数域上的实值函数。由于其中包含模平方项,它显然不是全纯函数,因此不能使用传统复导数;但借助 Wirtinger 导数,可以对其进行直接求导。

为简化记号,记\({{\bf{u}}_r}\left( {\bf{z}} \right) = {\bf{a}}_r^\dagger {\bf{z}}\)。则

\[{\left| {{\bf{a}}_r^\dagger {\bf{z}}} \right|^2} = {\left| {{{\bf{u}}_r}} \right|^2} = {{\bf{u}}_r}\overline {{{\bf{u}}_r}}\]
(5)

注意到\({{\bf{u}}_r}\)关于z线性,而关于\({\bf{\bar z}}\)不变,因此\(\partial {{\bf{u}}_r}/\partial {\bf{\bar z}} = 0\)。另一方面\(\overline {{{\bf{u}}_r}} = {{\bf{z}}^\dagger }{{\bf{a}}_r}\),则 \(\partial \overline {{{\bf{u}}_r}} /\partial {\bf{\bar z}} = {{\bf{a}}_r}\)。于是利用求导的乘法法则可得

\[\frac{{\partial {{\left| {{{\bf{u}}_r}} \right|}^2}}}{{\partial {\bf{\bar z}}}} = \frac{{\partial \left( {{{\bf{u}}_r}\overline {{{\bf{u}}_r}} } \right)}}{{\partial {\bf{\bar z}}}} = {{\bf{u}}_r}\frac{{\partial \overline {{{\bf{u}}_r}} }}{{\partial {\bf{\bar z}}}} = {{\bf{u}}_r}{{\bf{a}}_r} = \left( {{\bf{a}}_r^\dagger {\bf{z}}} \right){{\bf{a}}_r}\]
(6)

再对目标函数求导

\[\nabla _{{\bf{\bar z}}}\mathcal{L}\left( {\bf{z}} \right) = \frac{1}{{2m}}\sum\limits_{r = 1}^m {2\left( {{{\left| {{\bf{a}}_r^\dagger {\bf{z}}} \right|}^2} - {{\bf{y}}_r}} \right)\frac{{\partial {{\left| {{{\bf{u}}_r}} \right|}^2}}}{{\partial {\bf{\bar z}}}}} = \frac{1}{m}\sum\limits_{r = 1}^m {\left( {{{\left| {{\bf{a}}_r^\dagger {\bf{z}}} \right|}^2} - {{\bf{y}}_r}} \right)\left( {{\bf{a}}_r^\dagger {\bf{z}}} \right){{\bf{a}}_r}}\]
(7)

这正是Wirtinger流所用梯度的基本形式。

为了使表达更加紧凑,可以进一步写成矩阵形式。令测量矩阵

\[{\bf{A}} = \left( {{\bf{a}}_1^\dagger ,{\rm{ }}{\bf{a}}_2^\dagger ,{\rm{ }} \cdots {\bf{a}}_m^\dagger } \right) \in {\mathbb{C}^{m \times n}}\]
(8)

\[{\left| {{\bf{Az}}} \right|^2} = \left( {{{\left| {{\bf{a}}_1^\dagger {\bf{z}}} \right|}^2},{\rm{ }}{{\left| {{\bf{a}}_2^\dagger {\bf{z}}} \right|}^2},{\rm{ }} \cdots {{\left| {{\bf{a}}_m^\dagger {\bf{z}}} \right|}^2}} \right)\]
(9)

式 (7) 的梯度表达式可以改写为

\[\nabla _{{\bf{\bar z}}}\mathcal{L}\left( {\bf{z}} \right) = \frac{1}{m}{{\bf{A}}^\dagger }\left[ {\left( {{{\left| {{\bf{Az}}} \right|}^2} - {\bf{y}}} \right) \odot \left( {{\bf{Az}}} \right)} \right]\]
(10)

于是Wirtinger 流迭代写为

\[{{\bf{z}}_{k + 1}} = {{\bf{z}}_k} - \frac{{{\eta _k}}}{m}{{\bf{A}}^\dagger }\left[ {\left( {{{\left| {{\bf{A}}{{\bf{z}}_k}} \right|}^2} - {\bf{y}}} \right) \odot \left( {{\bf{A}}{{\bf{z}}_k}} \right)} \right]\]
(11)

到这里可以看出,Wirtinger 流的结构与实数域中的梯度下降完全一致,只是普通梯度被替换为 Wirtinger梯度。算法的每一次迭代都包含三个步骤:先由当前估计\({{\bf{z}}_k}\)生成预测测量\({\bf{A}}{{\bf{z}}_k}\),再将其模平方与观测强度\({\bf{y}}\)比较形成残差,最后通过伴随算子\({{\bf{A}}^\dagger }\)将该残差回传至信号域,得到更新方向。正因如此,Wirtinger 流也可以被理解为一种“复数域的误差反传”。

不过,相位恢复问题的目标函数是非凸的,仅有梯度表达还不足以保证算法表现良好,初始化同样至关重要。若初值距离真实解过远,迭代可能陷入错误的局部结构中。因此,经典 WF 通常配合谱初始化。其基本思想是构造矩阵

\[{\bf{Y}} = \frac{1}{m}\sum\limits_{r = 1}^m {{{\bf{y}}_r}{{\bf{a}}_r}{\bf{a}}_r^\dagger }\]
(12)

并取其最大特征值对应的特征向量\({{\bf{v}}_{\max }}\)作为初始方向。再根据观测能量对其幅值进行归一化,得到\({{\bf{z}}_0} = \lambda {{\bf{v}}_{\max }}\),其中λ是由测量幅值估计得到的尺度因子。这样构造的初值通常已经与真实解具有较高相关性,从而使随后的梯度下降进入正确的吸引域。

Wirtinger流的意义并不局限于某一个具体公式。它揭示了一个更一般的思想:只要损失函数是关于复变量的实值可微函数,就可以利用 Wirtinger 导数构造复数域中的一阶优化算法。换言之,Wirtinger流只是“复数梯度下降在相位恢复问题上的一个典型实例”。其成功之处正在于,它将复数物理模型、非凸损失函数与标准优化框架统一到了同一个数学语言之下。

“Wirtinger流”这一名称并非随意命名,而是直接反映了该算法的数学本质。其名称由两部分组成:“Wirtinger”与“流(Flow)”。其中,“Wirtinger”指的是算法中所采用的梯度是通过 Wirtinger 导数定义的。在复数域中,由于实值函数通常不满足全纯条件,传统复导数不再适用,而 Wirtinger 导数提供了一种自然的替代方式,使得我们能够在不拆分实部和虚部的情况下定义梯度,并进行优化。而“Flow”则来源于一个更具几何与物理意义的概念。在连续时间的视角下,优化过程可以看作是一个动态系统,其演化由如下微分方程描述:

\[\frac{{{\rm{d}}{\bf{z}}}}{{{\rm{d}}t}} = - \nabla _{{\bf{\bar z}}}\mathcal{L}\left( {{{\bf{z}}_t}} \right)\]
(13)

该方程刻画了变量\({{\bf{z}}_t}\)随时间沿着函数\(\mathcal{L}\)的最陡下降方向不断变化的过程。这种“沿着能量下降方向连续演化”的行为,类似于水在势能场中的自然流动,因此被称为“流”。从更直观的角度理解,可以将目标函数\(\mathcal{L}\)看作一张“能量地形图”,而变量z则像一个在地形上移动的点。Wirtinger 流描述的正是这个点如何沿着最陡的下坡方向不断“流动”,最终到达能量较低的位置。这种将优化过程理解为“流动”的视角,也为后续分析其收敛性和稳定性提供了重要的几何直觉。

在后续章节中,这一框架还可以自然推广到更复杂的情形,例如带正则项的相位恢复、带噪声统计建模的似然优化,以及叠层成像、数字全息等更一般的计算成像问题。无论具体模型如何变化,其核心仍然不变:首先写出合适的实值目标函数,然后利用 Wirtinger 导数求得\(\nabla _{{\bf{\bar z}}}\mathcal{L}\left( {\bf{z}} \right)\),最后据此构造相应的迭代算法。