CCG 09-08:几何深度学习、实现与检查
本页只解决一个问题
谱卷积、内在消息传递和输运损失分别使用了哪些几何结构?
本页是原长篇讲义的单概念版本。第一次阅读只追踪本页定义的对象;看见未掌握的前置符号时,先沿链接退回,不要跳过定义硬背结论。
开始前
- 模块前置入口:先修页面
- 本页所属模块:最优输运与几何深度学习
- 集中复习版:原长篇参考讲义
13. 几何深度学习中的三类结构
13.1 图 Laplacian 与谱卷积
离散 Laplace–Beltrami 广义特征问题:
特征函数是曲面上的 Fourier 基。谱滤波:
问题:不同曲面的特征基可能有符号、旋转和重特征空间不唯一,不能直接逐列对齐。
13.2 内在消息传递
图神经网络
若 使用测地距离、角度、平行移动等内在量,可减少对三维刚体姿态和网格嵌入的依赖。
但普通 message passing 只保证顶点置换等变,不自动保证旋转、Möbius 或重新参数化等变。
13.3 测度损失与生成模型
OT 可用于:
- 点云分布匹配;
- 形状生成的分布损失;
- domain adaptation;
- 特征分布对齐;
- unbalanced OT 处理质量不等或局部缺失。
需要区分:精确 OT、熵正则 OT、sliced Wasserstein、Chamfer distance 并不是同一个量。
14. 共形结构在神经网络中的作用边界
共形几何可提供:
- canonical domain:把不同形状映到球面、平面或双曲域;
- 角度稳定的局部坐标:定义卷积核方向;
- 内在 Laplacian:谱特征和扩散算子;
- Beltrami 场:把形变编码成空间分布的各向异性;
- 曲率和拓扑特征:跨网格分辨率的几何信号。
它不能自动解决:
- 语义对应;
- 对称形状上的唯一规范化;
- 不同拓扑间的双射;
- 噪声/缺失导致的拓扑错误;
- 离散化改变后的跨网格泛化。
15. Python:Sinkhorn 教学实现
import numpy as np
def sinkhorn(a, b, cost, epsilon=0.05, max_iter=5000, tol=1e-9):
"""教学实现;小 epsilon 时应改用 log-domain 版本。"""
a = np.asarray(a, dtype=float)
b = np.asarray(b, dtype=float)
C = np.asarray(cost, dtype=float)
if not np.isclose(a.sum(), b.sum()):
raise ValueError("source and target mass must match")
if np.any(a < 0) or np.any(b < 0):
raise ValueError("mass must be nonnegative")
K = np.exp(-C / epsilon)
u = np.ones_like(a)
v = np.ones_like(b)
for iteration in range(max_iter):
old_u = u.copy()
u = a / np.maximum(K @ v, 1e-300)
v = b / np.maximum(K.T @ u, 1e-300)
if np.max(np.abs(u - old_u)) < tol:
break
P = u[:, None] * K * v[None, :]
row_error = np.max(np.abs(P.sum(axis=1) - a))
col_error = np.max(np.abs(P.sum(axis=0) - b))
return P, {
"iterations": iteration + 1,
"cost": float(np.sum(P * C)),
"row_error": float(row_error),
"col_error": float(col_error),
}这个实现容易下溢。工程版应维护对偶 log-potentials:
并用 logsumexp 更新。
16. 研究/工程检查表
使用 OT 损失时必须报告:
- 代价 的定义与单位;
- 是否精确 OT、熵正则、unbalanced 或 sliced 近似;
- 与迭代停止条件;
- 边缘残差;
- 点数/网格分辨率变化下的稳定性;
- 是否对输入质量归一化;
- 梯度是否穿过迭代求解器,采用何种隐式/展开求导;
- 与 Chamfer、Hausdorff、普通 的对照实验。
使用共形参数域时还要报告:
- Möbius 自由度如何固定;
- 切缝和奇点位置;
- 共形/面积畸变分布;
- 不同 triangulation 下结果是否稳定。
读完必须能回答
- 不看公式,用自己的话回答开头的核心问题。
- 指出本页最重要公式中每个符号的类型:标量、向量、矩阵、映射还是集合。
- 找出定理成立所需的假设,并举一个删除某条假设后可能失败的例子。
- 对最小例子手算一遍;若本页含代码,再比较手算与程序输出。
前后课程
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/ccg/09-08-lesson/
更新于:2026年10月12日