zehua

Zehua

勒让德变换与半二次优化方法

2024-11-22

勒让德变换

定义

勒让德变换(Legendre Transform,LT)或称作凸共轭(Convex Conjugate,CC),是凸分析中的一个基本工具,广泛用于优化理论中,它将一个函数f(x) 映射为另一个凸函数f^*(t)

在进行 LT 之前,我们需要确保原函数f 满足以下两个条件:

  • 严格凸性(strictly convex): 函数f(x) 是严格凸的。

  • 可导性(differentiability): 函数f(x) 至少一次可导(一般要二次导)。

因此通过 勒让德变换,我们就可以得到一个新的函数f^*

f^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - f(x) \big]

其中, \sup 表示取上确界(supremum),也就是取x t - f(x) 的最大值,因此我们可以得到:

x t - f(x) \leq f^*(t)

说明f^*(t) 是所有x t - f(x) 的上界

我们再将f(x) 移到右边,可得:

x t \leq f^*(t) + f(x)

这体现了f^*(t)f(x) 的对偶性

性质

我们现在关注勒让德变换在函数的横向伸缩(dilatation)、平移(shift)、以及纵向平移和伸缩的情况下的性质变化

(a) 横向伸缩 (Horizontal Dilatation):

\gamma > 0 是横向伸缩系数,定义一个新函数g(x)

g(x) = f(\gamma x)

对应的勒让德变换为:

g^*(t) = f^*\left(\frac{t}{\gamma}\right)

横向缩放(乘以 \gamma)会导致勒让德共轭中的自变量t 被缩放为\frac{t}{\gamma}

证明

我们有:

g(x) = f(\gamma x)

目标是推导g^*(t) 的表达式,根据勒让德变换的定义,我们可得:

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - g(x) \big]

代入g(x) = f(\gamma x)

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - f(\gamma x) \big]

我们给x t 这部分配项,乘 \gamma \gamma,可得

g^*(t) = \sup_{x \in \mathbb{R}} \left[ \frac{\gamma x}{\gamma} t - f(\gamma x) \right]

\gamma x 保存好,得到f(\gamma x) 的 LT 变换, g^*(t) 等于:

g^*(t) = \sup_{x \in \mathbb{R}} \left[ \gamma x \cdot \frac{t}{\gamma} - f(\gamma x) \right]

我们发现,

f^*\!\biggl(\frac{t}{\gamma}\biggr) = \sup_{u \in \mathbb{R}} \bigl[ u \cdot \tfrac{t}{\gamma} - f(u) \bigr]

不用管u 是什么,只要一样就可以了,所以我们对比两个形式,观察到 \sup_{x \in \mathbb{R}} \bigl[ \gamma x \cdot \tfrac{t}{\gamma} - f(\gamma x) \bigr] 正是函数 f^*\bigl(\tfrac{t}{\gamma}\bigr) 的定义,因此:

g^*(t) = f^*\left(\frac{t}{\gamma}\right)

注意一点, \gamma > 0 的条件是必要的,这是为了保证变换方向和凸性不改变。

(b) 横向平移 (Horizontal Shift):

x_0 \in \mathbb{R} 是横向平移的位移量,定义:g(x) = f(x - x_0) 对应的勒让德变换为:

g^*(t) = f^*(t) + x_0 t

x 进行平移,相当于在勒让德共轭中增加一项线性修正x_0 t

证明

定义:g(x) = f(x - x_0)

目标是推导g^*(t) 的表达式,根据勒让德变换的定义:

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - g(x) \big]

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - f(x - x_0) \big]换元,令

u = x - x_0

因此

x = u + x_0

并且当x \in \mathbb{R} 时, u \in \mathbb{R}。将x = u + x_0 带入原式:

g^*(t) = \sup_{u \in \mathbb{R}} \big[ (u + x_0)t - f(u) \big]

展开括号:

g^*(t) = \sup_{u \in \mathbb{R}} \big[ u t + x_0 t - f(u) \big]

注意到x_0 t 是与u 无关的常数,因此可以从\sup 中提取出来:

g^*(t) = \sup_{u \in \mathbb{R}} \big[ u t - f(u) \big] + x_0 t

我们注意到,其中的\sup_{u \in \mathbb{R}} [u t - f(u)] 就是f^*(t) 的定义:

f^*(t) = \sup_{u \in \mathbb{R}} \big[ u t - f(u) \big]

因此可以得到:

g^*(t) = f^*(t) + x_0 t

证毕

(c) 纵向平移和伸缩 (Vertical ShiftDilatation):

\alpha \in \mathbb{R} \beta > 0 ,定义新的函数g(x)

g(x) = \alpha + \beta f(x)

对应的勒让德变换为:

g^*(t) = \beta f^*\left(\frac{t}{\beta}\right) - \alpha

纵向伸缩 \beta 会缩放勒让德变换的自变量t ,并乘以 \beta。纵向平移 \alpha 直接导致勒让德共轭函数的值减去 \alpha

证明

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - g(x) \big]

其中:

g(x) = \alpha + \beta f(x)

因此:

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - (\alpha + \beta f(x)) \big] = \sup_{x \in \mathbb{R}} \big[ x t - \beta f(x) - \alpha \big]

由于 \alphax 无关:

g^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - \beta f(x) \big] - \alpha

\sup 里面表达式 乘 \beta \beta,可得:

g^*(t) = \beta \sup_{x \in \mathbb{R}} \left[ \frac{t}{\beta} x - f(x) \right] - \alpha

我们注意到\sup_{x \in \mathbb{R}} \bigl[ \frac{t}{\beta} x - f(x) \bigr] 就是 f^*\Bigl( \tfrac{t}{\beta} \Bigr)的定义,即:

f^*\left( \frac{t}{\beta} \right) = \sup_{x \in \mathbb{R}} \left[ \frac{t}{\beta} x - f(x) \right]

得到:

g^*(t) = \beta f^*\left( \frac{t}{\beta} \right) - \alpha

证毕

(d) 双重共轭恢复原函数

勒让德变换的一个关键性质,即双重共轭恢复原函数

f^{**}(x) = f(x)

证明

双重共轭函数定义为:

f^{**}(t) = \sup_{x \in \mathbb{R}} \big[ x t - f^*(x) \big]

定义辅助函数h_t(x)

h_t(x) = x t - f^*(x)

h_t(x) 求导,计算h_t^{\prime}(x)

h_t^{\prime}(x) = t - f^{*\prime}(x)

根据勒让德变换的性质:

f^{*\prime}(x) = \chi(x) = f^{\prime-1}(x)

因此:

h_t^{\prime}(x) = t - \chi(x)

令导数h_t^{\prime}(x) = 0 ,得:

t - \chi(\bar{x}) = 0 \quad \implies \quad \bar{x} = \chi(t)

将极值点代入

\bar{x} = \chi(t) 代入h_t(x)

f^{**}(t) = h_t(\bar{x}) = \bar{x} t - f^*(\bar{x})
f^{**}(t) = \chi(t) t - f^*(\bar{x})

根据勒让德变换的定义f^*(\bar{x}) = \bar{x} \chi(t) - f[\chi(t)] ,可以展开为:

f^{**}(t) = \chi(t) t - \big[\chi(t) t - f[\chi(t)]\big]

化简得到:

f^{**}(t) = f[\chi(t)]

由于\chi(t) = f^{\prime-1}(t) ,因此:

f[\chi(t)] = f(f^{\prime-1}(t))

因此:

f^{**}(t) = f(t)

证毕

双重共轭性质表明,严格凸且下半连续的函数在进行两次勒让德变换后会恢复原函数。这一性质保证了勒让德变换的对偶性,因此在在优化问题中构造对偶关系来解决问题。

%% 双重共轭验证 f^{**}(x) = f(x)
x_test = linspace(1,2,200);
f_dd_star = zeros(size(x_test));
for i = 1:length(x_test)
    x_val = x_test(i);
    h_xt = @(tau) x_val*tau  f_star_analytic(tau);
    neg_h_xt = @(tau) h_xt(tau);
    [~, h_min_val] = fminbnd(neg_h_xt, 10, 10);
    f_dd_star(i) = h_min_val;
end
​
figure; 
plot(x_test, f(x_test), 'b', 'LineWidth',2); hold on;
plot(x_test, f_dd_star, 'r','LineWidth',2);
xlabel('x','Interpreter','none'); 
ylabel('Function value','Interpreter','none');
legend({'f(x)','f**(x)'},'Interpreter','none','Location','best');
title('Double conjugate check: f**(x) vs f(x)','Interpreter','none');

举例

下面我们以一个二次函数为例,详细计算推导它的勒让德变换(Legendre Transform, LT)

f(x) = \alpha + \frac{1}{2} \beta (x - x_0)^2

其中:

  • \alpha \in \mathbb{R} 是一个常数,表示垂直偏移;

  • \beta > 0 是参数,控制二次项的系数;

  • x_0 是偏移中心。

目标是找到其勒让德变换:

f^*(t) = \sup_{x \in \mathbb{R}} \big[ x t - f(x) \big]

推导过程

我们先看里面x t - f(x) 这一项,因此定义辅助函数:

g_t(x) = x t - f(x)

f(x) 代入得到:

g_t(x) = x t - \bigl(\alpha + \tfrac{\beta}{2}(x - x_0)^2 \bigr)

展开:

g_t(x) = x t - \alpha - \tfrac{\beta}{2}(x - x_0)^2

所以,原式等于:

f^*(t) = \sup_{x \in \mathbb{R}} \big[x t - \alpha - \tfrac{\beta}{2}(x - x_0)^2 \big]

我们希望在此基础上更进一步,也就是拿掉\sup 符号。为了完成这一点,需要找到内层函数g_t(x) 的极大值。

g_t(x) 求导数并找到极值点

计算g_t^{\prime}(x) 的一阶导数:

g_t^{\prime}(x) = t - \beta (x - x_0)

g_t^{\prime}(x) = 0 解出极值点:

t - \beta (\bar{x} - x_0) = 0 \quad \implies \quad \bar{x} = x_0 + \frac{t}{\beta}

计算g_t(x) 的二阶导数:

g_t^{\prime\prime}(x) = -\beta

由于 \beta > 0,说明g_t(x) 是一个严格 concave 函数,因此在\bar{x} 处确实取得最大值。

将极值点代回g_t(x)

\bar{x} = x_0 + \tfrac{t}{\beta} 代入g_t(x)

f^*(t) = g_t(\bar{x}) = \bar{x} \, t - f(\bar{x})

具体代入:

f^*(t) = \Bigl(x_0 + \frac{t}{\beta} \Bigr) t - \Bigl(\alpha + \frac{\beta}{2} \Bigl(x_0 + \frac{t}{\beta} - x_0 \Bigr)^2 \Bigr)

展开化简:

f^*(t) = x_0 t + \frac{t^2}{\beta} - \alpha - \frac{\beta}{2} \cdot \frac{t^2}{\beta^2}

进一步整理:

f^*(t) = x_0 t + \frac{t^2}{2\beta} - \alpha

最终结果:

f^*(t) = \frac{1}{2\beta} t^2 + t x_0 - \alpha

具体过程是:

1. 定义辅助函数g_t(x) = x t - f(x)

2. 求导数g_t^{\prime}(x) = t - f^{\prime}(x)

3. 找到零点\bar{x} = \chi(t)

4. 代回g_t(\bar{x}) 得到f^*(t)

求导

勒让德变换通用表达式为:

f^*(t) = t \,\chi(t) - f[\chi(t)]

其中:\chi(t)f^{\prime}(x) 的反函数,即\chi(t) = (f^{\prime})^{-1}(t)

一阶导数

为了求f^*(t) 的一阶导数,对f^*(t) 进行求导:

f^{*\prime}(t) = \frac{\partial}{\partial t} \big( t \,\chi(t) - f[\chi(t)] \big)

利用链式法则,得到:

f^{*\prime}(t) = \chi(t) + t \,\chi^{\prime}(t) - \chi^{\prime}(t) \,f^{\prime}[\chi(t)]

由于\chi(t) = f^{\prime-1}(t),并且f^{\prime}[\chi(t)] = t,代入后有:

f^{*\prime}(t) = \chi(t)

因此,一阶导数结果为:

f^{*\prime}(t) = \chi(t) = f^{\prime-1}(t)

勒让德变换的二阶导数

f^{*\prime}(t) = \chi(t) 再求导:

f^{*\prime\prime}(t) = \chi^{\prime}(t)

由于\chi(t) = f^{\prime-1}(t),求导得到:

\chi^{\prime}(t) = \frac{1}{f^{\prime\prime}[\chi(t)]}

因此,勒让德变换的二阶导数为:

f^{*\prime\prime}(t) = \frac{1}{f^{\prime\prime}[\chi(t)]}

由于f^{\prime\prime}(x) > 0f(x) 是严格凸函数),所以f^{*\prime\prime}(t) > 0,从而证明f^*(t) 始终是凸函数。

clear; close all; clc;
​
%% 参数设置 (用于勒让德变换及半二次分解示例)
alpha = 1.0;  % f(x)的垂直偏移
beta = 2.0;   % f(x)中二次项系数 > 0
x0 = 0.5;     % f(x)中心偏移
​
% 定义原函数 f(x)
f = @(x) alpha + (beta/2)*(x  x0).^2;
​
% 理论勒让德共轭 f*(t)
f_star_analytic = @(t) (t.^2)/(2*beta) + t*x0  alpha;
​
% 定义 t 和 x 的取值范围用于数值求解
t_vals = linspace(5,5,200);
x_vals = linspace(5,5,200);
​
%% 数值求勒让德变换 f*(t)
f_star_numeric = zeros(size(t_vals));
for i = 1:length(t_vals)
    t = t_vals(i);
    g_t = @(x) x*t  f(x);
    neg_g_t = @(x) g_t(x);
    [~, fval_neg] = fminbnd(neg_g_t, min(x_vals), max(x_vals));
    f_star_numeric(i) = fval_neg;
end
%% 对比数值结果和解析解
figure; 
plot(t_vals, f_star_numeric, 'r', 'LineWidth',2); hold on;
plot(t_vals, f_star_analytic(t_vals), 'b', 'LineWidth',2);
xlabel('t','Interpreter','none'); 
ylabel('f*(t)','Interpreter','none');
legend({'Numerical f*(t)','Analytical f*(t)'},'Interpreter','none','Location','best');
title('Legendre transform: numerical vs analytical','Interpreter','none');
​

半二次优化方法

理论

原始准则(Criterion)

定义的优化目标函数\mathcal{J}(x) 为:

\mathcal{J}(x) = \| \mathbf{y} - \mathbf{H} \mathbf{x} \|^2 + \mu \sum_{p \sim q} \varphi(x_p - x_q)

第一项\| \mathbf{y} - \mathbf{H} \mathbf{x} \|^2 是数据拟合项,用来度量\mathbf{x} 和观测数据\mathbf{y} 之间的误差。

第二项\mu \sum_{p \sim q} \varphi(x_p - x_q) 是正则化项,用于惩罚相邻变量(如图像像素邻点)间的差异。

半二次优化的核心

核心是将非二次函数\varphi(\delta) 转化为带有辅助变量a 的二次形式。因此,我们为每个x_p - x_q 引入辅助变量a_{pq} ,使得:

\varphi(\delta) = \inf_a \left[ \frac{1}{2} (\delta - a)^2 + \zeta(a) \right]

其中, \zeta(a) 是一个自定义构造的函数。这种引入将非二次函数\varphi(\delta) 分解为关于变量a 的优化问题。

引入辅助变量后的扩展准则

原始准则扩展为:

\widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a}) = \| \mathbf{y} - \mathbf{H} \mathbf{x} \|^2 + \mu \sum_{p \sim q} \left[ \frac{1}{2} ( (x_p - x_q) - a_{pq} )^2 + \zeta(a_{pq}) \right]

新准则\widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a}) 现在是关于\mathbf{x} 和辅助变量\mathbf{a} 的联合优化问题。

原始准则与扩展准则的关系

\mathcal{J}(\mathbf{x}) = \inf_{\mathbf{a}} \widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a})

这说明通过优化\widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a}) 的辅助变量\mathbf{a} ,可以间接得到原始问题的解。

为什么引入辅助变量?

这里一定有一个疑问:为什么一定要引入一个辅助变量呢?直接对原式进行运算不好吗?问题就在非二次函数\varphi(\delta) 上面。非二次的优化问题可能要处理复杂的非线性和非凸问题,很难求解。通过引入一个辅助变量,将非二次函数\varphi(\delta) 分解为二次形式和一个新的函数\zeta(a) ,这样就好优化多了。多引入一个变量a 也不要紧,可以分离\mathbf{x}\mathbf{a} ,固定一个,优化另一个,并且优化交替进行,通过迭代逐步收敛到全局最优解。

实现

%% 半二次分解示例 (Huber函数)
% 设置Huber函数阈值参数 s
s = 0.5; 
varphi = @(delta) (abs(delta)<=s).* (delta.^2/2) + (abs(delta)>s).*(s*abs(delta)-s^2/2);
​
% g(delta) = (delta^2)/2 - varphi(delta)
g = @(delta) (delta.^2)/2 - varphi(delta);
​
% 数值上计算g*(a)
a_vals = linspace(-3,3,200);
g_star_vals = zeros(size(a_vals));
for i=1:length(a_vals)
    a_ = a_vals(i);
    h_a_delta = @(delta) g(delta)-a_*delta; 
    [~,h_min_val] = fminbnd(h_a_delta, -5,5);
    g_star_vals(i) = -h_min_val; 
end
​
% 定义zeta(a)=g*(a)-a^2/2
zeta = @(a) interp1(a_vals,g_star_vals,a,'linear','extrap') - a.^2/2;
​
% 检验半二次分解 varphi(delta)=inf_a[(delta - a)^2/2 + zeta(a)]
delta_test = linspace(-3,3,100);
varphi_recons = zeros(size(delta_test));
for i=1:length(delta_test)
    delta_ = delta_test(i);
    Phi = @(a) ((delta_-a).^2)/2 + zeta(a);
    [~,Phi_min] = fminbnd(Phi,-5,5);
    varphi_recons(i) = Phi_min;
end
​
figure;
plot(delta_test,varphi(delta_test),'b','LineWidth',2); hold on;
plot(delta_test,varphi_recons,'r--','LineWidth',2);
xlabel('delta','Interpreter','none'); 
ylabel('varphi(delta)','Interpreter','none');
legend({'varphi(delta)','Half-quadratic decomposition'},'Interpreter','none','Location','best');
title('Half-quadratic decomposition check','Interpreter','none');
​
disp('Legendre transform and half-quadratic decomposition demonstrations completed.');

在半二次优化中引入勒让德变换

我们刚刚的思路非常美好,现在只需要分开优化就好了,但是现在我们有两个前置问题

  • \varphi(\delta) = \inf_a \left[ \frac{1}{2} (\delta - a)^2 + \zeta(a) \right] 怎么构建的?

  • \zeta(a) 怎么构建?

我们现在推导证明:

\varphi(\delta) = \inf_a \left[ \frac{1}{2} (\delta - a)^2 + \zeta(a) \right]

证明

引入一个新的辅助函数g(\delta) ,定义为:

g(\delta) = \frac{\delta^2}{2} - \varphi(\delta)

这里g(\delta) 被设计为一个严格凸函数(二次项\frac{\delta^2}{2} 保证了凸性)。

我们对g(\delta) 应用勒让德变换g^*(a)

g^*(a) = \sup_{\delta \in \mathbb{R}} \big[ a \delta - g(\delta) \big]

代入g(\delta) = \frac{\delta^2}{2} - \varphi(\delta) ,勒让德变换展开为:

g^*(a) = \sup_{\delta \in \mathbb{R}} \left[ a \delta - \frac{\delta^2}{2} + \varphi(\delta) \right]

将辅助函数\zeta(a) 定义为:

\zeta(a) = g^*(a) - \frac{a^2}{2}

代入g^*(a) 的表达式,得:

\zeta(a) = \sup_{\delta \in \mathbb{R}} \left[ \varphi(\delta) - \frac{ (\delta - a)^2 }{2} \right]

这表明\zeta(a) 是由\varphi(\delta) 和二次项\frac{ (\delta - a)^2 }{2} 的优化分解所定义的。

利用双重勒让德变换的性质g = g^{**} 的性质,我们可以写出

g(\delta) = g^{**}(\delta)
g(\delta) = \sup_{a} \big[ a \delta - g^*(a) \big]

结合g(\delta) = \frac{\delta^2}{2} - \varphi(\delta) ,可以进一步推导出:

\frac{\delta^2}{2} - \varphi(\delta) = \sup_{a} \big[ a \delta - g^*(a) \big]

由上述方程,可以得到:

\varphi(\delta) = \frac{\delta^2}{2} - \sup_{a} \big[ a \delta - g^*(a) \big]

进一步等价为:

\varphi(\delta) = \frac{\delta^2}{2} + \inf_{a} \big[ g^*(a) - a \delta \big]

g^*(a) 的定义代入:

\varphi(\delta) = \frac{\delta^2}{2} + \inf_{a} \left[ \zeta(a) + \frac{a^2}{2} - a \delta \right]

重新整理:

\varphi(\delta) = \inf_{a} \left[ \frac{ (\delta - a)^2 }{2} + \zeta(a) \right]

这就得到了半二次分解的基本形式。

证毕

为了进一步分析辅助变量a,考虑优化问题:

\inf_{a} \left[ \frac{ (\delta - a)^2 }{2} + \zeta(a) \right]

对优化准则求导:

\frac{\partial}{\partial a} \left[ \frac{ (\delta - a)^2 }{2} + \zeta(a) \right] = (a - \delta) + \zeta^{\prime}(a) = 0

解出最优a = \bar{a}

\bar{a} = \delta - \zeta^{\prime}(a)

结合\zeta^{\prime}(a) = g^{\prime}(a) ,可以进一步得到:

\bar{a} = g^{*\prime -1} (\delta)

或简化为:

\bar{a} = g^{\prime}(\delta) = \delta - \varphi^{\prime}(\delta)

通过上述推导,我们得到:

1. 半二次分解的标准形式:

\varphi(\delta) = \inf_{a} \left[ \frac{ (\delta - a)^2 }{2} + \zeta(a) \right]

其中\zeta(a) = g^*(a) - \frac{a^2}{2} 是辅助函数。

2. 最优辅助变量的表达式:

\bar{a} = \delta - \varphi^{\prime}(\delta)

这个理论保证了对于任何给定的\varphi(\delta),我们都能通过构造辅助变量a 来优化原始函数。

总结

原始优化问题的目标函数为:

\mathcal{J}(x) = \| \mathbf{y} - \mathbf{H} \mathbf{x} \|^2 + \mu \sum_{p \sim q} \varphi(x_p - x_q)

为了解决非二次项\varphi(x_p - x_q) ,引入辅助变量a_{pq} ,将原始准则扩展为:

\widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a}) = \| \mathbf{y} - \mathbf{H} \mathbf{x} \|^2 + \mu \sum_{p \sim q} \left[ \frac{1}{2} \big( (x_p - x_q) - a_{pq} \big)^2 + \zeta(a_{pq}) \right]
  • a_{pq} 是辅助变量,用于解耦x_px_q\zeta(a_{pq}) 是通过勒让德变换定义的辅助函数。

算法策略:交替优化

  • \mathbf{x} 固定\mathbf{a} 进行优化
    在固定\mathbf{a} 的情况下,优化目标函数变为关于\mathbf{x} 的二次问题:

    \widetilde{\mathbf{x}}(\mathbf{a}) = \arg\min_{\mathbf{x}} \widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a})

    这是一个标准的二次优化问题,可以通过解析解(如线性代数方法)或数值方法高效求解。

  • \mathbf{a} 固定\mathbf{x} 进行优化
    在固定\mathbf{x} 的情况下,优化目标函数变为关于\mathbf{a} 的问题:

    \widetilde{\mathbf{a}}(\mathbf{x}) = \arg\min_{\mathbf{a}} \widetilde{\mathcal{J}}(\mathbf{x}, \mathbf{a})

    这个优化问题也可以通过显式公式解出,因为\zeta(a) 是预定义的。

通过在这两个步骤之间交替迭代,逐步接近全局最优解。

  • 变量的相互作用:
    原始问题中的变量x_px_q 存在耦合关系(通过\varphi(x_p - x_q)), 扩展准则通过引入a_{pq} ,解耦了变量\mathbf{x}\mathbf{a} ,从而简化了优化问题。

  • 优化问题的本质:
    原始问题是非二次的,且变量相互作用,扩展后,尽管存在交互,但问题本质上是二次的,因此容易求解。

%% 半二次优化示例
% 注意:我们已定义 s 和 varphi,上述 s=0.5 也适用于此
% 新增phi_prime定义(在之前未定义,需新增)
phi_prime = @(delta) (abs(delta)<=s).*delta + (abs(delta)>s).*s.*sign(delta);
​
% 以下半二次优化1D信号示例
​
% 参数设置(对于优化问题)
N = 100;            % 信号长度
mu = 1;           % 正则化参数
maxIter = 50;       % 最大迭代次数
​
% 生成观测数据 y (用 x_true 加噪声)
x_true = sin(linspace(0,2*pi,N))'; % 真值
noise = 0.1 * randn(N,1); 
y = x_true + noise; 
​
% 定义算子H为单位映射,这里H = I
H = eye(N);
​
% 定义初始值
x = y;              % 初始解
a = zeros(N-1,1);   % 辅助变量
​
% 构造差分矩阵 R (N-1 x N)
R = spdiags([ones(N-1,1), -ones(N-1,1)], [0,1], N-1, N);
​
% 系数矩阵A_x = 2I + mu R'R
A_x = 2*speye(N) + mu*(R'*R);
​
% 迭代求解
for iter = 1:maxIter
    % Step 1: 固定 a 更新 x
    rhs = 2*y + mu*R'*a;
    x = A_x\rhs; 
    
    % Step 2: 固定 x 更新 a
    delta = R*x; 
    a = delta - phi_prime(delta);
    
    % 显示进度(每10次迭代显示一次)
    if mod(iter,10)==0
        phi_val = zeros(N-1,1);
        for k=1:(N-1)
            d = delta(k);
            if abs(d)<=s
                phi_val(k) = d^2/2;
            else
                phi_val(k) = s*abs(d)-s^2/2;
            end
        end
        J_val = norm(y - x)^2 + mu*sum(phi_val);
        fprintf('Iter %d, J = %f\n', iter, J_val);
    end
end
​
% 结果展示
figure; 
plot(x_true, 'k-', 'LineWidth',2); hold on;
plot(y, 'b:', 'LineWidth',1); 
plot(x, 'r--', 'LineWidth',2);
legend('True x','Noisy y','Reconstructed x','Interpreter','none');
xlabel('Index','Interpreter','none');
ylabel('Amplitude','Interpreter','none');
title('Half-Quadratic Optimization with Huber Regularization','Interpreter','none');
grid on;