凸优化基础
文章目录
- 目录
- **第1讲:凸优化基础**
- **第2讲:凸优化建模**
- **第3讲:对偶理论**
- **第4讲:梯度下降法**
- **第5讲:牛顿法与内点法**
- **第6讲:次梯度与近端方法**
- **第7讲:分布式凸优化**
- **第8讲:鲁棒优化**
- **第9讲:凸优化在AI中的应用**
- **第10讲:前沿与总结**
- **第1讲:凸优化基础**
- **理论部分**
- **1. 凸集的定义**
- **2. 凸函数的定义**
- **3. 凸优化问题的标准形式**
- **4. 全局最优性**
- **案例部分**
- **线性回归的凸性证明**
- **代码部分**
- **使用MATLAB `fmincon` 验证凸函数最小值**
- 实例
目录
第1讲:凸优化基础
- 理论:凸集/凸函数定义、凸优化问题标准形式、全局最优性。
- 案例:线性回归的凸性证明。
- 代码:MATLAB
fmincon
验证凸函数最小值。
第2讲:凸优化建模
- 理论:常见凸问题类(LP、QP、SOCP、SDP)、建模技巧(松弛法)。
- 案例:投资组合优化(QP)、机器学习损失函数凸性分析。
- 代码:Python
CVXPY
建模投资组合问题。
第3讲:对偶理论
- 理论:拉格朗日对偶、强弱对偶性、KKT条件。
- 案例:支持向量机(SVM)对偶问题推导。
- 代码:MATLAB 求解对偶间隙。
第4讲:梯度下降法
- 理论:收敛性分析、步长选择(精确/回溯线搜索)。
- 案例:逻辑回归参数优化。
- 代码:Python 实现梯度下降(NumPy)。
第5讲:牛顿法与内点法
- 理论:牛顿方向、障碍函数、路径跟踪算法。
- 案例:不等式约束优化(如路径规划)。
- 代码:MATLAB
quadprog
实现内点法。
第6讲:次梯度与近端方法
- 理论:次梯度定义、近端算子、Lasso回归。
- 案例:稀疏信号恢复(压缩感知)。
- 代码:Python
scikit-learn
对比次梯度与近端梯度下降。
第7讲:分布式凸优化
- 理论:ADMM算法、一致性优化。
- 案例:多智能体协同控制。
- 代码:MATLAB 并行计算工具箱实现ADMM。
第8讲:鲁棒优化
- 理论:不确定集建模、鲁棒对偶。
- 案例:电力系统调度中的不确定性处理。
- 代码:Python
ROME
工具箱示例。
第9讲:凸优化在AI中的应用
- 理论:深度学习中的凸松弛(如低秩矩阵补全)。
- 案例:神经网络训练中的凸代理损失。
- 代码:PyTorch 自定义凸损失函数。
第10讲:前沿与总结
- 理论:非凸优化中的凸启发式方法(如凸包络)。
- 案例:学员自选课题报告(如医学图像重建)。
- 代码:综合项目答辩(MATLAB/Python实现)。
第1讲:凸优化基础
理论部分
1. 凸集的定义
凸集是凸优化理论的基石,用于定义问题的可行域。
-
定义:
一个集合 C ⊆ R n C \subseteq \mathbb{R}^n C⊆Rn 被称为凸集,如果对于任意两点 x , y ∈ C x, y \in C x,y∈C 和任意 λ ∈ [ 0 , 1 ] \lambda \in [0, 1] λ∈[0,1],都有:
λ x + ( 1 − λ ) y ∈ C λ x + ( 1 − λ ) y ∈ C λx+(1−λ)y∈C\lambda x + (1 - \lambda) y \in C λx+(1−λ)y∈Cλx+(1−λ)y∈C
这意味着连接 x x x 和 y y y 的线段完全包含在 C C C 内。 -
直观理解:
凸集没有“凹陷”或“空洞”,形状类似于圆盘、矩形等。例如,想象一个橡皮泥球,无论如何拉伸,只要不撕裂,它仍是凸的。 -
例子:
- 空集 ∅ \emptyset ∅ 和单点集 { x } \{x\} {x} 是凸集。
- 整个实数空间 R n \mathbb{R}^n Rn 是凸集。
- 闭球: { x ∈ R n ∣ ∥ x ∥ ≤ r } \{ x \in \mathbb{R}^n \mid \|x\| \leq r \} {x∈Rn∣∥x∥≤r}。
- 半空间: { x ∈ R n ∣ a T x ≤ b } \{ x \in \mathbb{R}^n \mid a^T x \leq b \} {x∈Rn∣aTx≤b},其中 a ∈ R n a \in \mathbb{R}^n a∈Rn, b ∈ R b \in \mathbb{R} b∈R。
- 凸多边形(二维)或凸多面体(三维)。
-
反例:
- 环形区域: { x ∈ R 2 ∣ 1 ≤ ∥ x ∥ ≤ 2 } \{ x \in \mathbb{R}^2 \mid 1 \leq \|x\| \leq 2 \} {x∈R2∣1≤∥x∥≤2}(两点间的线段会穿过空心部分)。
- 星形区域:如五角星,某些点之间的线段超出集合。
2. 凸函数的定义
凸函数决定了优化问题的“形状”,是理解凸优化的核心。
-
定义:
函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R 是凸函数,如果对于任意 x , y ∈ R n x, y \in \mathbb{R}^n x,y∈Rn 和 λ ∈ [ 0 , 1 ] \lambda \in [0, 1] λ∈[0,1],满足:
f ( λ x + ( 1 − λ ) y ) ≤ λ f ( x ) + ( 1 − λ ) f ( y ) f ( λ x + ( 1 − λ ) y ) ≤ λ f ( x ) + ( 1 − λ ) f ( y ) f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)f(\lambda x + (1 - \lambda) y) \leq \lambda f(x) + (1 - \lambda) f(y) f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)
这表示函数图像在任意两点之间的弦位于曲线上方。 -
直观理解:
凸函数形似“碗底向上”,在一维情况下,其图像不会出现多个“低谷”。例如,抛物线 f ( x ) = x 2 f(x) = x^2 f(x)=x2 是凸的,而 f ( x ) = x 3 f(x) = x^3 f(x)=x3 不是。 -
性质:
- 局部最小即全局最小:若 x ∗ x^* x∗ 是局部最小点,则 f ( x ∗ ) ≤ f ( x ) f(x^*) \leq f(x) f(x∗)≤f(x) 对所有 x x x 成立。
- 梯度条件(若可微): f ( y ) ≥ f ( x ) + ∇ f ( x ) T ( y − x ) f(y) \geq f(x) + \nabla f(x)^T (y - x) f(y)≥f(x)+∇f(x)T(y−x)。
- Hessian条件(若二次可微):Hessian矩阵 ∇ 2 f ( x ) \nabla^2 f(x) ∇2f(x) 在所有 x x x 处半正定。
-
例子:
- 线性函数: f ( x ) = a T x + b f(x) = a^T x + b f(x)=aTx+b(既凸又凹)。
- 二次函数: f ( x ) = 1 2 x T Q x + c T x + d f(x) = \frac{1}{2} x^T Q x + c^T x + d f(x)=21xTQx+cTx+d, Q Q Q 半正定。
- 指数函数: f ( x ) = e x f(x) = e^x f(x)=ex。
- 范数: f ( x ) = ∥ x ∥ p f(x) = \|x\|_p f(x)=∥x∥p(如 p = 1 , 2 p = 1, 2 p=1,2)。
3. 凸优化问题的标准形式
凸优化问题具有统一的数学表达,确保其可解性和唯一性。
-
标准形式:
minimize f ( x ) subject to g i ( x ) ≤ 0 , i = 1 , … , m h j ( x ) = 0 , j = 1 , … , p \begin{array}{ll} \text{minimize} & f(x) \\ \text{subject to} & g_i(x) \leq 0, \quad i = 1, \ldots, m \\ & h_j(x) = 0, \quad j = 1, \ldots, p \end{array} minimizesubject tof(x)gi(x)≤0,i=1,…,mhj(x)=0,j=1,…,p
其中:- f f f:凸函数(目标函数)。
- g i g_i gi:凸函数(不等式约束)。
- h j h_j hj:仿射函数(如 h j ( x ) = a j T x − b j h_j(x) = a_j^T x - b_j hj(x)=ajTx−bj)。
-
组成部分:
- 目标函数 f ( x ) f(x) f(x):需最小化,凸性保证单一全局解。
- 不等式约束 g i ( x ) ≤ 0 g_i(x) \leq 0 gi(x)≤0:定义凸的可行域。
- 等式约束 h j ( x ) = 0 h_j(x) = 0 hj(x)=0:保持凸性(仿射约束不会破坏凸集)。
-
意义:
标准形式将复杂的实际问题转化为数学模型,便于理论分析和算法设计。
4. 全局最优性
凸优化问题的独特优势在于局部最优解即全局最优解。
-
性质:
在凸优化问题中,任何局部最优解都是全局最优解。 -
证明概要:
假设 x ∗ x^* x∗ 是局部最优解,即存在邻域 ∥ x − x ∗ ∥ < ϵ \|x - x^*\| < \epsilon ∥x−x∗∥<ϵ 内 f ( x ) ≥ f ( x ∗ ) f(x) \geq f(x^*) f(x)≥f(x∗)。对于任意可行点 y y y,取 z = λ y + ( 1 − λ ) x ∗ z = \lambda y + (1 - \lambda) x^* z=λy+(1−λ)x∗( 0 < λ < 1 0 < \lambda < 1 0<λ<1),由于可行域凸, z z z 可行;由于 f f f 凸,
f ( z ) ≤ λ f ( y ) + ( 1 − λ ) f ( x ∗ ) f ( z ) ≤ λ f ( y ) + ( 1 − λ ) f ( x ∗ ) f(z)≤λf(y)+(1−λ)f(x∗)f(z) \leq \lambda f(y) + (1 - \lambda) f(x^*) f(z)≤λf(y)+(1−λ)f(x∗)f(z)≤λf(y)+(1−λ)f(x∗)
当 λ \lambda λ 足够小, z z z 在邻域内,故 f ( z ) ≥ f ( x ∗ ) f(z) \geq f(x^*) f(z)≥f(x∗)。结合上式, f ( y ) ≥ f ( x ∗ ) f(y) \geq f(x^*) f(y)≥f(x∗),即 x ∗ x^* x∗ 为全局最优。 -
应用:
这一性质允许使用简单算法(如梯度下降)高效求解,而无需担心陷入局部极值。
案例部分
线性回归的凸性证明
线性回归是凸优化的经典应用,广泛用于数据拟合。
-
问题描述:
给定数据集 { ( x i , y i ) } i = 1 N \{ (x_i, y_i) \}_{i=1}^N {(xi,yi)}i=1N( x i ∈ R d x_i \in \mathbb{R}^d xi∈Rd, y i ∈ R y_i \in \mathbb{R} yi∈R),求解 w ∈ R d w \in \mathbb{R}^d w∈Rd 和 b ∈ R b \in \mathbb{R} b∈R,使平方损失最小:
L ( w , b ) = ∑ i = 1 N ( y i − w T x i − b ) 2 L ( w , b ) = ∑ i = 1 N ( y i − w T x i − b ) 2 L(w,b)=∑i=1N(yi−wTxi−b)2L(w, b) = \sum_{i=1}^N (y_i - w^T x_i - b)^2 L(w,b)=∑i=1N(yi−wTxi−b)2L(w,b)=i=1∑N(yi−wTxi−b)2 -
优化形式:
min w , b L ( w , b ) \min_{w, b} \quad L(w, b) w,bminL(w,b)
无约束优化问题。 -
凸性证明:
-
定义 θ = [ w ; b ] ∈ R d + 1 \theta = [w; b] \in \mathbb{R}^{d+1} θ=[w;b]∈Rd+1,扩展 x ~ i = [ x i ; 1 ] \tilde{x}_i = [x_i; 1] x~i=[xi;1],则:
L ( θ ) = ∑ i = 1 N ( y i − θ T x i ) 2 L ( θ ) = ∑ i = 1 N ( y i − θ T x ~ i ) 2 L(θ)=∑i=1N(yi−θTx~i)2L(\theta) = \sum_{i=1}^N (y_i - \theta^T \tilde{x}_i)^2 L(θ)=∑i=1N(yi−θTx i)2L(θ)=i=1∑N(yi−θTx~i)2 -
L ( θ ) L(\theta) L(θ) 是二次函数,其Hessian为:
H = ∇ 2 L ( θ ) = 2 ∑ i = 1 N x i x i T H = ∇ 2 L ( θ ) = 2 ∑ i = 1 N x ~ i x ~ i T H=∇2L(θ)=2∑i=1Nx~ix~iTH = \nabla^2 L(\theta) = 2 \sum_{i=1}^N \tilde{x}_i \tilde{x}_i^T H=∇2L(θ)=2∑i=1Nx ix iTH=∇2L(θ)=2i=1∑Nx~ix~iT -
验证半正定性:对于任意 z ∈ R d + 1 z \in \mathbb{R}^{d+1} z∈Rd+1,
$$- zTHz=2∑i=1N(zTx~i)2≥0z^T H z = 2 \sum_{i=1}^N (z^T \tilde{x}_i)^2 \geq 0
$$
若 ∑ x ~ i x ~ i T \sum \tilde{x}_i \tilde{x}_i^T ∑x~ix~iT 满秩(如数据点线性无关), H H H 正定, L L L 强凸。
-
-
结论:
线性回归是凸优化问题,其全局最优解可通过解析法(正规方程)或迭代法(梯度下降)求得。
代码部分
使用MATLAB fmincon
验证凸函数最小值
通过编程实践验证凸优化的全局最优性。
- 问题:
求解 minimize f ( x ) = x 2 + 2 x + 1 \text{minimize} \ f(x) = x^2 + 2x + 1 minimize f(x)=x2+2x+1,理论最优解 x = − 1 x = -1 x=−1, f ( − 1 ) = 0 f(-1) = 0 f(−1)=0。 - 代码:
% 设置初始点 x0 = 0;% 使用fmincon求解无约束优化问题 options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp'); [x_opt, fval] = fmincon(fun, x0, [], [], [], [], [], [], [], options);% 输出结果 fprintf('最优解: x = %.4f, 函数值 f(x) = %.4f\n', x_opt, fval);% 可视化验证 x_range = linspace(-3, 1, 100); f_values = arrayfun(fun, x_range); figure; plot(x_range, f_values, 'b-', 'LineWidth', 2); hold on; plot(x_opt, fval, 'ro', 'MarkerSize', 10, 'LineWidth', 2); title('凸函数 f(x) = x^2 + 2x + 1 的优化'); xlabel('x'); ylabel('f(x)'); grid on; legend('f(x)', '最优解');
- 解释:
- 目标函数: f ( x ) = x 2 + 2 x + 1 = ( x + 1 ) 2 f(x) = x^2 + 2x + 1 = (x + 1)^2 f(x)=x2+2x+1=(x+1)2,凸且最小值为0。
fmincon
:MATLAB优化工具,尽管用于约束问题,此处无约束仍适用。- 选项:
'Display', 'iter'
显示迭代过程,'Algorithm', 'sqp'
使用序列二次规划法。 - 可视化:绘制函数曲线和最优解点,直观验证结果。
- 运行结果:
输出 x ≈ − 1 x \approx -1 x≈−1, f ( x ) ≈ 0 f(x) \approx 0 f(x)≈0,迭代过程显示快速收敛,验证全局最优性。
实例
实例1:稀疏信号恢复(L1正则化最小二乘)
问题描述
求解稀疏信号 x ∈ R n x \in \mathbb{R}^n x∈Rn 满足 y = A x + ϵ y = Ax + \epsilon y=Ax+ϵ,其中 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n( m ≪ n m \ll n m≪n), ϵ \epsilon ϵ 为噪声。目标是最小化:
min x 1 2 ∥ A x − y ∥ 2 2 + λ ∥ x ∥ 1 \min_x \frac{1}{2} \|Ax - y\|_2^2 + \lambda \|x\|_1 minx21∥Ax−y∥22+λ∥x∥1
(L1正则项促进稀疏性)
- 非光滑L1项需用近端梯度法或ADMM求解。
- 需平衡拟合误差与稀疏性(选择 λ \lambda λ)。
MATLAB代码
% 生成稀疏信号
n = 100; m = 30; k = 5; % k-稀疏信号
A = randn(m, n);
x_true = zeros(n, 1); x_true(randperm(n, k)) = randn(k, 1);
y = A * x_true + 0.1 * randn(m, 1);% 使用CVX求解Lasso问题
cvx_beginvariable x(n)minimize( 0.5 * sum_square(A * x - y) + 0.5 * norm(x, 1) ) % lambda=0.5
cvx_end% 可视化
figure;
subplot(2,1,1); stem(x_true, 'b'); title('真实稀疏信号');
subplot(2,1,2); stem(x, 'r'); title('Lasso恢复信号');
实例2:鲁棒投资组合优化(半定规划)
问题描述
在资产收益率不确定下,最小化投资风险:
min w max Σ ∈ U w T Σ w s.t. ∑ w i = 1 , w ≥ 0 \min_w \max_{\Sigma \in \mathcal{U}} w^T \Sigma w \quad \text{s.t.} \quad \sum w_i = 1, w \geq 0 minwmaxΣ∈UwTΣws.t.∑wi=1,w≥0
其中 U = { Σ ⪰ 0 ∣ ∥ Σ − Σ 0 ∥ F ≤ ρ } \mathcal{U} = \{ \Sigma \succeq 0 \mid \|\Sigma - \Sigma_0\|_F \leq \rho \} U={Σ⪰0∣∥Σ−Σ0∥F≤ρ} 为协方差矩阵的不确定集。
MATLAB代码
% 生成数据
n = 5; Sigma0 = randn(n); Sigma0 = Sigma0' * Sigma0; % 真实协方差
rho = 0.1;% 使用YALMIP建模
w = sdpvar(n,1);
Sigma = sdpvar(n,n);
Constraints = [sum(w) == 1, w >= 0, norm(Sigma - Sigma0, 'fro') <= rho, Sigma >= 0];
Objective = max(w' * Sigma * w); % 最坏情况风险
optimize(Constraints, Objective);% 输出最优权重
disp('最优权重:'); disp(value(w));
实例3:多智能体协同控制(分布式优化)
问题描述
N N N 个智能体协同最小化全局目标:
min x 1 , … , x N ∑ i = 1 N f i ( x i ) s.t. x i = x j ( ∀ i , j ) \min_{x_1, \ldots, x_N} \sum_{i=1}^N f_i(x_i) \quad \text{s.t.} \quad x_i = x_j \ (\forall i,j) minx1,…,xN∑i=1Nfi(xi)s.t.xi=xj (∀i,j)
(每个 f i f_i fi 为局部凸函数,约束要求一致性)
- 需分布式算法(如ADMM)处理大规模问题。
- 通信拓扑影响收敛速度。
MATLAB代码
% 定义局部函数(二次函数为例)
N = 10;
f = @(x, i) (x - i)^2; % 第i个智能体的目标% ADMM实现
rho = 1; max_iter = 100;
x = zeros(N,1); z = 0; u = zeros(N,1);for k = 1:max_iter% x-update (并行求解)for i = 1:Nx(i) = (i + rho*(z - u(i))) / (1 + rho);end% z-update (全局平均)z_prev = z;z = mean(x + u);% u-updateu = u + (x - z);% 终止条件if norm(x - z) < 1e-4, break; end
enddisp('一致性状态:'); disp(x);
实例4:带障碍函数的路径规划(内点法)
问题描述
在障碍物环境中规划路径 x ( t ) ∈ R 2 x(t) \in \mathbb{R}^2 x(t)∈R2:
min x ( t ) ∫ 0 T ∥ x ˙ ( t ) ∥ 2 d t s.t. ∥ x ( t ) − o i ∥ ≥ r i ( ∀ t , i ) \min_{x(t)} \int_0^T \|\dot{x}(t)\|^2 dt \quad \text{s.t.} \quad \|x(t) - o_i\| \geq r_i \ (\forall t, i) minx(t)∫0T∥x˙(t)∥2dts.t.∥x(t)−oi∥≥ri (∀t,i)
( o i o_i oi 为障碍物中心, r i r_i ri 为半径)
-
非凸约束需用对数障碍函数近似:
ϕ ( x ) = − ∑ i l o g ( ∥ x − o i ∥ 2 − r i 2 ) ϕ ( x ) = − ∑ i log ( ∥ x − o i ∥ 2 − r i 2 ) ϕ(x)=−∑ilog(∥x−oi∥2−ri2)\phi(x) = -\sum_i \log(\|x - o_i\|^2 - r_i^2) ϕ(x)=−∑ilog(∥x−oi∥2−ri2)ϕ(x)=−i∑log(∥x−oi∥2−ri2) -
离散化后求解大规模QP。
MATLAB代码
% 障碍物设置
obstacles = [1, 1, 0.5; 2, 3, 0.7]; % [x, y, r]% 离散化路径
N = 50; t = linspace(0, 1, N)';
x = sdpvar(N,2); % 路径点% 目标函数(平滑性)
Objective = sum(sum(diff(x).^2));% 障碍约束(对数障碍)
barrier = 0;
for i = 1:size(obstacles,1)dist = sum((x - obstacles(i,1:2)).^2, 2) - obstacles(i,3)^2;barrier = barrier - sum(log(dist));
end% 求解
optimize([], Objective + 0.1 * barrier); % 权重调节
plot(value(x(:,1)), value(x(:,2)), 'r-o'); hold on;
viscircles(obstacles(:,1:2), obstacles(:,3));
实例5:鲁棒支持向量机(SOCP)
问题描述
在数据不确定下训练SVM:
min w , b ∥ w ∥ 2 s.t. y i ( w T ( x i + δ i ) + b ) ≥ 1 ( ∀ ∥ δ i ∥ ≤ ρ ) \min_{w,b} \|w\|_2 \quad \text{s.t.} \quad y_i(w^T (x_i + \delta_i) + b) \geq 1 \ (\forall \|\delta_i\| \leq \rho) minw,b∥w∥2s.t.yi(wT(xi+δi)+b)≥1 (∀∥δi∥≤ρ)
( δ i \delta_i δi 为输入扰动,鲁棒性要求对扰动不敏感)
- 鲁棒约束可转化为二阶锥约束(SOCP)。
- 需处理无穷多约束的等价形式。
MATLAB代码
% 生成线性不可分数据
X = [randn(20,2) + 1; randn(20,2) - 1];
y = [ones(20,1); -ones(20,1)];
rho = 0.1; % 扰动半径% 使用CVX建模鲁棒SVM
cvx_beginvariables w(2) bminimize( norm(w) )subject tofor i = 1:size(X,1)y(i) * (w' * X(i,:)' + b) >= 1 + rho * norm(w); % 鲁棒约束end
cvx_end% 可视化
scatter(X(:,1), X(:,2), [], y);
hold on;
f = @(x) - (w(1)*x + b)/w(2);
fplot(f, [-3,3], 'LineWidth', 2);