扩散模型中的正弦嵌入用于将时间步编码为连续向量表示,从而帮助模型理解去噪过程的进展。这些嵌入使用正弦和余弦函数将离散时间步(例如,1000步扩散过程中的 t=0 到 t=1000)转换为高维向量。关键思想是创建时间的平滑、周期性表示,使神经网络能够比原始整数时间步更有效地处理。例如,时间步 t
被映射到一个向量,其中每个维度在指数增长的频率的正弦和余弦值之间交替,从而允许模型捕获细粒度和广泛的时间模式。
实现通常涉及两个步骤。首先,使用频率的几何序列将标量时间步 t
投影到更高维度的空间中。对于嵌入中的每个维度 i
,频率计算为 1/(10000^(i/d))
,其中 d
是总嵌入维度。正弦函数应用于结果向量的偶数索引,余弦函数应用于奇数索引。这为每个时间步创建了一个独特的模式,同时保持相邻步骤之间的连续性。例如,在 PyTorch 中,这可以使用张量运算来实现,以生成频带和元素级三角函数。最终的嵌入通常通过线性层或 MLP,使其与模型的隐藏维度对齐,然后再添加到扩散模型中常用的 U-Net 架构的特征图中。
这些嵌入至关重要,因为扩散模型依赖于根据当前时间步来调节每个去噪步骤。例如,在像 Stable Diffusion 这样的文本到图像模型中,时间嵌入有助于 U-Net 区分早期步骤(生成粗略结构)和后期步骤(细化细节)。与可能难以推广到看不见的时间步的学习嵌入不同,正弦方法避免了时间步之间的突变。通过提供结构化但灵活的时间表示,正弦嵌入使模型能够平稳地适应整个扩散过程中的行为,从而提高训练稳定性和生成质量。