20_Retraction与流形优化
专题2:Retraction理论与流形优化基础¶
预计阅读时间¶
| 阅读方式 | 时间 | 适合谁 |
|---|---|---|
| 精读(含练习与推导验证) | 8–10 小时 | 需要理解 Retraction 框架并实现流形优化算法的读者 |
| 速读(跳过推导细节) | 3–4 小时 | 已有优化基础、只需补全流形优化视角的读者 |
| 速查(只看表格和算法伪代码) | 30–40 分钟 | 遇到具体 Retraction 选型或 Armijo 条件问题时回来查 |
前置自测¶
📋 前置自测(答不出 >= 2 题 → 先回专题1「光滑流形一般理论」复习)
- 切空间 \(T_xM\) 的定义是什么?它与流形 \(M\) 的区别在哪里?
- 光滑映射 \(F: M \to N\) 的切映射 \(dF_p\) 把什么映射到什么?
- 为什么在 \(SO(3)\) 上不能直接做 \(R_{k+1} = R_k + \Delta R\) 来更新旋转?
- 梯度下降公式 \(x_{k+1} = x_k - \alpha \nabla f(x_k)\) 隐含了什么关于状态空间的假设?
- Riemannian 度量(内积)为什么在流形优化中不可或缺?
0 为什么这个专题是连接几何与优化的桥梁 ⭐¶
Retraction 是"切空间→流形"的回退映射(retraction map),它让流形上的优化算法成为可能。 欧氏空间中梯度下降的更新 \(x_{k+1} = x_k - \alpha\nabla f(x_k)\) 在流形上失效——因为 \(x_k - \alpha\nabla f(x_k)\) 通常不在流形上。Retraction 正是解决这一矛盾的核心工具:先在切空间做"欧氏式"的一步,再通过 retraction 映射回流形。
这里需要建立的第一个关键认知是:李群的 exp 映射只是 retraction 的一个特例,而且常常是计算成本最高的选择。实践中 QR retraction、polar retraction、Cayley map 在 Stiefel 流形和 SO(n) 上比矩阵指数快一个数量级。第二个关键认知是:李群指数映射(代数对象)和 Riemannian exp 映射(测地线的几何对象)是两件事,二者仅在 bi-invariant 度量下恰好重合。
本专题在路线图中的位置十分明确:承接专题1(光滑流形一般理论)提供的切空间与光滑映射语言,为后续专题3(李群)提供"exp 只是 retraction 特例"的视角,同时是第二批"凸优化/非线性优化"中 manifold optimization 部分的完整前置。在机器人工程中,本专题的知识直接支撑 ICP 对齐优化、PGO 中的 pose 优化(GTSAM 的 retract 接口)、SE-Sync 的 SDP 松弛求解,以及等变学习中的流形参数优化。
1 核心章节清单(档位3必学,25-35小时) ⭐¶
1.1 Retraction 的一般定义(Absil-Mahony-Sepulchre 框架) ⭐⭐¶
- Retraction \(R_x: T_xM \to M\) 的严格定义:满足 \(R_x(0_x)=x\) 且 \(\mathrm{D}R_x(0_x) = \mathrm{id}_{T_xM}\) 的光滑映射
- 一阶 retraction 为何对一阶优化(梯度下降)已经足够——因为一步迭代的误差为 \(O(\|\xi\|^2)\),不影响一阶收敛性
- 二阶 retraction 的额外条件:与测地线的二阶相切,Newton 方法需要此精度
- 核心直觉:retraction 是对 exp 映射的"廉价近似",精度–速度权衡是实际算法设计的核心
资源:Boumal 书 Ch.3 §3.5–3.6;Absil 书 Ch.4 Definition 4.1.1;Absil Ch.4 免费 PDF(press.princeton.edu/absil)
1.2 常见 retraction 的例子与计算成本 ⭐⭐¶
| 流形 | Retraction 类型 | 计算复杂度 | 备注 |
|---|---|---|---|
| \(S^{n-1}\)(单位球面) | 归一化 \(R_x(\xi) = (x+\xi)/\|x+\xi\|\) | \(O(n)\) | 最便宜 |
| \(S^{n-1}\) | Exponential map | \(O(n)\) | 需要三角函数,略贵 |
| \(\mathrm{St}(k,n)\)(Stiefel 流形) | QR retraction | \(O(nk^2)\) | 实践首选,仅需薄 QR 分解 |
| \(\mathrm{St}(k,n)\) | Polar retraction | \(O(nk^2)\) | 精度优于 QR |
| \(\mathrm{St}(k,n)\) | Cayley retraction | \(O(nk^2)\) | 保结构 |
| \(\mathrm{St}(k,n)\) | Exponential map | \(O(n^3)\) 或迭代 | 最贵,通常不必要 |
| \(\mathrm{Gr}(k,n)\)(Grassmann 流形) | 列空间投影 | \(O(nk^2)\) | 自然商结构诱导 |
| \(\mathrm{SO}(n)\) | Cayley map \((I-\xi/2)^{-1}(I+\xi/2)\) | \(O(n^3)\) | 不需 exp |
| \(\mathrm{SO}(n)\) | Matrix exponential | \(O(n^3)\),常数更大 | Padé 近似或 scaling-squaring |
| \(\mathrm{SE}(3)\) | 分解 retraction(旋转 + 平移分别处理) | \(O(1)\) | GTSAM/Ceres 默认 |
| \(\mathrm{SE}(3)\) | Group exponential(Rodrigues 闭式) | \(O(1)\),常数更大 | 闭式可用但含三角函数 |
核心洞察:retraction 的选择直接影响每步迭代的计算量,在大规模 PGO(数万 pose)中累积差异显著。
1.3 Vector transport ⭐⭐⭐¶
- 定义:两个切空间 \(T_xM\) 与 \(T_{R_x(\xi)}M\) 之间的线性映射,作为 parallel transport 的一阶近似
- 为什么需要:共轭梯度法需要将上一步梯度"搬运"到新切空间做 \(\beta\) 系数计算;动量方法同理
- Vector transport 与 retraction 的相容性条件(differentiated retraction 自然诱导 vector transport)
- 实践中常用的三种方式:投影型、differentiated retraction 型、parallel transport 型
资源:Absil 书 Ch.8;Boumal 书 Ch.10;Absil ICIAM'07 vector transport 报告(perso.uclouvain.be/pa.absil/Talks/ICIAM070717_oom_05.pdf)
1.4 Riemannian 度量的引入 ⭐⭐¶
- 流形上定义梯度依赖内积:\(\langle \mathrm{grad}\,f(x), \xi \rangle_x = \mathrm{D}f(x)[\xi]\),没有度量就没有梯度
- Riemannian 度量张量 \(g_x: T_xM \times T_xM \to \mathbb{R}\),逐点光滑变化的内积
- 诱导度量 vs 内在度量:嵌入子流形从环境空间继承度量(如 Stiefel 用 \(\mathrm{tr}(\xi^T\eta)\));商流形需要 horizontal lift 定义度量
- SO(3)/SE(3) 上的 bi-invariant metric:\(\langle \Omega_1, \Omega_2 \rangle = \mathrm{tr}(\Omega_1^T \Omega_2)\),此度量下李群 exp = Riemannian exp
1.5 Riemannian gradient 与测地线 ⭐⭐¶
- Riemannian gradient 的定义:欧氏梯度在切空间上的正交投影 \(\mathrm{grad}\,f(x) = \mathrm{Proj}_{T_xM}(\nabla f(x))\)(对嵌入子流形)
- 为什么 \(\nabla f\) 不等于 \(\mathrm{grad}\,f\):前者可能有法向分量,后者严格在切空间内
- Exponential map 作为测地线 retraction:\(\mathrm{Exp}_x(\xi)\) = 从 \(x\) 出发沿 \(\xi\) 方向走单位时间的测地线终点
- 关键区分:李群 \(\exp\)(代数定义,\(e^{tX}\) 是单参数子群)vs Riemannian \(\mathrm{Exp}\)(几何定义,测地线),二者在 bi-invariant metric 下重合,但一般旋量群的 left-invariant metric 下不等
1.6 流形上的一阶优化算法 ⭐⭐¶
Riemannian Gradient Descent 完整算法:
输入:流形 M, 目标函数 f, 初始点 x_0, retraction R
for k = 0, 1, 2, ...
计算 Riemannian 梯度 η_k = grad f(x_k)
选择步长 α_k(Armijo on manifold)
更新 x_{k+1} = R_{x_k}(-α_k η_k)
end
- Armijo on manifold:沿 retraction 曲线 \(t \mapsto R_x(-t\,\mathrm{grad}\,f)\) 做回溯线搜索,要求 \(f(R_x(-t\,\eta)) \leq f(x) - c\,t\,\|\eta\|^2\)
- 全局收敛性:在紧流形上,Armijo RGD 的梯度范数收敛到零;迭代复杂度 \(O(1/\varepsilon^2)\) 达到 \(\|\mathrm{grad}\,f\| \leq \varepsilon\),与欧氏 GD 的 sharp rate 匹配
- 与欧氏 GD 对比:核心差异在于 (1) 梯度需投影, (2) 更新需 retraction, (3) 步长条件沿 retraction 曲线检验
2 进阶章节清单(档位4选学,额外15-25小时) ⭐⭐⭐⭐¶
| 主题 | 核心内容 | 推荐资源 |
|---|---|---|
| 二阶 retraction 与测地线高阶逼近 | 二阶条件的严格定义;对 Newton 方法收敛阶的影响 | Absil 书 Ch.5-6 |
| Riemannian Hessian 的两种定义 | 经由 Levi-Civita connection 或经由 retraction pullback | Boumal 书 Ch.5 |
| Parallel transport vs vector transport | 严格几何定义与数值近似的差异 | Boumal 书 Ch.10 |
| Riemannian Newton 与 Trust-region | Riemannian 截断 Newton-CG;RTR 算法 | Absil 书 Ch.6-7;Boumal 书 Ch.6 |
| 商流形(Stiefel/Grassmann 的商结构) | Horizontal lift、水平空间上的梯度/Hessian | Boumal 书 Ch.9;Absil 书 Ch.3.4 |
| Burer-Monteiro 非凸 landscape 理论 | 为什么 SE-Sync 能达到全局最优——smooth SDP 无杂散局部极小 | Boumal, Voroninski, Bandeira (NIPS 2016) |
| Non-smooth Riemannian optimization | RL policy on SO(3) 的 sub-gradient 方法 | 近年 NeurIPS/ICML 论文 |
| Riemannian SGD 及其 ML 应用 | 收敛分析;超双曲嵌入的训练 | Bonnabel (2013);Bécigneul & Ganea (ICLR 2019) |
3 核心教材深度指南 ⭐¶
3.1 Boumal《An Introduction to Optimization on Smooth Manifolds》(2023) ⭐¶
定位:当代流形优化的最佳入门教材,无需几何或优化先修。
| 项目 | 详情 |
|---|---|
| 出版 | Cambridge University Press, 2023 |
| 免费 PDF | nicolasboumal.net/book(预出版版,含 errata 批注) |
| 配套视频 | EPFL MATH-512(2023 春),14 周 \(\times\) 90 分钟完整录像,附习题解答 |
| edX 课程 | 前 6 周内容,edx.org 可注册旁听 |
| Bilibili | BV1hHFJe8E7z,66 集完整搬运,约 3100 播放 |
| 档位3 必读 | Ch.1-4(几何基础 + 一阶算法)+ Ch.7 选读(球面、Stiefel、SO(n) 的例子) |
| 档位4 追加 | Ch.5-6(二阶几何 + Newton/TR)+ Ch.9(商流形)+ Ch.10-11(transport, 测地凸性) |
| 难度 | ★★★☆☆ 教学友好,自包含;每章末有习题 |
3.2 Absil-Mahony-Sepulchre《Optimization Algorithms on Matrix Manifolds》(2008) ⭐⭐¶
定位:流形优化的奠基之作,理论严谨度更高,更偏数学。
| 项目 | 详情 |
|---|---|
| 免费全文 | press.princeton.edu/absil(Princeton University Press 官方,各章 PDF 独立下载) |
| 配套网站 | sites.uclouvain.be/absil/amsbook/(含报告幻灯片、Grenoble'08 暑期学校材料) |
| 档位3 必读 | Ch.3(一阶几何)+ Ch.4(线搜索 + retraction 定义 Definition 4.1.1) |
| 档位4 追加 | Ch.5-7(二阶几何、Newton、Trust-region)+ Ch.8(超线性算法) |
| 难度 | ★★★★☆ 比 Boumal 更抽象,适合参考而非首次学习 |
| 与 Boumal 的关系 | Boumal 书是其"现代化教学版",读 Boumal 为主、Absil 为辅是最优路径 |
3.3 Nocedal & Wright《Numerical Optimization》(欧氏对照) ⭐¶
流形上每种算法都有欧氏对应物。对照阅读可加深理解:Ch.3(线搜索 → Riemannian Armijo)、Ch.4(Trust-region → Riemannian TR)、Ch.5(CG → Riemannian CG + vector transport)、Ch.6(BFGS → Riemannian BFGS)。
4 关键定理清单 ⭐⭐¶
| # | 定理 | 档位 | 来源 |
|---|---|---|---|
| 1 | 一阶 retraction 充分性:一阶 retraction 保证 RGD 的一阶收敛性 | 3 | Absil Ch.4 |
| 2 | Riemannian Armijo 线搜索的全局收敛定理 | 3 | Boumal Ch.4 Thm 4.4 |
| 3 | RGD 迭代复杂度 \(O(1/\varepsilon^2)\)(达到 \(\varepsilon\)-一阶临界点) | 3 | Boumal, Absil, Cartis (IMA J. 2019) |
| 4 | 嵌入子流形的 Riemannian 梯度 = 欧氏梯度的正交投影 | 3 | Boumal Ch.3 |
| 5 | Riemannian Trust-region 的全局收敛 + 超线性局部收敛 | 4 | Absil Ch.7 |
| 6 | 二阶 retraction 的误差阶定理(与测地线的 \(O(\|\xi\|^3)\) 偏差) | 4 | Absil Ch.5 |
| 7 | 商流形上的水平梯度定理 | 4 | Boumal Ch.9 |
| 8 | Burer-Monteiro 无杂散局部极小(smooth SDP 的全局最优性) | 4 | Boumal, Voroninski, Bandeira (NIPS 2016) |
5 关键论文清单 ⭐⭐¶
奠基论文
- Absil, Mahony, Sepulchre.《Optimization Algorithms on Matrix Manifolds》Princeton, 2008. Ch.4 引入 retraction 框架。免费全文在线
- Absil, Malick. "Projection-like Retractions on Matrix Manifolds." SIAM J. Optim., 2012. 系统发展投影型 retraction 构造理论
- Edelman, Arias, Smith. "The Geometry of Algorithms with Orthogonality Constraints." SIAM J. Matrix Anal. Appl., 1998. Stiefel/Grassmann 几何的开山论文,~2700+ 引用。arXiv: physics/9806030
SE-Sync 系列(机器人社区最关键应用)
- Rosen, Carlone, Bandeira, Leonard. "SE-Sync: A Certifiably Correct Algorithm for Synchronization over the Special Euclidean Group." IJRR, 38(2-3):95-125, 2019. arXiv: 1612.07386. WAFR 2016 最佳论文
- Dellaert, Rosen 等. "Shonan Rotation Averaging." ECCV 2020. 旋转平均的全局最优算法
Burer-Monteiro 理论基础
- Boumal, Voroninski, Bandeira. "The Non-convex Burer-Monteiro Approach Works on Smooth Semidefinite Programs." NIPS 2016. arXiv: 1606.04970. SE-Sync 的理论基石
- 期刊扩展版:Comm. Pure Appl. Math., 2020
机器学习中的流形优化
- Bonnabel. "Stochastic Gradient Descent on Riemannian Manifolds." IEEE Trans. Autom. Control, 2013. Riemannian SGD 奠基。arXiv: 1111.5280
- Bécigneul, Ganea. "Riemannian Adaptive Optimization Methods." ICLR 2019. arXiv: 1810.00760. Riemannian Adam/Adagrad
- Boumal, Absil, Cartis. "Global Rates of Convergence for Nonconvex Optimization on Manifolds." IMA J. Numer. Anal., 2019. 建立 \(O(1/\varepsilon^2)\) sharp rate。arXiv: 1605.08101
综述
- Hu, Liu, Wen, Yuan. "A Brief Introduction to Manifold Optimization." J. Oper. Res. Soc. China, 2020.(袁亚湘院士团队,中文社区权威入口)
- Fei et al. "A Survey of Geometric Optimization for Deep Learning." ACM Computing Surveys, 2025. arXiv: 2302.08210
6 软件库与工具 ⭐¶
研究工具¶
| 库 | 语言 | 定位 | 与本专题的关系 | GitHub / 网址 |
|---|---|---|---|---|
| Manopt v8.0 | MATLAB | 流形优化参考实现 | 每个流形提供多种 retraction 选择,egrad2rgrad 接口 |
manopt.org |
| Pymanopt | Python | Manopt 的 Python 移植 | 支持 NumPy/JAX/PyTorch 自动微分后端 | github.com/pymanopt/pymanopt |
| Geomstats v2.8 | Python | 几何统计 + ML on manifolds | 提供 exp/log/parallel transport,scikit-learn 兼容 API | github.com/geomstats/geomstats |
| Geoopt v0.5 | PyTorch | 几何深度学习 | retr() 与 expmap() 分离设计;RiemannianAdam 优化器 |
github.com/geoopt/geoopt |
| ROPTLIB | C++ | 高性能流形优化 | 显式 Retraction() / DiffRetraction() 接口,含等距性验证工具 |
github.com/whuang08/ROPTLIB |
机器人工程工具¶
| 库 | 语言 | retraction 接口 | 典型用途 |
|---|---|---|---|
| GTSAM | C++/Python | retract() / localCoordinates(),Rot3 支持 Cayley/Expmap 可选 |
因子图 SLAM、iSAM2 |
| Ceres ≥2.1 | C++ | Manifold::Plus() / Minus()(取代旧 LocalParameterization) |
非线性最小二乘、BA |
| Pinocchio | C++/Python | integrate() / difference()(配置空间 Lie 群操作) |
刚体动力学、运动规划 |
| SE-Sync | C++/Python | 内部使用 Stiefel 上 Riemannian TNT | 可认证全局最优 PGO |
| manif | C++11 | exp() / log() + 解析 Jacobian,兼容 Ceres |
状态估计、Kalman |
| smooth | C++20 | rplus / rminus Manifold concept |
李群样条、控制 |
7 学习资源汇总 ⭐¶
视频课程(推荐顺序)¶
- Boumal EPFL MATH-512(2023)— 14 周完整课程,配套习题解答。nicolasboumal.net/book/#lectures。Bilibili 搬运:BV1hHFJe8E7z(66 集)
- Simons Institute 1h talk — 浓缩入门。YouTube: youtube.com/watch?v=UjaoZE0GBpg
- SIAM Optimization 2023 Minitutorial — \(2\times90\) 分钟,含 Max-Cut 代码示例
- IROS'22 Tutorial "Riemann and Gauss meet Asimov"(Noémie Jaquier)— 机器人学习视角。Bilibili: BV1WtWae7ErR
中文社区资源¶
- 知乎:邓康康「黎曼优化的一点理解」(62 赞,入门首选);「袁亚湘院士团队流形优化综述」推荐文;「论文阅读:A brief introduction to manifold optimization」(详细数学笔记);Manopt 使用教程(含代码)
- CSDN:「流形优化全网最通俗版本详解」(应用导向,含波束成形示例)
- 北京大学:文再文「最优化:建模、算法与理论」课程(Bilibili: BV1Kc411i7kJ),教材被 100+ 高校采用,含 Stiefel 流形优化章节
- 中科大:王作勤微分流形课程讲义 staff.ustc.edu.cn/~wangzuoq/Courses/18F-Manifolds/(几何基础补充)
英文博客与补充资源¶
- Agustinus Kristiadi: "Optimization and Gradient Descent on Riemannian Manifolds"(从零推导 RGD)
- Andreas Bloch: "Stochastic Gradient Descent on Riemannian Manifolds"(乘积流形示例)
- MIT VNAV Lecture 18-19: Optimization on Manifolds(机器人应用视角笔记)
- Awesome-Riemannian-Optimization GitHub 论文集:github.com/andyjm3/Awesome-Riemannian-Optimization
8 学习时间预算与节奏 ⭐¶
| 阶段 | 内容 | 时间 | 建议节奏 |
|---|---|---|---|
| 档位3 Phase 1 | Retraction 定义 + 常见例子(§1.1-1.2) | 8-10 h | 第 1 周:读 Boumal Ch.3,做球面/Stiefel 上的 retraction 练习 |
| 档位3 Phase 2 | Riemannian 度量 + gradient(§1.4-1.5) | 7-9 h | 第 2 周:读 Boumal Ch.3 后半 + Ch.5 前半,配合 MATH-512 视频 |
| 档位3 Phase 3 | 一阶优化算法 + vector transport(§1.3, 1.6) | 10-12 h | 第 3 周:读 Boumal Ch.4 + Ch.10 选读,用 Pymanopt 实现 RGD |
| 档位4 | 二阶方法 + 商流形 + Burer-Monteiro + RSGD | 15-25 h | 第 4-5 周:Boumal Ch.5-6, 9;读 SE-Sync 和 Burer-Monteiro 论文 |
总计:档位3 约 25-35 小时(每天 2 小时,约 2-3 周);档位4 额外 15-25 小时。
9 自测题目 ⭐⭐¶
| # | 题目 | 档位 | 考察点 |
|---|---|---|---|
| 1 | 证明球面 \(S^{n-1}\) 上的归一化映射 \(R_x(\xi)=(x+\xi)/\|x+\xi\|\) 满足一阶 retraction 的两个条件 | 3 | Retraction 定义的验证 |
| 2 | 在 Stiefel 流形 \(\mathrm{St}(k, \mathbb{R}^n)\) 上实现 QR retraction,数值验证 \(R_X(0)=X\) 和 \(\mathrm{D}R_X(0)=\mathrm{id}\) | 3 | 编程 + 数值微分验证 |
| 3 | 推导球面 \(S^{n-1}\) 上 \(f(x)=x^TAx\) 的 Riemannian gradient,并实现 Armijo RGD 求最大特征值 | 3 | 投影梯度 + 完整算法实现 |
| 4 | 对比实现 SO(3) 上 Cayley map 和 Rodrigues 公式的计算效率(FLOP 计数 + wall-clock) | 3 | Retraction 成本的实际感知 |
| 5 | 实现简化版 rotation averaging:给定 \(n\) 个相对旋转测量 \(\tilde{R}_{ij}\),用 Riemannian GD 在 \(\mathrm{SO}(3)^n\) 上最小化 \(\sum \|R_i^T R_j - \tilde{R}_{ij}\|_F^2\) | 4 | SE-Sync 的简化版,综合检验 |
10 与后续专题的桥梁 ⭐¶
本专题在整个路线图中起承上启下的枢纽作用。向后看:专题1提供的切空间和光滑映射语言是 retraction 定义的地基。向前看:
- → 专题3(李群与李代数):建立"exp 只是 retraction 的特例"后,李群专题可聚焦于群结构本身(伴随表示、BCH 公式),而非将 exp 神秘化
- → 专题4(雅可比与微分):retraction 的微分 \(\mathrm{D}R_x(\xi)\) 正是流形版雅可比;differentiated retraction 自然诱导 vector transport
- → 专题6(等变理论):商流形的 horizontal lift、对称性在 retraction 设计中的角色(如 Grassmann 作为 Stiefel 的商)
- → 第二批(凸优化/非线性优化):流形优化是非凸优化的重要分支;Armijo 线搜索和 trust-region 的流形版是欧氏版的自然推广
- → 第五批(SE-Sync/certifiable SLAM):Burer-Monteiro + Riemannian Staircase 的完整数学基础在本专题建立
11 常见陷阱 ⭐¶
陷阱1:把 RGD 理解为"先梯度下降再投影"。 正确理解是:先在切空间计算 Riemannian gradient(已经是投影后的),然后经 retraction 回到流形。顺序和概念都不同于"project-after-step"。
陷阱2:忽视 vector transport 在动量方法中的必要性。 欧氏空间中 \(v_{k+1}=\beta v_k + \nabla f(x_{k+1})\) 的 \(v_k\) 和 \(\nabla f(x_{k+1})\) 在同一空间;流形上不然,必须将 \(v_k\) transport 到新切空间。
陷阱3:混淆李群 exp 和 Riemannian Exp。 李群 \(\exp(tX)\) 定义为单参数子群生成元;Riemannian \(\mathrm{Exp}_x(\xi)\) 定义为测地线终点。二者仅在 bi-invariant metric 下重合。在 left-invariant metric 下(如机器人中常用的 SE(3) 度量),两者不同。
陷阱4:误以为 retraction 必须是 exp。 这是最常见的误解。一阶优化只需一阶 retraction,QR/polar/Cayley 往往更快且数值更稳定。
陷阱5:不理解商流形上的优化需要 horizontal lift。 Grassmann 流形是 Stiefel 的商;直接在 Stiefel 上做 RGD 会沿 fiber 方向浪费计算,需要 horizontal lift 约束到水平子空间。
12. Retraction 的完整教学主线 ⭐¶
前面的章节给出了 Retraction 的定义、资源和算法清单。
这一节把它们串成一条从动机到工程实现的连续链条。
本专题的核心问题可以写成一句话:
这句话同时解释了 Retraction 的必要性、流形优化的算法结构,以及 Ceres/GTSAM/Pinocchio 中 Plus、retract、integrate 这些接口为什么存在。
12.1 前置自测 ⭐¶
学习本节前,先检查五个问题:
- 在单位球面 \(S^{n-1}\) 上,为什么 \(x-\alpha\nabla f(x)\) 通常不再满足单位长度?
- 为什么梯度必须属于 \(T_xM\),而不是任意环境空间方向?
- 为什么一阶优化只需要 Retraction 的一阶正确性?
- 为什么 Newton 或 trust-region 更关心二阶 Retraction?
- 为什么 Ceres 的
Manifold::Plus(x, delta)不是普通加法?
如果第 3 个问题不清楚,很容易把 Retraction 神秘化为"必须使用指数映射"。
这会导致实现过度复杂。
13. 从欧氏梯度下降的失败开始 ⭐¶
13.1 欧氏梯度下降隐含什么 ⭐¶
在 \(\mathbb{R}^n\) 中,最简单的优化问题是:
梯度下降写作:
这个公式隐含三件事:
| 隐含前提 | 在 \(\mathbb{R}^n\) 中为什么成立 | 在流形上为什么危险 |
|---|---|---|
| \(x_k\) 和 \(\nabla f(x_k)\) 可相加 | 点和向量都用同一坐标空间表示 | 点属于 \(M\),速度属于 \(T_xM\) |
| 更新后仍合法 | \(\mathbb{R}^n\) 对加法封闭 | \(M\) 通常不对加法封闭 |
| 梯度方向可全局比较 | 所有切空间天然相同 | 不同点的切空间不同 |
因此欧氏梯度下降不是普适算法。
它是流形优化在最简单流形 \(\mathbb{R}^n\) 上的特例。
Retraction 可以类比导航系统中的"贴地飞行":飞行员根据仪表(梯度)判断方向,先在平坦的仪表平面(切空间)上规划下一步,然后"贴回"地形表面(流形)。仪表显示是线性的,地形是弯曲的,Retraction 正是那个把仪表规划投射回真实地形的过程。类比的边界在于:飞机可以选择贴地飞行也可以离地,但流形优化的状态必须严格停留在流形上。
13.2 单位圆上的反面例子 ⭐¶
考虑:
设目标函数为:
它希望 \(x\) 朝向给定方向 \(a\)。
欧氏梯度是:
若直接更新:
一般有:
除非恰好满足特殊条件,否则 \(\|x^+\|\neq 1\)。
这说明直接欧氏更新破坏约束。
一种自然想法是更新后归一化:
这已经是 Retraction 的雏形。
🧠 思维陷阱:认为"更新后归一化"就够了
归一化只是一种特定的 Retraction(球面上的)。对于更复杂的流形(如 Stiefel 流形、Grassmann 流形),不存在简单的"归一化"操作。盲目推广"算完加法再投影回约束集"会遇到投影不唯一、投影计算量大、投影破坏搜索方向等问题。正确的思维方式是:先在切空间中计算合法方向,再用适合该流形的 Retraction 更新。
但还差一步:
方向 \(a\) 不一定在切空间。
正确的下降方向应该先投影到:
得到:
然后更新:
其中:
这就是流形梯度下降的完整雏形。
本质洞察:Retraction 不是为了"修补"欧氏更新,而是把"局部线性计算"与"全局几何约束"分工清楚。线性代数在切空间里做,状态合法性由 Retraction 保证。
14. Retraction 的正式定义与每个条件的含义 ⭐⭐¶
14.1 定义 ⭐⭐¶
设 \(M\) 是光滑流形。
对每个 \(x\in M\),Retraction 是一个光滑映射:
满足:
以及:
这两个条件非常少。
它们正是 Retraction 的力量所在。
Retraction 的两个条件可以类比 Taylor 展开的零阶和一阶:\(R_x(0) = x\) 相当于函数在展开点的值正确(零阶),\(DR_x(0) = \mathrm{id}\) 相当于斜率正确(一阶)。正如一阶 Taylor 近似对小 \(h\) 足够好一样,一阶 Retraction 对小步长的优化迭代也足够好。这不是巧合——背后的数学原因完全一致。
14.2 条件一:零增量不动 ⭐⭐¶
第一个条件:
保证没有优化增量时,状态不变。
如果这个条件不成立,算法会出现荒唐行为:
这会破坏临界点概念。
14.3 条件二:一阶导数是恒等映射 ⭐⭐¶
第二个条件:
表示 Retraction 在零附近的一阶行为与切空间自身一致。
用局部坐标理解:
这说明小增量 \(\xi\) 的一阶效果没有被扭曲。
如果一阶导数不是恒等映射,比如:
则算法以为自己走了 \(\xi\),实际一阶走了 \(A\xi\)。
这会改变下降方向、收敛速率甚至稳定性。
如果 Retraction 不满足一阶条件会怎样? 考虑一个"坏"的回退映射 \(\tilde{R}_x(\xi) = x + 2\xi + O(\|\xi\|^2)\)(一阶导数是 \(2I\) 而非 \(I\))。算法以为走了步长 \(\alpha\),实际一阶走了 \(2\alpha\)。结果是 Armijo 线搜索的充分下降估计失效,原本应该收敛的步长变得过大,迭代可能发散。更隐蔽的情况是 \(DR_x(0) = A\)(某个非恒等矩阵),此时下降方向被隐式旋转,梯度下降不再沿最陡下降方向移动。
14.4 为什么一阶条件已经够用 ⭐⭐¶
一阶梯度下降的收敛性只依赖一阶下降:
当 \(\eta=\operatorname{grad}f(x)\) 时:
只要 \(\alpha\) 足够小,一阶负项主导二阶误差。
因此一阶 Retraction 足以保证下降。
这解释了为什么 QR Retraction、归一化 Retraction 能用于一阶优化。
它们不必等于测地线指数映射。
💡 提示:Retraction 的标准比你想象得低
很多初学者以为流形优化必须精确沿测地线走。
实际上,一阶算法只要求局部一阶正确。
这就是工程上大量使用廉价 Retraction 的原因。
15. Exponential Map 与 Retraction 的区别 ⭐⭐¶
15.1 Riemannian Exp ⭐⭐¶
若 \(M\) 上有 Riemannian 度量,可以定义测地线。
给定:
令 \(\gamma(t)\) 是满足:
的测地线。
Riemannian 指数映射定义为:
它表示:
15.2 李群 Exp ⭐⭐¶
在李群上,指数映射:
来自矩阵指数或单参数子群。
它是代数对象。
它不一定等于 Riemannian Exp。
两者相等需要额外条件,例如 bi-invariant metric。
15.3 Retraction 更一般 ⭐⭐¶
Retraction 只要求:
因此:
是 Retraction,但 Retraction 不必是 Exp。
三者关系可以整理为:
| 映射 | 需要什么结构 | 几何含义 | 计算代价 |
|---|---|---|---|
| 普通 Retraction | 光滑流形 | 一阶合法更新 | 可很低 |
| Riemannian Exp | Riemannian 度量 | 沿测地线走 | 常较高 |
| 李群 exp | 群结构 | 李代数到群 | 依群而定 |
15.4 反事实:如果坚持使用 Exp 会怎样 ⭐⭐¶
在 \(SO(3)\) 和 \(SE(3)\) 中,指数映射有闭式,使用它很合理。
但在 Stiefel 流形:
精确测地线 Exp 通常比 QR Retraction 贵。
若每次迭代都用精确 Exp,大规模问题会显著变慢。
而一阶优化的收敛性并不需要这种精确性。
这就是 Retraction 框架的工程价值。
16. 常见 Retraction 逐个推导 ⭐⭐¶
16.1 球面归一化 Retraction ⭐⭐¶
在单位球面:
切空间为:
定义:
验证第一个条件:
验证第二个条件。
令:
因为 \(x^\top\xi=0\):
所以:
因此:
于是:
所以 \(DR_x(0)=I\)。
16.2 SO(3) 上的指数 Retraction ⭐⭐¶
对 \(R\in SO(3)\),右扰动更新:
零增量:
一阶展开:
所以:
这正好落在:
的一阶方向中。
16.3 SO(3) 上的 Cayley Retraction ⭐⭐⭐¶
Cayley 映射定义为:
其中 \(\Omega^\top=-\Omega\)。
当 \(I-\frac{1}{2}\Omega\) 可逆时,\(\operatorname{Cay}(\Omega)\in SO(3)\)。
小量展开:
因此:
所以 Cayley 映射也是一阶 Retraction。
它不覆盖旋转角为 \(\pi\) 的情形。
但作为局部优化更新通常足够。
16.4 Stiefel 流形的 QR Retraction ⭐⭐⭐¶
Stiefel 流形:
给定切向量 \(\Xi\in T_X\operatorname{St}(p,n)\)。
对 \(X+\Xi\) 做 thin QR 分解:
取:
因为 \(Q^\top Q=I\),所以结果在 Stiefel 流形上。
当 \(\Xi\) 很小时,QR 分解中的 \(Q\) 与 \(X+\Xi\) 的差别是二阶量。
因此一阶条件成立。
这就是很多矩阵流形算法选择 QR Retraction 的原因。
本质洞察:Retraction 的多样性不是理论上的冗余,而是工程上的自由度。对于同一个流形,不同的 Retraction 在计算代价、数值稳定性和几何精度之间取不同的权衡。选择 Retraction 就像选择数值积分器——Euler 够用就不必用 Runge-Kutta,QR 够用就不必用矩阵指数。
⚠️ 陷阱:把 QR 的符号约定忘掉
QR 分解不唯一。
若 \(R\) 的对角线允许负号,\(Q\) 可能发生列符号翻转。
优化中必须固定约定,通常要求 \(R\) 对角线为正。
否则 Retraction 可能不连续。
17. Riemannian Gradient 的推导 ⭐⭐¶
17.1 微分先于梯度 ⭐⭐¶
函数:
在点 \(x\) 处的微分是:
它是一个 1-形式。
梯度是切向量:
要从 \(df_x\) 得到梯度,需要内积:
定义为:
这说明梯度依赖 Riemannian 度量。
Riemannian gradient 的投影公式可以类比受约束系统中的力分解:一个物体被约束在光滑曲面上运动(如珠子在铁丝上),重力可以分解为沿曲面的分力(切向分量,真正让物体运动)和垂直于曲面的法向分力(被约束力抵消)。Riemannian gradient 就是"沿流形的有效下降力"——法向分量被约束消灭,只留下切向分量推动优化。
17.2 嵌入子流形中的投影公式 ⭐⭐¶
若 \(M\) 嵌入在欧氏空间中,且使用诱导度量。
欧氏梯度为:
其中 \(\bar{f}\) 是 \(f\) 的局部延拓。
Riemannian gradient 是欧氏梯度在切空间上的正交投影:
以球面为例:
投影矩阵为:
因此:
17.3 为什么法向分量必须去掉 ⭐⭐¶
欧氏梯度可以分解为:
其中:
沿流形上的任何可行小运动 \(\eta\in T_xM\),有:
因此法向分量不改变一阶目标值。
它只会把更新推出流形。
所以流形优化中真正有意义的是切向分量。
如果不去掉法向分量会怎样? 直接使用欧氏梯度 \(\nabla f\) 而不投影到切空间,更新 \(x^+ = R_x(-\alpha \nabla f)\) 中的 \(\nabla f\) 包含法向分量。Retraction 会把法向分量"吸收"回流形,但这种吸收是非线性的、不可控的——它可能导致步长效率降低(法向分量白白浪费计算资源)、收敛方向偏移(法向分量经 Retraction 的非线性投射后产生意想不到的切向位移),甚至在曲率大的区域引起数值不稳定。
💡 提示:约束优化中的 Lagrange multiplier 与投影梯度是同一件事的两种表达
在等式约束 \(c(x)=0\) 下,KKT 条件要求梯度落在约束 Jacobian 的行空间。
等价地,Riemannian gradient 为零。
前者从约束优化写法出发,后者从子流形几何出发。
18. 流形上的线搜索 ⭐⭐¶
18.1 欧氏 Armijo 条件 ⭐⭐¶
欧氏空间中,沿下降方向 \(\eta\) 做线搜索:
Armijo 条件为:
若 \(\eta=-\nabla f(x)\),右侧为:
18.2 流形 Armijo 条件 ⭐⭐¶
在流形上,线变成 Retraction 曲线:
Armijo 条件写为:
如果:
则:
这与欧氏形式完全平行。
唯一变化是:
18.3 伪代码 ⭐⭐¶
// Riemannian gradient descent on a manifold.
// 这里的 State 可以是 SO3、SE3、球面点或其他流形状态。
State x = initial_state;
for (int iter = 0; iter < max_iter; ++iter) {
Tangent g = riemannian_gradient(x); // 已经投影到 T_x M
double alpha = initial_step;
while (true) {
State x_trial = retract(x, -alpha * g); // 通过 Retraction 回到流形
double lhs = cost(x_trial);
double rhs = cost(x) - c * alpha * inner(x, g, g);
if (lhs <= rhs) {
x = x_trial;
break;
}
alpha *= 0.5; // 回溯线搜索
}
}
⚠️ 编程陷阱:在回溯线搜索中忘记重新计算代价函数
流形上 cost(x_trial) 的计算可能涉及约束检查(如矩阵正交性验证)。如果 Retraction 实现有 bug(返回的点不严格在流形上),代价函数可能返回 NaN 或异常值,但回溯线搜索会静默接受一个"足够下降"的坏点。建议在 debug 模式下加入流形约束残差检查。
这段代码展示了流形优化的三层结构:
riemannian_gradient负责切空间方向。retract负责合法状态更新。inner负责度量。
19. Gauss-Newton 与 LM 在流形上怎么变 ⭐⭐⭐¶
19.1 最小二乘问题 ⭐⭐⭐¶
机器人后端优化常写为:
其中残差:
在当前点 \(x\) 附近,用 Retraction 建立局部模型:
这是从切空间 \(T_xM\) 到 \(\mathbb{R}^m\) 的普通函数。
因此可以对 \(\xi=0\) 线性化:
其中:
19.2 Gauss-Newton 步 ⭐⭐⭐¶
局部二次模型:
法方程:
求得 \(\xi^\star\) 后更新:
这说明:
19.3 LM 阻尼 ⭐⭐⭐¶
Levenberg-Marquardt 在切空间里加阻尼:
这里的 \(I\) 是切空间坐标中的单位矩阵。
如果切空间不同维度或不同尺度混合,例如 \(SE(3)\) 的平移与旋转,就需要注意尺度权重。
在位姿优化中,旋转单位是 rad,平移单位是 m。
直接使用同一个阻尼可能导致平移和旋转权重不合理。
⚠️ 陷阱:把环境空间维度当成切空间维度
单位四元数存储为 4 维。
但 \(SO(3)\) 的切空间是 3 维。
Ceres 中四元数参数块大小是 4,局部增量大小是 3。
如果把 Jacobian 写成对 4 维自由变量求导,再不处理单位约束,就会得到错误的优化问题。
如果不区分环境维度和切空间维度会怎样? 对四元数直接构造 \(4 \times 4\) 的 \(J^\top J\) 矩阵并求解 4 维增量,看似可行但有两个严重问题:(1) 法方程变成奇异或接近奇异的——因为有一个方向(四元数范数方向)被约束锁死,该方向的 Hessian 信息缺失;(2) 求得的增量包含法向分量,直接加到四元数后范数偏离 1,需要额外归一化步骤。正确做法是在 3 维切空间中求解增量,Ceres 的 Manifold 接口正是自动处理这种维度缩减。
20. 工程接口对照 ⭐¶
20.1 Ceres ⭐¶
Ceres 的 Manifold 接口核心是:
class Manifold {
public:
virtual bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const = 0;
virtual bool Minus(const double* y,
const double* x,
double* y_minus_x) const = 0;
};
这里:
| 接口 | 几何含义 |
|---|---|
Plus(x, delta) |
\(R_x(\delta)\) |
Minus(y, x) |
\(R_x^{-1}(y)\) 的局部近似 |
AmbientSize() |
存储维度 |
TangentSize() |
切空间维度 |
四元数的典型情况是:
20.2 GTSAM ⭐¶
GTSAM 使用:
几何意义为:
以及:
Pose3 的局部坐标是 6 维。
但要特别注意 GTSAM 的切向量排序通常是旋转在前。
20.3 Pinocchio ⭐¶
Pinocchio 对配置空间提供:
它们处理的不只是 \(SE(3)\),还包括机械臂关节、浮动基、球关节等混合配置空间。
这正是 Retraction 思想在刚体动力学库中的体现。
20.4 Sophus / manif ⭐¶
Sophus 和 manif 更接近李群接口:
| 库 | 更新风格 | 注意点 |
|---|---|---|
| Sophus | 常见为左乘或用户自定义 | 注意 leftJacobian 命名 |
| manif | right-plus 清晰 | 与 Solà 论文约定一致 |
| GTSAM | right-plus | Pose3 排序旋转在前 |
| Ceres | 用户自定义 | 必须写清 Plus/Minus |
💡 提示:接口名不同,本质相同
Plus、retract、integrate、boxplus 都在表达同一件事:
真正需要警惕的是扰动方向、切向量排序和局部坐标定义。
21. 故障排查表 ⭐¶
| 现象 | 可能原因 | 检查方法 | 修复思路 |
|---|---|---|---|
| 优化一步后状态非法 | 直接做欧氏加法 | 检查约束残差,如 \(\|q\|-1\) 或 \(R^\top R-I\) | 使用 Retraction 或库的 manifold 接口 |
| 代价下降很慢 | Retraction 一阶正确但尺度不合适 | 检查平移/旋转量纲和步长 | 调整度量或归一化残差 |
| LM 对旋转过度阻尼 | 切空间坐标尺度混合 | 看阻尼矩阵是否同权处理 m 和 rad | 使用尺度矩阵或信息矩阵 |
| 四元数优化发散 | 4 维环境变量和 3 维切空间混淆 | 检查参数块维度与局部维度 | 使用 EigenQuaternionManifold |
| Stiefel 优化列符号跳变 | QR Retraction 约定不连续 | 检查 \(R\) 对角符号 | 固定 QR 对角线为正 |
| Riemannian CG 表现异常 | 没有 vector transport | 检查上一轮方向是否直接复用 | 把旧方向搬运到新切空间 |
| 论文公式搬到代码符号相反 | 左/右 Retraction 约定不同 | 写出 \(x^+=\operatorname{Exp}(\delta)x\) 还是 \(x^+=x\operatorname{Exp}(\delta)\) | 全项目统一约定并加测试 |
22. 学习中的易错概念辨析 ⭐⭐¶
⚠️ 陷阱:Retraction 不是 Projection 的同义词
Projection 通常指从环境空间投影到流形。
Retraction 的定义域是切空间。
对嵌入子流形,有些 Retraction 可由投影构造。
但在抽象流形、商流形或李群中,Retraction 不必表现为环境投影。
⚠️ 陷阱:梯度投影和状态投影不是一回事
梯度投影把欧氏梯度投到 \(T_xM\)。
状态投影把环境点拉回 \(M\)。
一个发生在速度空间,一个发生在状态空间。
混淆二者会导致算法解释混乱。
⚠️ 陷阱:Minus 不总是简单的反向 Plus
在非线性流形上,Minus(y, x) 通常是局部坐标:
它只在局部唯一。
例如旋转角接近 \(\pi\) 时,log 映射可能有分支歧义。
🧠 本质洞察:流形优化不是把欧氏优化推倒重来
它保留欧氏优化中最强大的部分:线性化、二次模型、线搜索、信赖域、稀疏法方程。
它只替换一件事:
这也是它能进入大型工程库的原因。
练习:Retraction 与流形优化¶
- 在草稿纸上证明球面归一化 Retraction 满足 \(R_x(0)=x\) 与 \(DR_x(0)=I\)。
- 对 \(SO(3)\),从 \(\exp(\delta^\wedge)=I+\delta^\wedge+O(\|\delta\|^2)\) 推导右乘指数更新的一阶正确性。
- 写出 \(S^{n-1}\) 上 \(f(x)=x^\top Ax\) 的 Riemannian gradient,并说明为什么要投影欧氏梯度。
- 对同一个 \(S^2\) 优化问题,比较归一化 Retraction 与精确测地线 Exp 的一步差异阶数。
- 解释 Ceres 中四元数
AmbientSize=4、TangentSize=3的几何原因。 - 用伪代码写出流形 Gauss-Newton:输入
residual(x)、jacobian_at_zero(x)、retract(x, delta)。 - 在 Stiefel 流形上说明 QR Retraction 为什么需要固定符号约定。
- 比较 GTSAM 的
retract/localCoordinates与 Ceres 的Plus/Minus,指出它们在几何上对应什么。
跨章综合题¶
考虑一个位姿图优化问题,变量为 \(T_i\in SE(3)\),边残差为:
请完成:
- 说明变量所在流形是什么。
- 说明每个优化增量所在切空间维数。
- 写出一次 Gauss-Newton 迭代中线性化、求解、更新的流程。
- 解释为什么不能写 \(T_i^+=T_i+\delta_i\)。
- 结合专题 4,说明残差 Jacobian 为什么依赖左右扰动约定。
- 结合专题 5,说明边噪声协方差为什么也定义在切空间中。
23. Riemannian 共轭梯度与 L-BFGS ⭐⭐⭐¶
23.1 为什么梯度下降不够:病态问题的困境 ⭐⭐⭐¶
前面 §18 介绍的 Riemannian 梯度下降(RGD)在理论上有全局收敛保证,但在实际大规模问题中常常**收敛极慢**。原因与欧氏空间中完全一致:当目标函数的 Hessian 条件数 \(\kappa = \lambda_{\max}/\lambda_{\min}\) 很大时,梯度方向与 Newton 方向偏差严重,迭代沿"窄谷"反复锯齿震荡。
回顾 Nocedal & Wright《Numerical Optimization》Ch.5 的经典分析:欧氏空间中最速下降的迭代复杂度为 \(O(\kappa \log(1/\varepsilon))\),而共轭梯度为 \(O(\sqrt{\kappa} \log(1/\varepsilon))\)——条件数 \(\kappa = 10^4\) 时,CG 快两个数量级。流形上的情况完全平行。
用一个类比来说明:梯度下降就像在山谷中只看脚下最陡的方向走路——如果山谷又长又窄,你会不断在两侧山壁之间来回碰撞,前进极慢。共轭梯度则像一位有记忆的登山者——他记住了上次走过的方向,这次故意选择一个"不重复上次错误"的方向,从而更快穿过窄谷。L-BFGS 更进一步,像一个带笔记本的登山者,记录最近几次的地形曲率信息,据此估计最优前进方向。
23.2 Riemannian 共轭梯度(Riemannian CG) ⭐⭐⭐¶
核心思想:在切空间中构造共轭方向,用 vector transport 把上一步方向搬运到新切空间。
欧氏共轭梯度的更新公式为:
其中 \(\beta_k\) 的选择决定了具体算法变体。流形上的困难在于:\(\nabla f(x_k) \in T_{x_k}M\) 与 \(d_{k-1} \in T_{x_{k-1}}M\) 不在同一个切空间,不能直接相加。
解决方案是引入 vector transport(回顾 §1.3):令 \(\mathcal{T}_{x_{k-1} \to x_k}\) 把上一步方向搬运到新切空间。Riemannian CG 的完整更新为:
两种经典的 \(\beta_k\) 选择:
| 变体 | \(\beta_k\) 公式 | 特点 |
|---|---|---|
| Fletcher-Reeves | \(\displaystyle\frac{\|\operatorname{grad} f(x_k)\|^2}{\|\operatorname{grad} f(x_{k-1})\|^2}\) | 实现简单,但可能产生不良搜索方向 |
| Polak-Ribière | \(\displaystyle\frac{\langle \operatorname{grad} f(x_k),\, \operatorname{grad} f(x_k) - \mathcal{T}({\operatorname{grad} f(x_{k-1})})\rangle}{\|\operatorname{grad} f(x_{k-1})\|^2}\) | 实践中更稳定,梯度变化小时自动退化为梯度下降 |
注意 Polak-Ribière 公式中 \(\operatorname{grad} f(x_{k-1})\) 同样需要通过 vector transport 搬运到 \(T_{x_k}M\),才能与 \(\operatorname{grad} f(x_k)\) 做差。
如果不做 vector transport 会怎样? 假设直接把 \(d_{k-1}\)(属于 \(T_{x_{k-1}}M\))当作 \(T_{x_k}M\) 中的向量使用——这在欧氏空间中没问题(因为所有切空间同构于 \(\mathbb{R}^n\)),但在弯曲流形上,\(d_{k-1}\) 可能不在 \(T_{x_k}M\) 中。用它做 retraction 更新 \(R_{x_k}(\alpha d_{k-1})\) 会产生两个问题:(1) 搜索方向不合法,retraction 可能行为异常;(2) 共轭性被破坏,算法退化甚至发散。这就是 §21 故障排查表中"Riemannian CG 表现异常"一项的根本原因。
Sato 与 Iwai(SIAM J. Optim., 2022)建立了 Riemannian CG 方法的统一收敛分析框架,证明在适当的 \(\beta_k\) 选择和 Wolfe 条件下,Riemannian CG 具有全局收敛性,且在强凸情况下达到 \(O(\sqrt{\kappa} \log(1/\varepsilon))\) 的迭代复杂度。
23.3 Riemannian L-BFGS ⭐⭐⭐⭐¶
动机:Newton 方法需要精确 Hessian,代价太高。L-BFGS 用最近 \(m\) 步的梯度差来近似 Hessian 逆,在欧氏空间中是大规模优化的标准选择。
流形上的困难同样是切空间不一致:需要把历史梯度对 \((s_k, y_k)\) 全部 transport 到当前切空间。Riemannian L-BFGS 的关键步骤如下:
- 计算 Riemannian 梯度 \(g_k = \operatorname{grad} f(x_k)\)
- 将存储的 \(m\) 对向量 \((s_i, y_i)\)(\(i = k-m, \ldots, k-1\))全部 transport 到 \(T_{x_k}M\)
- 用 two-loop recursion 计算近似 Newton 方向 \(H_k g_k\)
- 沿该方向做 Wolfe 线搜索并通过 retraction 更新
其中 \(s_k = \mathcal{T}(\alpha_k d_k)\),\(y_k = \operatorname{grad} f(x_{k+1}) - \mathcal{T}(\operatorname{grad} f(x_k))\)。
Huang, Absil 与 Gallivan(SIAM J. Optim., 2018)发表的"A Riemannian BFGS Method for Nonconvex Optimization Problems"证明了 Riemannian BFGS 在非凸情况下的全局收敛性和在非退化极小值点附近的超线性收敛。
23.4 收敛速率对比 ⭐⭐⭐¶
| 算法 | 每步代价 | 迭代复杂度 | 存储 | 适用场景 |
|---|---|---|---|---|
| RGD(最速下降) | 1 次梯度 + 1 次 retraction | \(O(\kappa/\varepsilon)\) | \(O(n)\) | 简单验证、小问题 |
| Riemannian CG | 1 次梯度 + 1 次 transport + 1 次 retraction | \(O(\sqrt{\kappa}\log(1/\varepsilon))\) | \(O(n)\) | 大规模一阶方法首选 |
| Riemannian L-BFGS | 1 次梯度 + \(m\) 次 transport + 1 次 retraction | 近超线性 | \(O(mn)\) | 中等规模、病态问题 |
| Riemannian Newton | 1 次 Hessian 求解 + 1 次 retraction | 二阶局部收敛 | \(O(n^2)\) | 小规模高精度 |
| Riemannian Trust-Region | 截断 CG 近似 Hessian | 超线性局部收敛 | \(O(n)\) | 综合性能最优 |
本质洞察:流形优化的算法谱系与欧氏优化完全平行——GD、CG、L-BFGS、Newton、Trust-Region 各有流形版。差别仅在于每步需要 retraction(替代加法)和 vector transport(替代向量直接复用)。理解了欧氏版本,流形版本只需加上这两个"几何税"。
23.5 Pymanopt 代码示例 ⭐⭐⭐¶
import pymanopt
from pymanopt.manifolds import Sphere
from pymanopt.optimizers import ConjugateGradient
# 球面上的 Rayleigh 商优化(求最大特征值)
n = 100
A = np.random.randn(n, n)
A = (A + A.T) / 2 # 对称矩阵
manifold = Sphere(n) # S^{n-1}
@pymanopt.function.numpy(manifold)
def cost(x):
return -x @ A @ x # 最小化负 Rayleigh 商 = 最大化特征值
problem = pymanopt.Problem(manifold, cost)
# Riemannian CG 求解,Pymanopt 自动处理梯度投影和 vector transport
optimizer = ConjugateGradient(verbosity=2)
result = optimizer.run(problem)
print(f"最大特征值: {-result.cost:.6f}")
参考文献:Absil, Mahony, Sepulchre, Optimization Algorithms on Matrix Manifolds, Princeton University Press, 2008. Boumal, An Introduction to Optimization on Smooth Manifolds, Cambridge University Press, 2023, Ch.8-10.
⚠️ 编程陷阱:Pymanopt 中忘记指定 retraction 类型
Pymanopt 对大多数流形有默认 retraction(如 Sphere 用归一化、Stiefel 用 QR)。但如果研究 retraction 选择对收敛的影响,需要显式设置。不同 retraction 可能导致相同 CG 算法在迭代次数上差 2-3 倍——原因不是收敛理论变了,而是 retraction 曲线与测地线的偏差影响了线搜索的效率。
💡 概念误区:认为 Riemannian CG 比 RGD "总是更好"
- 错误想法:CG 的理论收敛速率更快,所以应该总是用 CG。
- 实际情况:CG 的优势体现在**病态问题**(\(\kappa \gg 1\))上。对条件良好的问题(\(\kappa \approx 1\)),CG 的额外 vector transport 计算反而是浪费。此外,CG 对线搜索参数更敏感,在非光滑或高噪声目标函数上可能表现不如简单的 RGD。
- 正确做法:先用 RGD 跑一个 baseline,观察收敛曲线。如果出现明显锯齿或收敛停滞,再换 CG 或 L-BFGS。
24. 测地凸性与全局最优保证 ⭐⭐⭐⭐¶
24.1 从欧氏凸性到测地凸性 ⭐⭐⭐⭐¶
在欧氏空间中,凸函数的定义依赖直线段:
在流形上没有"直线段",但有**测地线**。测地凸性(geodesic convexity)把直线段替换为测地线段:
其中 \(\gamma\) 是从 \(\gamma(0)=x\) 到 \(\gamma(1)=y\) 的最短测地线。
为什么这个定义重要? 欧氏凸优化的所有美好性质——局部极小即全局极小、梯度下降全局收敛到最优解——都可以推广到测地凸函数上。但流形上的函数往往不是全局测地凸的(例如 \(SO(3)\) 上的函数只在半径 \(\pi\) 的测地球内有凸性保证),因此需要仔细分析凸性成立的区域。
测地凸性与欧氏凸性的关系可以这样理解:欧氏空间是曲率为零的平坦流形,测地线就是直线,测地凸性退化为欧氏凸性。正曲率流形(如球面)上,测地线"弯曲"程度更大,凸性区域更小;负曲率流形(如双曲空间)上,测地线发散更快,但凸性条件可能更容易满足。
Boumal 书 Ch.11 对测地凸性有完整的处理,包括强测地凸性(geodesic strong convexity)和其对收敛速率的改善。
24.2 旋转平均的测地凸性 ⭐⭐⭐⭐¶
旋转平均(rotation averaging)问题是:给定一组相对旋转测量 \(\tilde{R}_{ij}\),求绝对旋转 \(R_i \in SO(3)\) 使得
其中 \(d(\cdot,\cdot)\) 是 \(SO(3)\) 上的测地距离 \(d(R_1,R_2) = \|\operatorname{Log}(R_1^{-1}R_2)\|\)。
关键结果(Hartley et al., IJCV 2013;Boumal 2020):当所有噪声旋转 \(\tilde{R}_{ij}^{-1} R_i^{-1} R_j\) 的测地距离小于 \(\pi/2\) 时,上述目标函数在真实解的测地球内是**测地凸的**。这意味着任何从该球内出发的 Riemannian 梯度下降都能收敛到全局最优。
本质洞察:旋转平均的测地凸性告诉我们,SLAM 后端中的旋转优化在"噪声不太大"的条件下没有伪局部极小值。这解释了为什么 Gauss-Newton 在实践中很少陷入错误解——不是因为运气好,而是因为问题在合理噪声水平下本就是凸的。
如果噪声超过凸性半径会怎样? 当相对旋转测量的误差超过 \(\pi/4\)(约 45 度)时,测地凸性开始失效,目标函数可能出现伪局部极小值。此时传统迭代方法(Gauss-Newton、LM)可能收敛到错误解。这正是 SE-Sync 和 Shonan Rotation Averaging 的核心应用场景——它们通过 SDP 松弛提供全局最优性证书,即使在凸性失效的区域也能识别全局最优。
24.3 SE-Sync 中的对偶证书 ⭐⭐⭐⭐¶
SE-Sync(Rosen, Carlone, Bandeira, Leonard, IJRR 2019)的全局最优保证来自 SDP 对偶理论:
- 原始问题:在 \(SO(d)^n\) 上最小化二次代价(位姿图 MLE)
- SDP 松弛:将正交约束放松为半正定约束 \(X \succeq 0\)
- 对偶问题:构造一个对偶可行解
- 松弛精确性条件:当原始解 \(X^\star\) 的秩等于 \(d\) 时,SDP 松弛是 tight 的
Rosen 等人证明,当测量噪声低于某个阈值时,SDP 松弛精确成立,此时可以从 SDP 解直接恢复全局最优旋转,并给出**可验证的最优性证书**——对偶间隙(duality gap)为零。
这与测地凸性的联系是:SDP 松弛的精确性条件本质上等价于对偶问题在测地凸区域内可行——当噪声足够小使得凸性成立时,松弛自动 tight。
Shonan Rotation Averaging(Dellaert, Rosen 等, ECCV 2020)提供了一种优雅的实现策略:"Riemannian Staircase"——从 \(SO(3)\) 出发,逐步提升到 \(SO(p)\)(\(p > 3\)),在更高维空间中用 Riemannian trust-region 求解,直到验证全局最优。这个过程每一步都在 Stiefel 流形上做优化,直接使用本专题 §16.4 的 QR retraction 和 §23 的 Riemannian CG/trust-region。
24.4 与可认证感知的连接 ⭐⭐⭐⭐¶
测地凸性和 SDP 松弛理论为整个**可认证感知(certifiable perception)**领域提供了数学基础。这些方法不仅用于旋转平均,还扩展到:
- 点云配准:TEASER++(Yang, Shi, Carlone, T-RO 2021)在 99% 离群值下仍可全局最优
- 相对位姿估计:GNC(Yang 等, RA-L 2020, ICRA 最佳论文)通过 graduated non-convexity 逐步逼近鲁棒代价
- 多机器人 SLAM:分布式 certifiable 方法
这些方法的共同数学工具正是本专题建立的 retraction、Riemannian trust-region 和 Stiefel 流形优化。
⚠️ 概念误区:认为"可认证"等于"一定正确"
- 错误想法:SE-Sync 给出的证书说明解一定是物理真实的。
- 实际上:证书只保证解是**该数学模型下的全局最优**。如果数据关联错误(把 A 楼的特征匹配到 B 楼)、噪声模型不准确(假设高斯但实际有离群值)、或外参标定有偏差,全局最优解仍然是错的——只是在错误模型下最优而已。
- 正确理解:可认证方法解决的是"给定正确模型,能否高效找到全局最优"的**计算问题**,不是"模型是否正确"的**建模问题**。
25. 实战案例:旋转平均与 SE-Sync ⭐⭐⭐¶
25.1 问题表述 ⭐⭐⭐¶
旋转平均是 Structure-from-Motion 和多视角 SLAM 中的基础子问题:给定一个图 \(\mathcal{G} = (\mathcal{V}, \mathcal{E})\),其中节点 \(i \in \mathcal{V}\) 对应未知的绝对旋转 \(R_i \in SO(3)\),边 \((i,j) \in \mathcal{E}\) 对应观测到的相对旋转 \(\tilde{R}_{ij} \approx R_i^{-1} R_j\)。
代价函数为:
这是 \(SO(3)^n\) 上的优化问题。每个 \(R_i\) 必须严格满足正交约束 \(R_i^\top R_i = I\),\(\det R_i = 1\)。
25.2 Retraction 选择如何影响收敛 ⭐⭐⭐¶
在 \(SO(3)\) 上做梯度下降时,每步需要一次 retraction。回顾 §16 中 SO(3) 的两种 retraction:
| Retraction | 计算 | 覆盖范围 | 数值行为 |
|---|---|---|---|
| Rodrigues Exp | \(R \exp(\delta^\wedge)\),含 \(\sin/\cos\) | 完整 \(SO(3)\) | 精确但含三角函数 |
| Cayley map | \(R(I - \frac{1}{2}\delta^\wedge)^{-1}(I + \frac{1}{2}\delta^\wedge)\) | 旋转角 \(< \pi\) | 仅需矩阵求逆,无三角函数 |
在大规模旋转平均(\(n > 10000\) 节点)中,每步迭代需要对所有节点执行 retraction。若使用 Rodrigues Exp,\(n = 50000\) 时需要 \(50000\) 次 \(\sin/\cos\) 计算;Cayley map 仅需 \(3 \times 3\) 矩阵求逆(对 SO(3) 有闭式),通常快 1.5-2 倍。由于旋转平均中步长通常很小(远离 \(\pi\) 边界),Cayley map 的覆盖范围限制几乎不成问题。
本质洞察:Retraction 的选择是"精度-速度"权衡的工程决策。在大规模问题中,这个决策的累积效应可以决定算法是否能实时运行。对 SLAM 后端优化(通常需要在 100ms 内完成),用 Cayley 替代 Exp 可能是实现实时性的关键一步。
25.3 从旋转平均到完整 PGO ⭐⭐⭐¶
旋转平均只优化旋转分量。完整的位姿图优化(PGO)还包含平移:
SE-Sync 的策略是**分步求解**:先用旋转平均求全局最优旋转(利用 SDP 松弛保证全局性),再在已知旋转下用线性最小二乘求平移。这种分步策略之所以可行,是因为旋转平均的全局最优性保证了后续平移求解的基础是正确的。
GTSAM 中实现的接口直接体现了本专题的数学:
// GTSAM 中的旋转平均接口
#include <gtsam/sfm/ShonanAveraging.h>
// 构建旋转平均问题
gtsam::ShonanAveraging3 shonan(measurements);
// 从 SO(3)^n 出发,逐步提升到 SO(p)^n
auto result = shonan.run(); // 内部使用 Riemannian trust-region + QR retraction
// 结果包含全局最优旋转和最优性证书
double min_eigenvalue = shonan.computeMinEigenValue(result);
// min_eigenvalue >= 0 意味着 SDP 松弛 tight,解是全局最优
这段代码背后的数学正是本专题全部内容的工程落地:retraction(§16)用于流形更新、Riemannian gradient(§17)用于计算下降方向、trust-region(§2 进阶)用于步长控制、Stiefel 流形优化(§16.4 的 QR retraction)用于 Burer-Monteiro 分解。
⚠️ 编程陷阱:Shonan Rotation Averaging 中 \(p\) 的初始值设太大
- 错误做法:直接从 \(p = 10\) 开始求解,希望"一步到位"。
- 后果:\(SO(10)^n\) 上的优化问题维度是 \(SO(3)^n\) 的 \(\binom{10}{2}/\binom{3}{2} \approx 15\) 倍。计算量暴增,可能比简单的 Gauss-Newton + 初始化策略还慢。
- 正确做法:Riemannian Staircase 从 \(p = 3\) 开始,检查最优性证书。如果证书通过(最小特征值 \(\ge 0\)),直接返回;否则将 \(p\) 加 1 重试。实践中 90% 以上的问题在 \(p = 3\) 或 \(p = 4\) 就通过了。
25.4 练习 ⭐⭐⭐¶
- (手推)对两个旋转 \(R_1, R_2 \in SO(3)\),写出代价 \(\|R_1 \tilde{R}_{12} - R_2\|_F^2\) 关于 \(R_1\) 右扰动 \(\delta_1\) 的一阶展开。指出 Riemannian gradient 的形式。
- (编程)用 Pymanopt 实现简单的旋转平均:随机生成 \(n = 20\) 个旋转和它们之间的带噪声相对旋转,分别用 RGD 和 CG 求解,比较迭代次数和收敛速度。
- (思考)SE-Sync 论文中的 SDP 松弛精确性依赖噪声水平。查阅 Rosen et al. (IJRR 2019) 的 Theorem 3,说明精确性条件与测量噪声的定量关系。结合 §24.2 的测地凸性讨论,解释两个结果的联系。
25bis. Retraction 的数值实现细节 ⭐⭐¶
25bis.1 数值稳定性:小角度与大角度 ⭐⭐¶
SO(3) 上的 Rodrigues 指数映射:
当 \(\theta = \|\phi\| \to 0\) 时,\(\sin\theta/\theta\) 和 \((1-\cos\theta)/\theta^2\) 都会出现 0/0 形式。
直接计算会导致数值不稳定。正确做法是使用 Taylor 展开:
实践中当 \(\theta < 10^{-8}\) 时切换到 Taylor 展开(保留到 \(\theta^4\) 项),可保证全范围内的数值精度。
类似问题出现在 Log 映射中:
当 \(R\) 接近 \(I\) 时,\(\operatorname{tr}(R) \approx 3\),\(\arccos(1) = 0\),需要用 Taylor 展开替代。
当 \(R\) 接近 \(-I\)(旋转角接近 \(\pi\))时,出现另一种退化:轴方向变得不唯一(\(\pi\) 绕任何法向轴旋转得到相同矩阵),此时需要特殊处理分支。
| 情况 | \(\theta\) 范围 | 数值风险 | 处理策略 |
|---|---|---|---|
| 接近恒等 | \(\theta < 10^{-8}\) | \(\sin\theta/\theta\) 的 0/0 | Taylor 展开 |
| 正常范围 | \(10^{-8} < \theta < \pi - 10^{-6}\) | 无 | 直接公式 |
| 接近 \(\pi\) | \(\theta > \pi - 10^{-6}\) | 轴方向退化 | 特征值分解或四元数路径 |
⚠️ 编程陷阱:忽略 Rodrigues 公式的小角度分支
很多实现(包括某些版本的 OpenCV)在 \(\theta \to 0\) 时不做 Taylor 切换,导致在接近零旋转处返回 NaN 或巨大数值。在迭代优化中,优化收敛时 \(\delta\phi \to 0\) 恰好触发此分支——如果没有正确处理,会在最后几步迭代中突然发散。
25bis.2 Cayley Map 的优势与限制 ⭐⭐¶
Cayley retraction 避免了三角函数:
对 SO(3),\(3\times3\) 矩阵求逆有闭式(Cramer 法则),完全避免迭代。
与 Rodrigues 的对比:
两者的系数在 \(\theta\) 小时非常接近:\(4/(4+\theta^2) \approx 1 - \theta^2/4\) vs \(\sin\theta/\theta \approx 1 - \theta^2/6\)。
但 Cayley map 有覆盖限制:它无法表示旋转角恰好为 \(\pi\) 的旋转(此时分母 \(I - \frac{1}{2}\Omega\) 奇异)。在优化中步长通常远小于 \(\pi\),这个限制几乎不构成实际问题。
如果优化步长接近 \(\pi\) 会怎样? 这意味着当前估计与最优解相差几乎 \(180°\) 旋转。此时算法本身已经有问题——如此大的步长说明初始化极差或问题几何严重非凸。正确做法不是换用 exp retraction,而是改善初始化。
25bis.3 SE(3) 上的分解 Retraction ⭐⭐¶
SE(3) 上最常用的不是完整的群指数映射,而是分解 retraction:
其中 \(\xi = (\rho, \phi)^\top \in \mathbb{R}^6\)。
这不是 SE(3) 的群指数映射——群指数映射中平移项是 \(t + V\rho\)(\(V\) 是与 \(\phi\) 相关的矩阵)。分解 retraction 省略了 \(V\) 矩阵的计算,把旋转和平移解耦处理。
GTSAM 和 Ceres 默认使用的分解 retraction。误差是 \(O(\|\phi\|\|\rho\|)\)——当旋转扰动和平移扰动都小时,误差是两者乘积的量级,通常在优化收敛阶段完全可忽略。
本质洞察:完整的 SE(3) 指数映射和分解 retraction 之间的差异,反映了一个更深的数学事实:SE(3) 不是 SO(3) 与 \(\mathbb{R}^3\) 的直积,而是半直积。两者在李代数层面有耦合(体现为 \(V\) 矩阵),但这个耦合是二阶效应。对一阶优化方法,忽略它完全合法。
26. Retraction 的收敛性理论 ⭐⭐⭐¶
26.1 一阶 Retraction 保证一阶收敛 ⭐⭐⭐¶
Riemannian 梯度下降使用一阶 retraction 时的收敛保证:
设 \(f: M \to \mathbb{R}\) 满足 \(L\)-Lipschitz 梯度(在 Riemannian 意义下),使用固定步长 \(\alpha = 1/L\),则:
这与欧氏梯度下降的收敛率 \(O(1/\sqrt{K})\) 完全一致。
关键点在于:一阶 retraction 的定义条件 \(DR_x(0) = \operatorname{id}\) 保证了局部误差为 \(O(\|\xi\|^2)\),而一阶方法已经足够——因为梯度下降本身就是一阶方法,它对步长精度的要求只到一阶。
如果使用零阶"retraction"(比如简单的归一化投影)会怎样? 零阶近似的误差是 \(O(\|\xi\|)\),与步长本身同阶。这意味着每步更新中,retraction 引入的误差与优化方向的增益同量级——等于一步前进、一步后退,梯度下降可能完全不收敛。这就是为什么 retraction 的一阶条件 \(DR_x(0) = \operatorname{id}\) 是不可协商的最低要求。
26.2 二阶 Retraction 与 Newton 方法 ⭐⭐⭐⭐¶
对于 Riemannian Newton 方法或 trust-region 方法,需要二阶 retraction。
二阶 retraction 的额外条件是与测地线在二阶相切:
Newton 方法需要 Hessian 信息,步长由二阶 Taylor 展开确定。如果 retraction 只有一阶精度,Newton 步的二阶修正会被 retraction 误差"吃掉",导致丧失二次收敛性。
| 优化方法 | 需要的 Retraction 阶数 | 收敛率 |
|---|---|---|
| 梯度下降 | 一阶 | \(O(1/K)\)(强凸)或 \(O(1/\sqrt{K})\) |
| 共轭梯度 | 一阶 + vector transport | \(O(1/K^2)\)(理想情况) |
| Newton | 二阶 | 局部二次 |
| Trust-region | 二阶 | 局部二次 + 全局线性 |
本质洞察:retraction 的阶数与优化方法的阶数必须匹配。用高阶方法配低阶 retraction 是浪费计算——如同用精密天平称重,但把东西放在晃动的桌面上。反过来,用低阶方法配高阶 retraction 则是过度设计——精确的 retraction 带来的二阶精度在一阶方法中根本用不到。
26.3 全局收敛与测地强凸 ⭐⭐⭐⭐¶
局部收敛保证通常已够工程使用。但对可认证方法,需要全局结果。
测地强凸函数 \(f\) 在 \(M\) 上满足:
则梯度下降以线性速率收敛到全局唯一极小值:
测地强凸在曲率为正的流形上成立范围有限——\(SO(3)\) 上的二次代价在旋转角小于 \(\pi/2\) 时是强凸的,超出此范围可能出现多个局部极小。
27. Retraction 在深度学习中的应用 ⭐⭐⭐¶
27.1 正交约束层 ⭐⭐⭐¶
深度学习中越来越多的架构要求权重满足正交约束:
- 正交 RNN(Arjovsky et al., ICML 2016):防止梯度爆炸/消失
- Cayley 参数化(Helfrich et al., ICML 2018):用 Cayley retraction 保持正交性
- 等变网络的 Wigner D 矩阵层(e3nn)
训练过程本质上是 Stiefel 流形上的优化:
梯度更新使用 retraction 保持约束:
常用 QR retraction 或 Cayley retraction(避免计算昂贵的矩阵指数)。
27.2 Geoopt 与 PyTorch 中的流形优化 ⭐⭐⭐¶
Geoopt 是 PyTorch 生态中的流形优化库,直接实现了本专题的数学:
# Geoopt 实现球面上的优化
import torch
import geoopt
# 定义球面流形
sphere = geoopt.Sphere()
# 创建流形上的参数
x = geoopt.ManifoldParameter(torch.randn(3), manifold=sphere)
# 自动投影到球面
# 定义优化器(Riemannian Adam)
optimizer = geoopt.optim.RiemannianAdam([x], lr=0.01)
# 优化循环
for step in range(100):
loss = some_function(x) # 目标函数
loss.backward() # 欧氏梯度
optimizer.step() # 内部:投影到切空间 + retraction
optimizer.zero_grad()
Geoopt 支持的流形包括:Sphere、Stiefel、Grassmann、SPD matrices、Poincare ball。每个流形都实现了 retr(retraction)和 transp(vector transport)接口。
与 Pymanopt 的区别:Pymanopt 面向传统优化(CG、trust-region),适合中小规模精确求解;Geoopt 面向深度学习(SGD、Adam),适合大规模随机优化。
28. 本章知识树总结 ⭐¶
Retraction 与流形优化
├── 动机:欧氏更新离开约束集
│ └── 需要"切空间→流形"的回退映射
├── Retraction 严格定义
│ ├── 一阶条件:R_x(0)=x, DR_x(0)=id
│ ├── 二阶条件:与测地线二阶相切
│ └── 核心直觉:exp 的廉价近似
├── 常见 Retraction 实例
│ ├── 球面:归一化
│ ├── Stiefel:QR / Polar / Cayley
│ ├── SO(n):Cayley map / matrix exp
│ └── SE(3):分解 retraction / group exp
├── Vector Transport
│ ├── 把切向量从旧切空间搬到新切空间
│ └── CG/momentum 方法必需
├── Riemannian 度量
│ ├── 定义梯度的前提
│ ├── 诱导度量 vs 内在度量
│ └── bi-invariant metric 的特殊性
├── 一阶优化算法
│ ├── Riemannian GD
│ ├── Riemannian CG
│ └── Riemannian SGD / Adam
├── 二阶优化算法
│ ├── Riemannian Newton
│ ├── Riemannian trust-region
│ └── 商流形上的方法
├── 收敛性理论
│ ├── retraction 阶数与方法阶数匹配
│ ├── 测地强凸 → 线性收敛
│ └── 全局保证 → SDP 松弛
├── 工程落地
│ ├── GTSAM retract 接口
│ ├── Ceres Manifold::Plus
│ ├── Pymanopt / Geoopt
│ └── SE-Sync / Shonan
└── 前沿
├── 可认证感知
├── 深度学习中的正交约束
└── 分布式流形优化
29. 本章小结 ⭐¶
| 核心概念 | 一句话定义 | 工程对应 | 关键公式 |
|---|---|---|---|
| Retraction | 切空间到流形的局部光滑映射,一阶近似 exp | GTSAM retract |
\(R_x(0)=x,\; DR_x(0)=\operatorname{id}\) |
| Vector transport | 不同切空间之间的线性搬运 | CG/momentum 中的方向更新 | \(\mathcal{T}_\xi: T_xM \to T_{R_x(\xi)}M\) |
| Riemannian gradient | 欧氏梯度在切空间上的正交投影 | 流形上的下降方向 | \(\operatorname{grad}f = \operatorname{Proj}_{T_xM}(\nabla f)\) |
| Riemannian Hessian | 切空间上的二阶算子 | Newton 步长 | \(\operatorname{Hess}f[\xi] = \nabla_\xi \operatorname{grad}f\) |
| 测地凸性 | 沿测地线的凸性 | 全局最优保证 | 沿 \(\gamma\) 的 \(f\) 是凸的 |
| QR retraction | Stiefel 上最实用的 retraction | Shonan 内部实现 | \(R_X(\xi) = \operatorname{qf}(X+\xi)\) |
| Cayley map | 无需三角函数的 SO(n) retraction | 大规模旋转优化 | \((I-\xi/2)^{-1}(I+\xi/2)\) |
30. 累积项目:本章新增模块 ⭐¶
项目方向:手写几何验证库
本章新增模块:球面与 SO(3) 上的 Retraction 实现
# 验证不同 retraction 的一阶精度
import numpy as np
from scipy.linalg import expm
def so3_hat(omega):
"""向量 -> 反对称矩阵"""
return np.array([[0, -omega[2], omega[1]],
[omega[2], 0, -omega[0]],
[-omega[1], omega[0], 0]])
def retraction_exp(R, delta):
"""SO(3) 指数映射 retraction"""
return R @ expm(so3_hat(delta))
def retraction_cayley(R, delta):
"""SO(3) Cayley retraction"""
W = so3_hat(delta)
I = np.eye(3)
return R @ np.linalg.solve(I - 0.5*W, I + 0.5*W)
# 验证:两种 retraction 在小步长下一致
R = np.eye(3) # 从单位元出发
delta = np.array([0.01, 0.02, -0.01]) # 小扰动
R_exp = retraction_exp(R, delta)
R_cay = retraction_cayley(R, delta)
print("两种 retraction 差异:", np.linalg.norm(R_exp - R_cay))
# 应为 O(||delta||^3) ~ 1e-7 级别
后续模块预告: - 专题3:实现完整的 SO(3)/SE(3) 李群操作 - 专题4:实现左/右 Jacobian 闭式并验证
延伸阅读 ⭐¶
| 资源 | 难度 | 核心价值 |
|---|---|---|
| Boumal《An Introduction to Optimization on Smooth Manifolds》(2023) | ⭐⭐⭐ | 现代流形优化标准教材,免费在线 |
| Absil, Mahony, Sepulchre《Optimization on Matrix Manifolds》(2008) | ⭐⭐⭐ | 经典参考,Ch.4 retraction 定义开创性 |
| Boumal EPFL MATH-512 视频课程(14周) | ⭐⭐ | 最权威入门,含习题解答 |
| Rosen et al.《SE-Sync》(IJRR 2019) | ⭐⭐⭐⭐ | 可认证 SLAM 的数学核心 |
| Geomstats Python 库 | ⭐⭐ | 流形操作可视化与实验 |
| Geoopt(PyTorch 流形优化) | ⭐⭐⭐ | 深度学习中的流形约束 |
| Pymanopt(Python 流形优化框架) | ⭐⭐ | 支持 CG/trust-region/SD |
| Manopt(Matlab/Julia 原版) | ⭐⭐⭐ | 最早的流形优化工具箱 |
| Manifolds.jl(Julia 流形计算) | ⭐⭐⭐ | 最丰富的 retraction 实现集合 |
| Boumal "Introduction to smooth manifolds" SIAM OP 2023 幻灯片 | ⭐⭐ | 精美可视化,适合快速回顾 |
| Ruda Zhang et al. "A Survey of Numerical Methods on Manifolds" (2020) | ⭐⭐⭐ | retraction 对比的系统综述 |
SymPy 验证提示:
流形优化中公式较多,建议用 SymPy 验证以下关键公式: - Riemannian 梯度 = 欧氏梯度的正交投影(用具体例子如球面) - QR retraction 确实满足一阶条件(Taylor 展开验证 \(DR_X(0) = \operatorname{id}\)) - Cayley map 与 Rodrigues Exp 的 Taylor 展开前几项是否一致
import sympy as sp
# 验证 Cayley 与 Exp 的小角度等价性
theta = sp.Symbol('theta')
# Cayley 系数
cay_coeff = 4 / (4 + theta**2)
# Exp (sin/theta) 系数
exp_coeff = sp.sin(theta) / theta
# Taylor 展开对比
print("Cayley:", sp.series(cay_coeff, theta, 0, n=5))
print("Exp: ", sp.series(exp_coeff, theta, 0, n=5))
# 差异从 theta^2 阶开始
diff = sp.series(cay_coeff - exp_coeff, theta, 0, n=5)
print("差异:", diff) # O(theta^2) 项不同 -> retraction 只保证一阶一致
这验证了核心定理:Cayley map 是一阶 retraction(与 Exp 在 \(O(\|\xi\|)\) 处一致),但不是二阶 retraction(\(O(\|\xi\|^2)\) 项不同)。因此 Cayley 适合梯度下降,但不适合 Newton 方法。
| Dellaert et al.《Shonan Rotation Averaging》(ECCV 2020) | ⭐⭐⭐⭐ | Riemannian Staircase 实现 | | Yang, Carlone《TEASER++》(T-RO 2021) | ⭐⭐⭐⭐ | 可认证点云配准 | | Sato, Iwai "A Riemannian CG Method" (SIAM J. Optim. 2022) | ⭐⭐⭐⭐ | CG 收敛分析统一框架 | | Huang, Absil, Gallivan "RBFGS" (SIAM J. Optim. 2018) | ⭐⭐⭐⭐ | Riemannian BFGS 非凸全局收敛 |
🔧 故障排查手册 ⭐¶
| 症状 | 可能原因 | 排查步骤 | 相关节 |
|---|---|---|---|
| Retraction 后约束违反增大 | 实现错误或步长过大 | 1.检查 \(\|R^\top R - I\|\) 2.缩小步长 3.换用 exp retraction 对照 | §1.1-1.2 |
| 收敛比欧氏慢很多 | 度量选择不当 | 1.检查 Riemannian gradient 方向 2.尝试 preconditioned 度量 3.对比欧氏投影法 | §1.4-1.5 |
| CG 在流形上不收敛 | Vector transport 实现有误 | 1.验证 \(\beta\) 系数公式 2.检查 transport 后向量长度是否保持 3.退化到 RGD 确认 | §1.3 |
| Trust-region 内循环不收敛 | Hessian 近似不准 | 1.用有限差分验证 Hessian-vector product 2.检查 retraction 是否二阶 3.增大 trust-region 半径 | §26 |
| 大规模问题内存溢出 | 存储了完整 Hessian | 1.改用 L-BFGS on manifold 2.只存近期梯度差 3.用截断 CG 避免显式 Hessian | §1.6 |
| SE-Sync 报"SDP 不 tight" | 噪声过大或数据关联错误 | 1.检查相对旋转的残差分布 2.降低噪声 3.加入鲁棒核 4.增大 Staircase 的 \(p\) | §24-25 |
| Shonan 在 \(p=3\) 就卡住 | 初始化太差 | 1.用 chordal relaxation 提供初始值 2.增大 trust-region 初始半径 3.检查图连通性 | §25 |
31. 跨章综合题 ⭐⭐¶
综合题 A(结合专题1切空间 + 本专题 Retraction):
在 Stiefel 流形 \(V_2(\mathbb{R}^4) = \{X \in \mathbb{R}^{4\times2} \mid X^\top X = I_2\}\) 上,考虑代价函数 \(f(X) = \operatorname{tr}(X^\top A X)\),其中 \(A\) 是对称正定矩阵。
- 写出 \(V_2(\mathbb{R}^4)\) 的切空间 \(T_X V_2 = \{\Delta \mid X^\top\Delta + \Delta^\top X = 0\}\)。
- 计算欧氏梯度 \(\nabla f = 2AX\),然后投影到切空间得到 Riemannian 梯度。
- 用 QR retraction 实现一步梯度下降:\(X_{\text{new}} = \operatorname{qf}(X - \alpha\operatorname{grad}f)\)。
- 解释为什么这个问题的全局最优解是 \(A\) 的最小两个特征值对应的特征向量(PCA 的几何解释)。
- 与专题1的正则值定理联系:解释为什么 \(V_2(\mathbb{R}^4)\) 是 \(\mathbb{R}^{4\times2}\) 中 \(f(X) = X^\top X\) 在 \(I_2\) 处的正则水平集。
综合题 B(结合本专题 + 机器人运动学):
一个 6-DOF 机械臂的末端位姿在 SE(3) 上,当前末端位姿为 \(T_{\text{current}}\),目标位姿为 \(T_{\text{target}}\)。
- 定义 SE(3) 上的代价函数 \(f(T) = \|\operatorname{Log}(T^{-1} T_{\text{target}})\|^2\)。解释为什么用 Log 距离而非 Frobenius 范数 \(\|T - T_{\text{target}}\|_F^2\)。
- 这个代价函数的 Riemannian 梯度是什么?(提示:与 Log 映射本身相关。)
- 如果用右扰动模型 \(T' = T \cdot \operatorname{Exp}(\delta\xi)\),一步 Riemannian 梯度下降的更新公式是什么?
- 讨论当 \(T_{\text{current}}\) 与 \(T_{\text{target}}\) 之间旋转角接近 \(\pi\) 时,优化可能出现的数值问题。
- 对比使用群指数映射 retraction 和分解 retraction 对 IK 收敛性的影响。
综合题 C(Retraction 选择的工程决策):
在一个有 10000 个位姿节点的 SLAM 后端中,每次迭代对所有节点的旋转分量执行 retraction。
- 估算使用 Rodrigues Exp(含三角函数)和 Cayley map(仅矩阵求逆)的每步迭代计算量差异。
- 如果要求 100ms 内完成 10 次迭代,哪种 retraction 更可能满足实时性要求?给出估算依据。
- 在什么情况下必须切换到 Rodrigues Exp?(提示:考虑步长大小和 Cayley 的覆盖范围限制。)
- (思考)分解 retraction 和群指数映射 retraction 之间的差异是几阶量?在一次 Gauss-Newton 迭代中,这个差异对最终收敛结果有影响吗?为什么?
- 比较 Rodrigues 指数映射和 Cayley retraction 在 \(\theta = 0.01, 0.1, 1.0, 2.5\) rad 处的 Frobenius 范数差异,验证差异随 \(\theta\) 增大的趋势。
- 证明 QR retraction 在 Stiefel 流形上的一阶正确性:令 \(g(t) = \operatorname{qf}(X + t\Xi)\),利用 QR 分解的隐函数定理论证 \(g'(0) = \Xi\)。
综合题 D(结合本专题 Retraction 理论 + 专题3 李群 + 专题4 Jacobian):
在 VIO 系统中,预积分因子连接两个关键帧 \(T_i, T_j \in SE(3)\)。优化器使用 Gauss-Newton 迭代,每步需要:(a) 在切空间中求解法方程得到增量 \(\delta\xi\);(b) 通过 retraction 更新位姿 \(T_i^+ = T_i \cdot \operatorname{Exp}(\delta\xi_i)\)。
- 说明这里使用的是哪种 retraction(群指数映射还是分解 retraction),并写出两者的公式差异。
- 预积分残差中出现了 \(J_r^{-1}\)(专题4内容),解释为什么 retraction 的选择会影响残差 Jacobian 中 \(J_r^{-1}\) 的精确值。
- 如果将群指数映射替换为 Cayley retraction,预积分残差的数值结果会改变吗?为什么?(提示:考虑残差本身使用 \(\operatorname{Log}\)。)
本章常见误解汇总¶
| 误解 | 正确理解 |
|---|---|
| "流形优化必须使用指数映射" | 一阶优化只需一阶 Retraction;QR/polar/Cayley 往往更快且数值更稳定 |
| "Riemannian 梯度下降就是先梯度下降再投影" | 正确顺序是先在切空间计算 Riemannian gradient(已是投影后的),然后经 Retraction 回到流形 |
| "李群 exp 和 Riemannian Exp 是同一回事" | 李群 \(\exp(tX)\) 是单参数子群生成元,Riemannian \(\mathrm{Exp}_x(\xi)\) 是测地线终点;仅在 bi-invariant metric 下重合 |
| "更新后归一化就是通用的 Retraction" | 归一化只适用于球面;对 Stiefel、Grassmann 等流形,不存在简单的"归一化"操作 |
| "Vector transport 在动量方法中不重要" | 欧氏空间中 \(v_k\) 和 \(\nabla f(x_{k+1})\) 在同一空间;流形上不然,必须将 \(v_k\) transport 到新切空间 |
| "Retraction 的二阶正确性对所有算法都必要" | 一阶 Retraction 对梯度下降已经足够;只有 Newton/trust-region 等二阶方法才需要二阶 Retraction |
| "商流形上可以直接做梯度下降" | 需要 horizontal lift 约束到水平子空间,否则会沿 fiber 方向浪费计算 |
总结¶
Retraction 理论是将欧氏优化算法"提升"到流形上的数学桥梁。对机器人工程师而言,这不是抽象的纯数学——GTSAM 的 retract 接口、Ceres 的 Manifold::Plus、SE-Sync 的可认证全局最优,底层都是 retraction 在工作。 学习路径建议以 Boumal 书 + EPFL 视频为主线(Bilibili 有完整搬运),Absil 书作参考,配合 Pymanopt/Geoopt 的编程实践。档位3 聚焦一阶 retraction 定义、常见例子、Riemannian gradient 和 RGD 算法,确保能独立实现球面和 SO(3) 上的优化;档位4 扩展到二阶方法、商流形和 Burer-Monteiro 理论,为理解 SE-Sync 的全局最优性证明打下基础。完成本专题后,进入专题3(李群)将拥有一个更成熟的视角:不再把 exp 当作唯一选择,而是看到它在 retraction 大家族中的特殊位置。
符号表¶
| 符号 | 含义 | 首次出现 |
|---|---|---|
| \(R_x\) | Retraction 映射,\(R_x: T_xM \to M\) | §14.1 |
| \(T_xM\) | 流形 \(M\) 在 \(x\) 处的切空间 | §12 |
| \(\mathrm{Exp}_x(\xi)\) | Riemannian 指数映射(测地线终点) | §15.1 |
| \(\exp\) | 李群指数映射(矩阵指数) | §15.2 |
| \(\operatorname{grad} f(x)\) | Riemannian 梯度 | §14.4 |
| \(\xi\) | 切空间中的增量向量 | §14.1 |
| \(\alpha\) | 线搜索步长 | §14.4 |
| \(DR_x(0_x)\) | Retraction 在零向量处的微分 | §14.1 |
| \(\operatorname{qf}(A)\) | QR 分解中的 Q 因子(QR retraction) | §综合题D |
| \(\mathcal{T}_{\xi}\) | 向量迁移(vector transport) | §本章常见误解汇总 |
| \(St(k, n)\) | Stiefel 流形 \(\{X \in \mathbb{R}^{n \times k} \mid X^\top X = I_k\}\) | §综合题A |