深入探讨DeepSeek:多标记预测的奥秘

2025年02月21日 由 alex 发表 1527 0

本文中,我们将探讨DeepSeek如何在文本生成方面再次实现平衡——即在效率与质量之间找到平衡点。


背景

为了理解DeepSeek的多词预测,我们首先来仔细看看LLM是如何生成文本的。


下一个词预测

LLM通常采用自回归的方法来生成文本,即给定一系列先前的词,新的词将以逐个词的方式生成,通过预测最可能的下一个词。


例如,给定文本“The cat sat”,它将被标记为如下一系列词:


"The cat sat" -> ["The", "cat", "sat"]


每个词都有一个与其在词汇表中索引相对应的词ID,并且会通过使用这个索引在嵌入矩阵中查找,被映射到一个稠密向量。在大多数情况下,会向这个稠密向量添加一个位置嵌入,以形成将被大型语言模型(LLM)接收的嵌入。


Emb("The") = vector("The") + PositionalEncoding(1)
Emb("cat") = vector("cat") + PositionalEncoding(2)
Emb("sat") = vector("sat") + PositionalEncoding(3)


在通过大型语言模型(LLM)中的Transformer层之后,最后一层通常是一个线性投影,将每个嵌入向量映射回词汇表空间,然后通过一个Softmax函数输出词汇表上的概率分布。在我们这里的简单示例中,概率最高的词可能是:


P("on") = 0.7
P("under") = 0.3
...


因此,模型会选择最可能的词“on”,所以生成的文本将是:


"The cat sat on"


这个逐个词的过程将持续进行,直到达到最大长度或遇到EOS(句子结束)词。由于它在每一步只生成一个词,因此通常被称为下一个词预测,并且可以更正式地描述为:


2


其中

  • t表示第t个时间步。
  • x_{t:1}表示从x_1到x_t的过去词序列。
  • x_{t+1}是下一个未来的词。


从建模的角度来看,下一个词预测听起来非常自然,但它有一些局限性:

  • 首先,由于它需要顺序地一次处理一个词,因此无法并行化。
  • 此外,每次预测都需要一个完整的正向传播,使得训练和推理都非常低效,尤其是对于长文本的实时生成。


为了缓解这些局限性,提出了多词预测。


先前的多词预测方法

作者将下一个词预测扩展为多词预测机制:


3


其中,给定相同的输入序列,模型将通过单次正向传播生成从x_{t+1}到x_{t+n}的n个词。


需要注意的是,这并不意味着在单个Softmax产生的概率基础上同时选择n个词,因为Softmax不支持从单个概率分布中同时选择n个词。


这是因为Softmax是为分类分布设计的,它建模的是多个互斥选择中一个单一离散事件的概率。因此,Softmax在每个时间步只能生成一个词,要预测多个词,我们需要多个Softmax层,每个层专门用于生成一个单独的词。


出于这个原因,上述多词预测损失将首先被分解为一系列单词预测操作头,然后每个单词预测头将运行一个单独的Softmax来选择相应的词。


更具体地说,引入了一个中间潜在表示z_{t:1}来表示大型语言模型(LLM)中的隐藏表示,如下面的方程中所示:


4


这将输入序列x_{t:1}与输出序列解耦,使模型能够通过单次正向传播将x_{t:1}编码为z_{t:1},并在后续的所有生成过程中重复使用它。


之后,x_{t+n:t+1}和z_{t:1}之间的条件概率被进一步分解为n个独立的单步条件概率,每个都代表一个单词生成步骤,如蓝色高亮部分所示:


5


这一过程根据以下公式实现:


6


这也如下图所示,其中:

  • 共享的Transformer f_s,用于通过单次正向传播将x_{t:1}编码为z_{t:1}。
  • n个独立的输出头f_{h_i},实现为Transformer层,用于将中间隐藏表示z_{t:1}映射到x_{t+i}。特别地,第一个头(当i==1时)的输出可以视为下一个词预测头。
  • 共享的逆嵌入矩阵f_u,用于将x映射到词汇表大小的维度上,然后在其上应用Softmax以获取每个词的概率。


7


现在,让我们更深入地了解这个架构,特别是共享组件和独立组件背后的设计选择:

  • 共享f_s:如前所述,这使我们能够通过单次正向传播获得z_{t:1},以生成n个词,与下一个词预测相比,这提高了计算效率。
  • 共享逆嵌入矩阵f_u:这节省了参数预算,而对性能的影响不大,因为逆嵌入矩阵的维度为d×V,其中d是隐藏层维度,V是词汇表大小(通常为50~200K)。
  • 独立头:这是此架构中唯一的独立部分。如前所述,每个词需要一个单独的Softmax,因此我们无法共享所有组件。


使用独立输出头将n个词的生成过程解耦,使它们彼此独立。一方面,这实现了并行词生成,并可能提高训练效率。然而,独立生成词可能导致输出不连贯或不一致。此外,模型可能遭受模式崩溃,即倾向于生成通用、频繁的词,而不是细微差别的响应,从而降低了输出的多样性和丰富性。


DeepSeek的多词预测

如前所述,多词预测方法独立生成n个词,这可能导致输出不连贯,甚至模式崩溃。为了解决这个问题,DeepSeek通过保持每个词预测的完整因果链来实现其多词预测,如下图所示:


8


上图展示了三个生成步骤,分别称为主模型、MTP模块1和MTP模块2。


主模型的架构与我们在[3]中看到的非常相似,也包含三个主要构建块:

  • 共享嵌入层。
  • 独立Transformer块。
  • 以及一个共享线性输出头,类似于逆嵌入矩阵。


然而,从MTP模块1开始,差异就变得明显了,因为Transformer块的输入依赖于前一个词的表示。


更具体地说,第i个词的Transformer输入按以下方式获得:


9


其中:

  • k是MTP模块的索引。
  • h^{k-1}{i}是前一步的表示。
  • Emb(t{i+k})是第(i+k)个词的嵌入层输出。
  • RMSNorm算子对两个表示向量进行归一化,使它们的值更具可比性,并允许它们进行拼接。随后是一个拼接算子[·;·],它生成一个2d维的表示。
  • 最后,应用一个线性投影矩阵M_k,将维度从2d映射回d,使其准备好被Transformer处理。


在MTP模块之间引入依赖关系打破了[3]中的并行性,但也实现了更连贯的文本生成,使其更适合对话和推理等场景。


多词预测主要用于DeepSeek模型的训练,其中对每个MTP模块应用交叉熵损失,如下所示:


10


其中,t_{i}表示第i个位置的真实词,而p^{k}_{i}[t_i]是由第k个MTP模块给出的t_i的预测概率。


然后,将所有MTP损失的组合用作额外的训练目标:


11


在推理阶段,所有的MTP模块将被丢弃,仅使用主模型进行词预测。


推测解码

推测是一种旨在通过“先草拟后验证”范式加快自回归生成过程的技术[4, 5]:首先并行生成多个候选词,然后使用原始自回归(AR)模型对这些词进行验证或修正,如下图所示:


12


更具体地说,推测解码包括两个阶段:

  • 并行草拟:在推测解码中,不是使用原始自回归(AR)模型逐个生成词,而是并行生成词。
  • 批量验证:使用原始AR模型通过一次前向传递来验证草拟的词,根据需要接受或修正它们。


由于草拟的词可以被接受或拒绝,因此实际的加速效果主要取决于接受率:

  • 在理想情况下,所有K个草拟的词都被接受,从而使模型能够在一次前向传递中前进K步,实现K倍的加速。
  • 如果一些草拟的词被拒绝,生成过程仍然可以从某种加速中受益,因为只需要重新生成被拒绝的词,而不是整个序列。


换句话说,更高的接受率可以带来更大的加速。


评估

作者评估了他们的多词预测策略对训练和推理阶段的影响。


对训练性能的影响

为了评估他们的多词预测策略是否有利于模型训练,作者对两个不同规模的混合专家(MoE)模型进行了实验:

  • 较小的157亿参数模型,其中24亿参数被激活,在下表中以蓝色突出显示;
  • 以及一个较大的2287亿参数模型,其中209亿参数被激活,在下表中以绿色突出显示。


13


在两个模型上,他们比较了原始模型与增加了额外MTP模块的变体之间的性能,同时保持其他设置不变。在这个实验中,MTP模块在推理时被简单地丢弃,因此推理时间没有差异。


根据上表中的结果,在两种设置下,添加MTP都能在多个任务上带来整体更好的性能,证明了所提出的MTP策略的有效性。


对推理效率的影响

如前所述,在推理时,我们不必完全丢弃MTP模块,还可以将其与推测解码相结合来加快推理过程。


作者通过实验使用MTP技术预测接下来的两个词,并将其与推测解码相结合,观察到第二个词预测的接受率大约在85%到90%之间,这表明他们的MTP策略的生成质量始终可靠。


更重要的是,如此高的接受率使得将MTP与推测解码相结合在推理时实现了1.8倍的加速,这是以每秒处理的词数(TPS)来衡量的。


总结

本文探讨了DeepSeek的另一项关键架构创新——多词预测,突出了其在文本生成中平衡效率与质量的方法。


所有这些架构创新构成了DeepSeek模型的基础,使它们既高效又强大:

  • 多头潜在注意力在解码过程中优化内存使用的同时保持了模型性能。
  • DeepSeekMoE在混合专家(MoE)架构中更好地平衡了知识共享和专家专业化。
  • 无辅助损失的负载均衡在不牺牲主要训练目标的情况下确保了有效的负载均衡。


关键要点:

  • 大型语言模型(LLM)训练仍然存在许多未解之谜,新技术的引入往往会带来意想不到的负面影响。
  • 应对这些挑战既需要对现象进行全面分析,也需要对内部机制有深入的理解。
  • 解决方案并不总是复杂的——有时,简单的策略可能会出奇地有效。


文章来源:https://medium.com/data-science-collective/deepseek-explained-4-multi-token-prediction-33f11fe2b868
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消