042、扩散语言模型Diffusion-LM原理剖析
在复现一个文本生成任务时,遇到了诡异的现象:模型前几个token生成得挺流畅,后面就开始胡言乱语,像是突然“失忆”了一样。检查了梯度、注意力权重、embedding分布,都没发现明显异常。直到把隐变量随时间的变化可视化出来,才看到问题——模型在去噪过程中,隐空间轨迹出现了不连续的跳变。这让我重新审视了手里这套Diffusion-LM的实现,发现对连续隐空间的离散化处理有个隐蔽的数值溢出问题。今天我们就拆开Diffusion-LM,看看这个把扩散过程用在离散文本上的方法,到底是怎么工作的。为什么要把扩散模型用在文本上?传统自回归模型(比如GPT系列)从左到右生成,每个token依赖前面所有token。这种链式依赖有两个麻烦:一是生成时无法并行,速度慢;二是错误会累积,前面生成错了后面基本没救。扩散模型在图像领域已经证明了它能生成高质量、多样化的样本,那能不能借来处理文本呢?难点在于文本是离散的。扩散模型需要在连续空间里加噪去噪,而token是离散的ID。Diffusion-LM的核心创新,就是在连续隐空间上做扩散,再用可学习的“往返接口”把离散文本映射到这个空间里来回转换。模型架构:三层设计第一层:Embedding层加强版普通Transformer的embedding层只是查表,这里需要更复杂的结构:class