全局最优 & 局部最优

结论

主要是为了探讨是逐行把 𝜆𝑖解成局部最优再写回,还是全向量更新!

准确说:没组装矩阵 ≠ 按行依次“解”。 APGD 做的是全向量更新:它每一轮都用当前整条 $\lambda$ 去算全局梯度 $g=N\lambda-b$,再一次性把 $\lambda$ 推进并做块投影;这和“逐行把 $\lambda_i$ 解成局部最优再写回”的 PGS/GS 完全不是一回事。

计算过程中是整个N带去去计算的,所以是全局的最优解,然后设计成算子乘的效果更佳,因为这样子可以更好的缓存,也可以适配动态拓扑,因为不会产生固定的稀疏矩阵Z。

定义

任何优化问题都像在“可行区域”里找一个点,让目标函数(误差/能量/花费)尽可能小。

可行区域:满足约束的那些点;目标函数:你想压低的那个量。

举个例子:

把目标函数想成“海拔”,可行区域就是你能走的地。

全局最优:整张地图里海拔最低的点。

局部最优:只在你脚边一小圈范围内最低,但地图别处可能更低。

凸问题的地形像一个大碗,只有一个底;非凸问题像群山起伏,到处是小洼地。

区别几个概念

全局最优:拿它和所有可行点比,谁都不比它更小。

严格全局最优:拿它和所有其他可行点比,别人都更大。

局部最优:只在它周围“足够小的一圈”里,别人都不更小。

严格局部最优:在那一小圈里,别人都更大。

注意边界点:比较的是“那一圈”与可行区域的交集。

无约束时:

一阶导为零(坡度为零)是必须的;

二阶导“非负”表示那是个凹下去的形状;若“严格正”,就是严格局部最小。

凸目标 + 凸可行域:任何局部最优自动就是全局最优。

分析APGD

APGD 流程在当前建模下求的是凸问题的解 —— 因此得到的是全局最优解

可行集 𝐾 是凸集(区间/半空间 + 二阶锥都凸) + 目标函数是个凸函数

\[f(\gamma)=\tfrac12\,\gamma^\top A\gamma - r^\top\gamma,\quad \nabla f(\gamma)=A\gamma-r.\]

行域投影(盒约束 + 摩擦圆锥):

\[\gamma\leftarrow \Pi_{\mathcal K}\big(\gamma - t\nabla f(\gamma)\big),\quad \|\gamma_T\|\le \mu\,\gamma_N.\]

ChSolverMulticoreAPGD.cpp