文章主要解决以下问题

1什么是diffuson

2.什么是噪声,噪声的作用

3.为什么去噪后可以预测轨迹

一.首先介绍扩散模型

一句话总结扩散模型本质:如何把“纯噪声”一步一步还原成“有结构的数据”

它先定义一个“破坏数据”的过程:把真实样本一点点加噪,最后变成近似高斯白噪声。
然后训练一个神经网络去学它的逆过程:从噪声开始,一步步去噪,最后生成样本。

所以你可以把它理解成:

  • 正向扩散:把图像/轨迹/语音慢慢“弄坏”
  • 反向去噪:学会怎么把它“修回来”

传统生成模型常常想“一次性”生成结果。
扩散模型不是,它是:

  1. 先从随机噪声开始
  2. 第一步去掉一点无意义噪声
  3. 再去掉一点
  4. 再修正一点结构
  5. 最后得到清晰结果

这带来一个很关键的优点:

  • 生成过程更稳定
  • 训练目标更简单
  • 多模态更自然

这也是为什么它在图像生成、视频生成、3D、分子生成、轨迹预测里都这么强。

二、噪声到底是什么

在轨迹 diffusion 里,噪声通常就是:

ε ~ N(0, I)

也就是一个和轨迹张量同形状的高斯随机变量。

如果未来轨迹是:x0: [B, 12, 2]

那噪声也是:ε: [B, 12, 2]

每个未来时刻、每个坐标维度,都会被加上随机扰动。

训练时不是“从噪声生成轨迹”,而是先拿到真实未来轨迹 GT。

设:

  • x0 = 真实未来轨迹
  • t = 随机采样的扩散步数
  • ε = 随机噪声

然后构造一个“被污染后的轨迹”:


这公式是什么意思

它的意思是:

  • t 很小,x_t 还很像真实轨迹
  • t 很大,x_t 基本接近纯噪声

所以 x_t 是一条 “不同脏乱程度的轨迹”

你可以这样理解:

t=0几乎就是真实轨迹

t=100真实轨迹还能勉强看出来一点

t=1000基本已经是一团随机点了

diffusion模型训练的目标不是预测轨迹,而是预测噪声,why?

当我们将加噪(即污染过的)轨迹,在某些条件下,喂给模型,其实是要模型猜这条轨迹哪些是噪声。所以模型的预测输出其实是噪声。训练的损失通常就是预测的噪声与真实加入噪声的差

三、为什么去噪可以得到轨迹

推理流程

Step 1:先初始化一条纯噪声轨迹

xT ~ N(0, I)
shape = [B, 12, 2]

这时候它根本不是轨迹,只是一堆随机数。

可以理解为:

  • 12 个未来时刻
  • 每个时刻一个 (x, y)
  • 但这些点毫无运动意义

Step 2:把它送进模型

模型看:

  • 当前随机轨迹 x_t
  • 历史观测条件 condition
  • 当前时间步 t

输出:

  • 这条“假轨迹”里面哪些成分是噪声

Step 3:去掉一部分噪声,得到更干净的 x_{t-1}

也就是:

xt → 预测噪声 → 去噪 → x(t-1)


Step 4:反复执行

T → T-1 → T-2 → ... → 1 → 0

最后得到:x0,这个 x0 就是最终生成的未来轨迹。

给一个超简版例子

假设未来只预测 3 帧,不是 12 帧。

真实未来轨迹:x0 = [(1,1), (2,2), (3,3)]

采样一个时间步 t,加噪后:xt = [(0.7,1.8), (1.2,2.5), (4.1,1.9)]

这时候模型看见:

  • xt:这条又歪又乱的“伪轨迹”
  • obs:过去轨迹一直朝右上移动
  • short_intent:接下来还会继续朝右上
  • goal:终点大概率也在右上

模型就会学会判断:

  • 第一帧 y 偏高了,是噪声
  • 第二帧 x 偏低了,是噪声
  • 第三帧整体方向不对,是噪声

然后逐步修回来。

最后采样结束,就得到一条平滑、方向合理、终点合理的轨迹。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐