💡

文章摘要

从自回归到扩散,理解语言模型的新范式。详解扩散语言模型的原理、架构设计、训练方法以及与 Transformer 的对比分析。

1语言模型的范式之争

语言模型的演进经历了三个核心范式。第一代范式是 n-gram 统计语言模型,通过统计词序列的频率来预测下一个词,简单但无法捕获长距离依赖。第二代范式是神经网络语言模型,从 RNN/LSTM 到 Transformer,通过自回归(Autoregressive)方式逐 token 生成文本,GPT 系列便是这一范式的巅峰之作。自回归模型的优势在于训练目标简洁(预测下一个 token),且天然适配因果推理场景。然而,自回归也存在固有的缺陷:生成过程是严格串行的,无法并行化,导致推理速度受限;同时,单向因果掩码使得模型在生成时无法"看到"未来的上下文,对于需要全局规划的任务(如代码补全、长文编辑)并不理想。第三代范式正在浮现:扩散语言模型(Diffusion Language Model)。2026 年 Google 开源的 DiffusionGemma 成为这一方向的标志性成果——基于 4090 单卡即可运行,每秒可生成 1000 token 以上,打破了自回归模型对语言生成的垄断。扩散语言模型的核心思想是将扩散模型的逐步去噪机制迁移到文本空间:从一段随机噪声(或全 [MASK] 序列)出发,经过多步去噪逐步生成连贯文本。与自回归的"从左到右逐个生成"不同,扩散模型是"全局同时生成",天然支持并行解码

图表加载中…

💡 一句话理解

扩散语言模型不是要取代自回归模型,而是提供一种互补方案——在需要高速推理、全局一致性、非因果生成的场景中具有独特优势。

2扩散模型为何能用于文本

扩散模型最初是为连续数据(图像、音频)设计的。将扩散模型用于离散的文本空间,最大的挑战在于:高斯噪声加在浮点向量上是有意义的,但加在离散的 token 上却没有自然定义。一个 token 是词汇表中的索引(如 "hello"=2345),你不能给它加 0.5 的高斯噪声。解决这一矛盾有三种技术路线路线一:连续嵌入空间扩散。将每个 token 映射为高维嵌入向量(如 1536 维),在嵌入空间中执行标准的连续扩散过程。去噪完成后,将最终的嵌入向量映射回最近的 token。这种方法的优势是可以直接复用现有的扩散模型架构(U-Net、DiT),但嵌入空间中的几何距离与语义距离并不完全对齐,可能导致"语义跳跃"。路线二:离散扩散(D3PM)。直接在离散 token 空间定义扩散过程——每一步以一定概率将当前 token 替换为词汇表中的其他 token。转移矩阵大小为 V×V(V 为词汇表大小),对于 256K 词表,矩阵有 655 亿元素,计算不可行。路线三:吸收扩散(Absorbing Diffusion。这是目前最成功的方案。前向过程中,token 以一定概率被「吸收」为 [MASK] 标记(而非替换为随机 token)。反向过程学习在给定部分掩码的序列中,恢复被掩码的 token吸收扩散巧妙地利用了掩码语言模型(如 BERT)的训练目标——BERT 本质上已经在做类似的事情:给定上下文,预测被掩码的 token。2026 年的关键突破在于:研究者发现通过改进的分数熵目标函数(Score Entropy)和时间调度策略,吸收扩散在语言建模困惑度上已经接近甚至部分超越自回归模型。

图表加载中…
python
# 吸收扩散前向过程示意
# 每一步以 p 概率将 token 吸收为 [MASK]
import torch

def absorbing_forward(x, t, T, vocab_size):
    """
    x: [batch, seq_len] token indices
    t: 当前时间步
    T: 总时间步数
    """
    mask_token = vocab_size  # [MASK] 的索引
    batch, seq_len = x.shape
    
    # 吸收概率随时间线性增长
    p_absorb = t / T  # t=0时不吸收, t=T时全部吸收
    
    # 为每个位置独立决定是否吸收
    absorb_mask = torch.rand(batch, seq_len) < p_absorb
    
    x_noisy = x.clone()
    x_noisy[absorb_mask] = mask_token
    
    return x_noisy, absorb_mask

# 示例:对一句话执行逐步吸收
sentence = torch.tensor([[10, 20, 30, 40, 50]])  # 5个token
for t in range(6):
    noisy, mask = absorbing_forward(sentence, t, 5, vocab_size=1000)
    print(f"t={t}: {noisy.tolist()}, 吸收率={mask.float().mean():.1%}")

3扩散语言模型的核心架构

扩散语言模型的架构设计围绕一个核心问题展开:用什么网络来学习去噪分布?自回归模型的答案是 Transformer Decoder(因果掩码的自注意力)。扩散语言模型的答案更加多样化。DiT(Diffusion Transformer)架构是目前扩散语言模型的主流选择。DiT 将输入序列(带噪声/掩码的 token 嵌入)与时间步 t 的嵌入拼接,通过标准 Transformer 编码器(非因果)处理,输出每个位置的去噪预测。与自回归 Transformer 的关键区别在于:DiT 使用双向注意力(Bi-directional Attention),每个位置都能看到整个序列。这意味着模型在生成第 i 个 token 时,可以同时参考第 i+1、i+2 个位置的上下文信息——这是自回归模型无法做到的。DiffusionGemma 的具体设计(2026 年 Google 开源):基于 Gemma 模型的权重初始化,将 Decoder 的因果掩码替换为时间相关的噪声调度。训练时,模型同时学习多个时间步的去噪目标;推理时,从全 [MASK] 序列出发,逐步去噪直到收敛。关键创新在于「令牌预测头」(Token Prediction Head)的设计——模型在每个时间步对每个位置输出词汇表上的概率分布,通过采样或贪心选择更新该位置的 token并行解码是扩散语言模型的最大优势。自回归模型生成 N 个 token 需要 N 次前向传播(串行),而扩散模型可以在 K 步内完成(K << N),每一步更新所有位置。当 K 远小于序列长度 N 时,推理速度提升可达数倍至数十倍。2026 年的实测数据显示,DiffusionGemma 在 4090 单卡上达到每秒 1000+ token 的吞吐量,远超同等规模自回归模型的 50-100 token/s。

python
# 扩散语言模型推理流程(简化版)
import torch
import torch.nn as nn

class DiffusionLM(nn.Module):
    def __init__(self, vocab_size, d_model, n_layers, max_seq_len):
        super().__init__()
        self.vocab_size = vocab_size
        self.embedding = nn.Embedding(vocab_size + 1, d_model)  # +1 for [MASK]
        self.time_embedding = nn.Embedding(1000, d_model)  # T=1000
        self.transformer = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model, nhead=8),
            num_layers=n_layers
        )
        self.pred_head = nn.Linear(d_model, vocab_size)
    
    def forward(self, x_noisy, t):
        """
        x_noisy: [batch, seq_len] 带噪声/掩码的token序列
        t: [batch] 当前时间步
        """
        # 嵌入
        x_emb = self.embedding(x_noisy)  # [B, S, D]
        t_emb = self.time_embedding(t)   # [B, D]
        
        # 时间步信息广播到每个位置
        x_emb = x_emb + t_emb.unsqueeze(1)
        
        # Transformer 编码(双向注意力)
        x_enc = self.transformer(x_emb.transpose(0, 1)).transpose(0, 1)
        
        # 预测每个位置的 token 分布
        logits = self.pred_head(x_enc)  # [B, S, V]
        return logits

def generate(model, seq_len, steps=50, temperature=1.0):
    """从全 [MASK] 序列开始,逐步去噪生成文本"""
    batch_size = 1
    mask_token = model.vocab_size  # [MASK] 索引
    
    # 初始化:全 [MASK]
    x = torch.full((batch_size, seq_len), mask_token, dtype=torch.long)
    
    for t in range(steps, 0, -1):
        t_tensor = torch.full((batch_size,), t)
        logits = model(x, t_tensor)
        
        # 采样:带温度控制的 softmax
        probs = torch.softmax(logits / temperature, dim=-1)
        x = torch.multinomial(probs.view(-1, model.vocab_size), 1)
        x = x.view(batch_size, seq_len)
    
    return x

4训练目标:从分数匹配到熵最小化

扩散语言模型的训练目标是理解其能力的关键。连续扩散模型的目标函数是噪声预测的均方误差(MSE):模型学习预测每一步加入的噪声 ε,损失为 ||ε - ε_θ(x_t, t)||²。这个目标简洁优雅,但只适用于连续空间。扩散语言模型需要适应离散空间的训练目标。吸收扩散方向最重要的理论贡献是分数熵(Score Entropy)目标函数。其核心思想是:将扩散过程建模为连续时间的马尔可夫链,训练目标是最小化真实转移速率与模型预测速率之间的 KL 散度。具体地,对于每个被掩码的位置 i,模型需要预测该位置的真实 token损失函数为交叉熵:L = -Σ_i log p_θ(x_i | x_{\mask}, t),其中 x_{\mask} 表示除位置 i 外所有被掩码的序列。这个形式与 BERT 的掩码语言模型(MLM)目标完全一致——这意味着预训练好的 BERT 权重可以直接迁移到扩散语言模型的初始化中。2026 年的进一步突破在于混合训练策略:先在大规模语料上训练标准 MLM(类似 BERT),再将模型微调为扩散语言模型。这种做法的优势在于:第一,充分利用了已有的 MLM 预训练基础设施;第二,MLM 阶段学习到的双向上下文表示能力,恰好是扩散模型所需要的;第三,微调成本远低于从头训练。DiffusionGemma 正是采用了这一策略——基于 Gemma 的预训练权重,仅用数天微调就达到了与自回归模型可比的性能。

图表加载中…

⚠️ 常见踩坑

扩散语言模型在生成质量上仍略逊于顶级自回归模型(GPT-4、Claude 4)。当前更适合对推理速度要求高、对极致质量要求略低的场景。

5推理加速:并行解码的核心机制

扩散语言模型最令人瞩目的特性是推理加速潜力。自回归模型生成一个长度为 N 的序列需要 N 次前向传播——每次只能生成一个 token,然后将其作为下一次生成的输入。这是一个严格的串行过程。扩散语言模型打破了串行约束。其推理过程分为 K 步(K 远小于 N),每一步同时更新序列中的所有位置。假设 N=1000 个 token 的序列,自回归需要 1000 次前向传播,而扩散模型只需 50-200 步,每一步处理全部 1000 个位置。推理速度提升的核心公式:加速比 ≈ N / (K × 并行开销)。对于 N=1000、K=50 的情况,理论加速比可达 20 倍。实际加速比受以下因素影响:第一,每步计算的并行效率——GPU 上同时处理 1000 个位置的注意力计算比逐个处理更高效,因为可以充分利用 GPU 的并行计算单元;第二,收敛所需的步数 K——不同任务和模型需要的 K 不同,简单文本可能只需 20-30 步,复杂推理可能需要 100+ 步;第三,自一致性校验成本——扩散模型生成的 token 之间可能存在不一致性,需要在推理过程中加入一致性检查,增加额外开销。DiffusionGemma 的加速实践:通过「预测性去噪」(Predictive Denoising)技术,模型在前几步快速确定高置信度的 token,后续步骤仅更新不确定的位置。这使得实际推理步数可以从 50 步降至 20-30 步,进一步提升了吞吐量。实测数据(2026 年):4090 单卡、1000 token 序列、DiffusionGemma 达到 1000+ token/s,而同等规模自回归模型约为 50-100 token/s。

python
# 预测性去噪推理(简化版)
# 高置信度token提前锁定,后续步骤只更新不确定的位置

def predictive_denoising(model, seq_len, steps=50, conf_threshold=0.95):
    """
    预测性去噪:高置信度位置提前锁定
    """
    mask_token = model.vocab_size
    x = torch.full((1, seq_len), mask_token, dtype=torch.long)
    locked = torch.zeros(seq_len, dtype=torch.bool)  # 记录哪些位置已锁定
    
    for t in range(steps, 0, -1):
        if locked.all():
            break  # 所有位置都已确定,提前结束
        
        t_tensor = torch.full((1,), t)
        logits = model(x, t_tensor)  # [1, S, V]
        probs = torch.softmax(logits, dim=-1)
        
        # 获取每个位置的最大概率
        max_probs, candidates = probs.max(dim=-1)  # [1, S]
        
        # 锁定高置信度位置
        new_locked = max_probs[0] > conf_threshold
        locked = locked | new_locked  # 累积锁定
        
        # 更新token:仅更新未锁定的位置
        x[0, ~locked] = candidates[0, ~locked]
        
        # 已锁定位置的token不再变化
        x[0, locked] = x[0, locked]
    
    return x

6扩散 vs 自回归:全面对比

扩散语言模型与自回归模型的对比是理解两者适用场景的关键。生成质量方面,自回归模型目前仍领先。GPT-4、Claude 4 等顶级自回归模型在复杂推理、代码生成、创意写作等任务上表现优异,这得益于其因果生成方式天然适配人类语言的顺序特性。扩散语言模型在生成质量上仍有差距,但在特定场景下表现出色:文本编辑(非因果修改)、并行补全(同时生成多个位置)、可控生成(通过引导函数约束全局输出)。推理速度是扩散模型的杀手级优势。自回归的串行生成导致延迟与序列长度成正比,而扩散模型的并行解码使得延迟主要由步数 K 决定,与序列长度 N 关系较小。对于长文本生成(如万字长文、长代码文件),扩散模型的速度优势更加显著。训练成本方面,扩散模型具有独特优势。自回归模型需要在大规模语料上从头训练,而扩散语言模型可以直接复用已有的 MLM 预训练权重(如 BERT、RoBERTa),微调成本大幅降低。这意味着中小团队可以利用开源 MLM 权重快速构建扩散语言模型,而无需从头训练

维度自回归模型扩散语言模型备注

生成方式

逐token串行

全局并行

扩散模型天然并行

推理速度

50-100 tok/s

500-1000+ tok/s

4090实测数据

生成质量

极高(SOTA)

高(略逊自回归)

差距在缩小

训练成本

极高(从头训练)

中(可复用MLM权重)

BERT权重可直接迁移

上下文利用

单向因果

双向全局

扩散模型可看到全文

长文本生成

延迟累积

延迟恒定

N越大优势越明显

可控生成

需额外引导

天然支持引导函数

扩散模型更易控制

生态成熟度

成熟(GPT/Claude等)

新兴(2026起步)

工具链待完善

7扩散语言模型的典型应用场景

扩散语言模型虽然仍处于早期阶段,但已经在多个场景中展现出独特价值。场景一:文本编辑与重写。自回归模型修改一段已有文本时,需要重新生成整个序列(或至少从修改点之后的部分)。扩散模型可以直接对已有文本的指定区域施加掩码,仅更新被掩码的部分,同时保持其他区域不变。这种"局部编辑"能力是自回归模型难以原生支持的。场景二:代码补全与重构。在 IDE 中,开发者经常需要同时补全多处代码——函数参数、变量名、注释等。扩散模型可以并行生成所有缺失部分,确保它们之间的一致性。场景三:多语言翻译。翻译任务本质上是源语言到目标语言的映射,扩散模型可以同时生成整个翻译结果,而非逐词生成。全局生成使得翻译结果在语法和语义上更加连贯。场景四:可控文本生成。通过设计引导函数(guidance function),可以在扩散过程的不同阶段施加约束——例如,确保生成的文本包含特定关键词、遵循特定格式、避免敏感内容。扩散模型的逐步去噪特性使得这些约束可以在不同粒度上灵活施加。场景五:低资源部署。扩散语言模型可以复用 MLM 权重,这意味着在算力有限的场景下,团队可以使用较小的 MLM 模型(如 BERT-base,110M 参数)作为基础,微调为扩散语言模型,而无需训练大型自回归模型(动辄数百亿参数)。

图表加载中…

8技术挑战与局限性

扩散语言模型面临的核心挑战不容忽视。挑战一:生成质量的天花板扩散模型的逐步去噪过程本质上是概率性的,每一步的去噪决策都可能引入误差。这些误差在多步累积后,可能导致生成的文本在语法或逻辑上出现不一致。自回归模型的因果生成虽然慢,但每一步都基于已生成的完整前文,错误累积更少。挑战二:评估指标的不完善。自回归模型的评估体系已经非常成熟(困惑度、BLEUROUGE、人工评估),而扩散语言模型的评估仍在发展中。如何公平比较两种范式的生成质量,学术界尚未达成共识。挑战三:生态工具链的缺失。自回归模型拥有成熟的生态——LangChainLlamaIndexvLLM 等工具链都是围绕自回归范式设计的。扩散语言模型需要全新的推理引擎、微调工具、部署框架,这些目前都处于早期阶段。挑战四:长程依赖建模扩散模型的双向注意力虽然提供了全局视野,但在处理超长序列(10K+ token)时,注意力计算复杂度为 O(N²),与自回归模型面临同样的扩展性挑战。线性注意力Flash Attention 等优化技术在扩散模型中的应用尚不成熟。

⚠️ 常见踩坑

扩散语言模型在 2026 年仍处于快速发展期,不建议在生产环境中将其作为唯一的生成方案。建议与自回归模型结合使用,根据场景选择最优方案。

9未来趋势:扩散与自回归的融合

最有前景的方向不是扩散与自回归的对立,而是两者的融合混合架构正在成为新的研究热点。Google 的多模态模型系列(如 Gemini,2026 年)在不同模态上采用了不同的生成方式:文本生成使用自回归,图像和视频生成使用扩散模式,两种模式共享底层的多模态表征层。另一种融合思路是「自回归初始化 + 扩散精修」:先用自回归模型快速生成粗略文本,再用扩散模型对关键部分进行精修。这种方案结合了自回归的高质量生成和扩散的并行编辑能力。令牌级混合是更激进的方案:在同一个模型中,部分 token 使用自回归方式生成(如关键推理步骤),部分 token 使用扩散方式并行生成(如填充描述性文本)。模型自动决策每个 token 的生成方式,实现质量与速度的最优平衡。2026 年下半年,预计会有更多融合方案涌现,最终目标不是「谁取代谁」,而是「各取所长」

图表加载中…

10实战:用 DiffusionGemma 生成文本

DiffusionGemma 是 Google 在 2026 年开源的扩散语言模型,支持单卡 4090 运行。以下是概念性的使用指南。注意:以下代码为示意性伪代码,实际 API 请参考官方文档。 第一步:环境准备。安装必要的依赖库,确保 GPU 驱动版本满足要求(CUDA 12.1+)。第二步:加载模型。DiffusionGemma 提供多种尺寸(2B、7B),单卡 4090 推荐 2B 版本。模型权重可从 HuggingFace 下载。第三步:配置推理参数。关键参数包括:推理步数(steps,默认 50)、温度temperature,默认 1.0)、top-p(默认 0.9)。第四步:生成与后处理。DiffusionGemma 支持文本生成、文本编辑、翻译等多种任务模式。

bash
# 环境准备(示意,实际安装方式请参考官方文档)
pip install torch transformers accelerate
# pip install diffusion-gemma  # 包名以官方文档为准

# 验证 GPU 可用性
python -c "import torch; print(torch.cuda.is_available())"
python
# DiffusionGemma 使用示意(伪代码,非可运行)
# 实际 API 请参考 https://github.com/google-deepmind/diffusion-gemma

# from diffusion_gemma import DiffusionGemmaPipeline  # 包名以官方为准

# 加载模型
# pipeline = DiffusionGemmaPipeline.from_pretrained(
#     "google/diffusion-gemma-2b",
#     torch_dtype=torch.float16,
#     device_map="auto"
# )

# # 文本生成
# result = pipeline.generate(
#     prompt="人工智能的未来发展趋势是",
#     max_length=256,
#     steps=50,
#     temperature=0.8,
#     top_p=0.9,
#     guidance_scale=1.5
# )
# print(result.text)

# # 文本编辑
# edit_result = pipeline.edit(
#     text="...",
#     mask="...[MASK]...",
#     steps=20
# )

11与本文相关的知识点

要深入理解扩散语言模型,建议先掌握以下基础知识:扩散模型图像生成(genai-001)——理解扩散模型的前向/反向过程、DDPM/DDIM 算法,这是扩散语言模型的理论基础。Transformer 架构(llm-001)——扩散语言模型的核心组件是 Transformer 编码器,理解自注意力机制是必要的。掩码语言模型 BERT(nlp-002)——吸收扩散的训练目标与 BERT 的 MLM 目标一致,理解 BERT 有助于理解扩散语言模型的训练过程。自回归语言模型(nlp-008)——对比分析的参照对象,理解自回归的优缺点才能理解扩散模型的互补价值。离散扩散 SEDD(genai-010)——分数熵目标函数的理论基础,是扩散语言模型的核心训练方法。

12扩展阅读

论文推荐Diffusion-LM(Li et al., 2022)——扩散文本生成的开山之作;SEDD(Austin et al., 2023)——离散扩散的分数熵目标函数;DiffusionGemma(Google, 2026)——开源扩散语言模型的技术报告;AR-Diffusion(2024)——自回归与扩散的统一框架。开源项目:HuggingFace Diffusers 库已支持扩散文本模型;DiffusionGemma 官方仓库提供训练和推理代码;AR-Diffusion 开源实现。工具链进展vLLM 团队正在适配扩散模型推理引擎;LangChain 开始探索扩散语言模型的 Agent 集成。

💡 一句话理解

扩散语言模型是 2026 年最值得关注的技术方向之一。如果你正在构建 AI 应用,建议同时关注自回归和扩散两条技术路线,根据实际需求选择最优方案。