非凸非光滑
非光滑分析(nonsmooth analysis) 是凸分析的发展。凸分析的次微分理论使得人们能够对非光滑凸函数推广微分法来处理极值问题。非光滑分析就致力于更一般的广义微分法,来处理非光滑函数的极值问题。这方面最成功的是克拉克(Clarke,F.H.)对局部李普希茨函数提出的广义梯度理论,他在1983年出版的《最优化和非光滑分析》一书已成为这方面的经典著作。对在经典意义下不可微的映射建立的广义微分学.
Nonsmooth有时也可以简单理解为nondifferentiable(不可微)。所以也有一些叫做derivative-free的optimization方法。
对于广泛的非光滑函数,我们可以将之光滑化并近似得到一个快的多的光滑优化里的算法去求解。
次微分
非凸优化
优化理论系列:7 - 凸优化和非凸优化 - 知乎 (zhihu.com)
非凸优化是处理那些不满足凸优化条件的优化问题。这类问题以其求解的复杂性和挑战性而闻名。要理解非凸优化,首先我们需要明确什么是非凸集和非凸函数。
非凸优化问题的挑战和解决方法
非凸优化问题的主要挑战在于,它们通常不保证局部最优解是全局最优解,这使得找到全局最优解变得非常困难。此外,这类问题的求解过程可能遇到多个局部最优解、鞍点或其他复杂的局部结构。
为了应对这些挑战,研究者们开发了多种求解策略,如:
- 启发式方法:如遗传算法、模拟退火等,通过随机搜索来尝试找到接近全局最优的解。
- 分枝定界法:这是一种系统性的搜索方法,用于迭代地缩小搜寻全局最优解的范围。
- 松弛技术:通过将非凸问题转化为近似的凸问题来简化问题。
- 梯度下降的变体:如动量梯度下降、自适应学习率技术等,用于改进梯度下降在非凸环境中的表现。
非光滑函数
优化 | 非光滑优化的光滑化 - 知乎 (zhihu.com)
最简单的例子——L1范数,一维的L1范数就是绝对值函数,为了将它光滑化,可以考虑Huber函数
M估计(M-Estimator)的迭代重加权最小二乘法(IRLS)求解 - 知乎 (zhihu.com)
非线性最小二乘法(Nonlinear Least Square)很容易受到非正太分布噪声的影响,比如野值点(outlier)、柯西分布等长尾分布。为了鲁棒地估计参数/减少噪声对估计结果的影响,一般会使用鲁棒损失函数(Robust Loss Function)而不是平方函数作为损失函数。在统计学中,这种方法叫做M估计(M-Estimator),它是Robust Regression的一大类方法。
常见损失函数
损失函数 Loss Function 之 Huber loss - 知乎 (zhihu.com)
非光滑优化方法的统一视角——光滑化 - 知乎 (zhihu.com)
对于非光滑优化问题,已经有很多很多的方法,比如增广拉格朗日方法、原始对偶方法、临近梯度方法、光滑化方法,ADMM。如果把约束优化纳入非光滑问题,那么罚方法也是一个。
凸分析
是非光滑分析的第一步,其奠基性的工作属于莫里奥(Moreau,J.J.)与洛卡费勒(Rockafellar,R.T.)
凸松弛
凸松弛方法是一种数值优化技术,用于求解凸优化问题。凸优化问题是指目标函数为凸函数,约束条件为线性函数的优化问题。该方法通过逐步放松问题的原始约束条件,转化为一系列近似的凸优化子问题,从而找到全局最优解。
具体过程
初始化:给定原始问题的初始解。
松弛约束:通过引入松弛变量,将原始问题的约束条件进行放宽,使之变为凸约束。
求解凸子问题:在放宽后的凸约束下,求解一个凸子问题,得到一个近似解。
收敛性判断:判断当前近似解与原始问题的最优解之间的差距是否满足收敛要求。如果满足,算法终止;否则,返回步骤3,进行下一次迭代。
输出结果:返回收敛时的近似解作为原始问题的最优解。
凸松弛方法具有以下优势
全局最优解:凸优化问题由于其特殊的性质,能够保证凸松弛方法的收敛解是全局最优解,而非局部最优解。
鲁棒性:凸松弛方法对于噪声和不完整数据具有较好的鲁棒性。在实际问题中,往往会存在一些干扰或者不完全的信息,凸松弛方法能够通过近似求解来抵抗这些干扰。
可并行化:凸松弛方法的计算过程具有良好的可并行性,适合在大规模计算机集群上进行高效求解。
凸松弛方法的实际应用
凸松弛方法在各个领域均有广泛的应用,以下举几个例子:
机器学习:凸松弛方法被广泛应用于支持向量机(Support Vector Machine)等机器学习算法中,用于求解优化目标函数。
电力系统:凸松弛方法能够应用于电力系统的潮流计算和经济调度等问题,有效提高电力系统的运行效率。
交通网络规划:在交通网络规划中,凸松弛方法可以用于求解最短路径问题,保证了交通网络的高效性和可靠性。
通信系统设计:在通信系统设计中,凸松弛方法可以用于优化功率分配、资源分配等问题,提升通信系统的性能。
isam2:通过贝叶斯树的结构,增加了因子后重新优化不需要从初始值开始做起,利用之前已有的解、之前已经线性化好的贝叶斯网络,重优化的时间比较短,有些优化工作不用重新做,特别是在graph变化不是特别大时
交替优化算法(Alternating Minimization, AM算法)
AM算法:给定一个初值,交替的固定一个变量,优化其他的,主要求解无约束优化.
对于二元函数,AM算法在双稳定点(bistable point)停止,但需要考虑两个问题:
1)收敛到双稳定点的速度,即算法收敛阶
2)收敛到的双稳定点是否是全局最小点
AM算法迭代没有参数,不必花时间调整参数,但也意味着用户对算法进程控制更少.AM算法的收敛性完全依赖优化问题的结构性质.
有界目标函数有多个双稳态点,AM最终收敛的稳定点取决于初始点的位置.
【凸优化笔记7】-交替方向乘子法(ADMM) - 知乎 (zhihu.com)
问题模型
交替方向乘子法(Alternating Direction Method of Multipliers)通常用于解决存在两个优化变量的只含等式约束的优化类问题,其一般形式为:
交替方向乘子法被广泛地应用在信号处理、图像处理、机器学习、工程计算等各个领域中,具有收敛速度快,收敛性能好的优势。
当AM算法求解学习隐变量模型,矩阵填充(子问题是边缘凸),相位恢复问题时,特别注意初始值接近最优点.而对于鲁棒回归(robust regression),只有一个稳定点,所以对初值没有太多要求.
交替方向乘子法(ADMM)的原理和流程的白话总结_admm整体流程-CSDN博客
代码
凸优化:邻近点梯度法、交替方向乘子法、次梯度法 matlab实现-CSDN博客
%% 交替方向乘子法(ADMM)
load('A.mat');
load('b.mat');
load('X.mat');
p = 0.01;
c = 0.005;
Xsize = size(X);
Xk = zeros(Xsize);
Yk = zeros(Xsize);
Lk = zeros(Xsize);
I = eye(Xsize(1));
X_dis2real = zeros(1,1000);
X_opt_step = [];
count = 0;
tidai = (A'*A+c*I)^(-1);
A_b = A'*b;
while 1
Xk_1 = tidai * ( A_b + c*Yk - Lk);
Yk_1 = zeros(Xsize);
for i = 1:Xsize
if Xk_1(i) + Lk(i)/c - p/c > 0
Yk_1(i) = Xk_1(i) + Lk(i)/c - p/c;
elseif Xk_1(i) + Lk(i)/c + p/c < 0
Yk_1(i) = Xk_1(i) + Lk(i)/c + p/c;
end
end
Lk_1 = Lk + c*(Xk_1 - Yk_1);
count = count + 1 ;
X_dis2real(count) = norm(Xk_1 - X, 2);
X_opt_step = [X_opt_step norm(Xk_1 - Xk, 2)];
if norm(Xk_1 - Xk, 2) < 1e-5
break
else
Xk = Xk_1;
Yk = Yk_1;
Lk = Lk_1;
end
end
X_opt = X_opt_step( :, count );
for i = 1:count
X_dis2opt(i) = norm(X_opt_step(:,i) - X_opt, 2);
end
hold on
plot(X_dis2real,'LineWidth',1);
plot(X_dis2opt,'LineWidth',1);
title('Distance');
legend('distance to real', 'distance to opt');
print('ADMM','-dpng');
待续。。。