总是阶段性地遗忘这一朴素,智慧,大道至简的思想,所以专门写下来方便以后直接回看自己的思路:
思路概览
目标
我们要得到一个真实的分布,
方法:
所有非gan系生成模型的算法:flow matching, ddpm, ae, vae, vq-vae, eq-vae…
问题:
我们永远没有办法获得理想中的完全真实的分布
补救方案:
我们要拟合真实分布,但是他存在于真实空间,高维,孤立,(存在于低维流形上),无法得到具体表达式,并进行似然估计。
1.引入联合分布
既然直接求解不行,我们借助条件分布与联合分布的关系。
引入隐变量空间
其中,
2. 通过积分得到边缘分布
其实就是全概率公式,只不过是因为是连续的,所以没有办法得到某一个点的概率(空间中单个点的概率永远是 0),所以采用积分的方法。 于是,边缘分布(宏观流向)其实就是所有条件分布(微观路径)的加权平均
VAE 的这个过程其实是一步走的,但是 Score matching 另辟蹊径,他不学习概率本身是多少,而是学习预测概率变化的趋势(梯度)。真实的概率分布是一座山的高度,Score function 就是山上每个位置的坡度方向和倾斜程度。当你顺着所有地方的坡度方向往上走,最终就能找到山顶。 关于 score function #todo
3. 框架:三种路径的逻辑收敛
非GAN系模型的核心区别,其实就在于如何处理这个积分以及如何定义
变分推断路径(VAE)
具体可见 vae
迭代投影路径(Diffusion / Flow Matching)
逻辑 :将单一的
扩散
将前向加噪过程看作一个马尔可夫链。前向每一时间
在逆向去噪生成过程,根据贝叶斯公式,
训练时
直接从 
推理时
迭代投影
- 从高斯分布中采样一个纯噪声
- 循环迭代
- 模型预测出噪声
- 从
中减去预测出的噪声,得到 的均值 - 注入随机性:为了最终能拟合出一个分布,每一步按照比例加回一点随机噪声(除了最后一步)
权重应该是 和
- 模型预测出噪声
Flow Matching
Flow 的逻辑更像捏橡皮泥,扩散是拆楼建楼,Flow 的是流形空间的平滑扭曲。
核心逻辑
变量代换定理:假如有一个简单分布
通俗理解:如果你把一块橡皮筋(概率质量)从 z 拉伸到 x,某一点的密度会变稀疏或浓缩,而这个拉伸倍率就是雅可比行列式的模。 这就像是在一个由模型定义的河流中漂流,模型给出了河流每一处的流向和流速,你顺流而下,终点必然是真实数据流形。
具体操作
现代 flow 框架,不在纠结于找复杂的解析函数
- 构造轨迹:
- 直接插值定义从噪声
到 数据 的直线路径,或者其他任何平滑路径。
- 直接插值定义从噪声
- 求速度场
1. 对时间
求导, 这一点的速度就是 - 模型训练:
。假设数据是 1 维的,那么可以把速度场看作一个平面直角坐标系,模型预测在这个时刻应该以什么矢量(方向、速度)移动,才能在 的时候到达真实数据。
- 生成阶段(ODE)
- 从
出发 - 操作:调用一个 ODE 求解器(如欧拉法(
用的就是)或者 runge-kutta) - 逻辑流:
- 从
Diffusion vs Flow-matching
| 维度 | 扩散模型 (Diffusion) | 流匹配 (Flow Matching) |
|---|---|---|
| 数学底色 | 统计推断、贝叶斯定理 | 连续介质力学、微分几何 |
| 生成机制 | 逐步去噪(从混乱中寻找秩序) | 概率搬运(将质量从 A 移动到 B) |
| 确定性 | 具有随机性(每步都在采样) | 高度确定(给定起点,轨迹唯一) |
| 效率 | 慢(需要极多步迭代) | 快(轨迹平直,少量步数即可精确积分) |
- DDPM 在逆向生成的时候,数学上是弯曲且有随机性的,但是 FM (基于最优传输)几乎就是直线。
- 后果就是只需要 5 步就能得到精确结果,对机器人实时控制至关重要。
- 确定性 ODE 映射,产生的动作序列,是会更加丝滑的
Energy Based Model
#坑 https://gemini.google.com/share/a37889f577d4
#坑 人家已经写过了,先看看人家的再写自己的吧