← Back to blog

为什么GPT采用纯Decoder结构?

#llm

可以从以下几个维度来理解为什么只需保留Decoder,以及加上Encoder会有什么不同:

为什么只需要保留Decoder?

  • 任务特性的契合: 在最初的Transformer架构中,模型是为了机器翻译任务而设计的。编码器(Encoder)负责读取全部输入文本并将其编码为向量,而解码器(Decoder)则接收这些向量并逐词生成翻译后的输出文本。GPT(Generative Pretrained Transformers)模型专门针对生成式任务(Generative tasks),如文本续写、写代码等。
  • 自回归(Autoregressive)与单向处理: 解码器架构天然是一种自回归模型,它在生成每一个新词时,都会将前面已经生成的序列作为输入。为了做到这一点,解码器引入了因果注意力掩码(Causal Attention Mask)来隐藏未来的词元,确保模型只能根据过去的词来预测下一个词。这种从左到右的单向处理模式完美契合了文本生成的逻辑。
  • 架构的简化与“涌现能力”: 抛弃编码器实质上是对原始Transformer架构的一种极大简化。研究人员惊讶地发现,只要通过海量且多样化的数据训练这样一个简化的纯解码器模型来执行“预测下一个词”,模型就能产生涌现能力(Emergent behavior)。这意味着,哪怕没有明确被训练过,也没有使用专门处理翻译的编码器,GPT依然能“自动”学会并出色的完成诸如语言翻译等复杂的上下文任务。

如果加上Encoder会如何?

如果为GPT加上编码器,它就会回到原始的Transformer架构(Encoder-Decoder架构)。在这种架构下,模型处理信息的方式和适用场景会发生以下变化:

  • 信息处理方式改变: 模型不再是简单地从左到右续写文本。编码器会首先作为整体读取并处理全部的输入文本,并生成一个包含全局上下文信息的嵌入向量表示(在早期的RNN中这被称为隐藏状态或上下文向量)。随后,解码器再利用这个编码好的全局向量作为条件,来逐词生成输出。
  • 适用场景的转移: 带有Encoder的模型天然更适合序列到序列(Seq2Seq)的任务,比如将一段外语翻译成另一段外语,或者对一段长文本进行总结。资料中也提到,单独使用编码器的模型(如BERT)主要被用于“掩码词预测”(预测句子中间缺失的词),非常擅长文本分类、情感预测等需要双向理解全局上下文的任务。

总结来说,去掉Encoder是GPT在模型设计上的一种取舍。抛弃Encoder虽然失去了双向完整读取输入的能力,但换来了极度简化的架构。这种纯解码器架构配合海量数据进行简单的“下一个词预测”训练,最终被证明足以让模型理解复杂的语言规律,成为今天我们所看到的通用大语言模型(LLM)的基础。

逆向诅咒

在大模型研究中,“逆向诅咒”指的是:如果模型在训练集中学到了单向的陈述(例如“汤姆·克鲁斯的母亲是玛丽”),它往往无法回答逆向的问题(例如“玛丽的儿子是谁?”)。

其根源就在于:由于因果掩码和单向从左到右的训练目标,大语言模型学习到的是严格的单向序列概率(A后面跟着B)。因为它缺少了Encoder那种全局的、双向的上下文读取能力,导致它很难在内部向量空间中自动建立起A和B之间对称的双向逻辑映射。

GPT放弃Encoder而采用纯Decoder架构正是导致大语言模型产生这种现象的架构根源。

我们可以从以下几个机制来解释为什么纯Decoder架构会导致这种缺陷:

1. 单向、从左到右的自回归生成 资料指出,GPT架构被设计为一种专门用于单向(unidirectional)、从左到右处理的自回归模型。在生成每个新词时,它只能基于前面已经出现的序列进行预测。

2. 因果注意力掩码(Causal Attention Mask)的限制 为了确保模型只能根据过去的词预测下一个词,GPT的自注意力机制中引入了“因果注意力掩码”(也称为掩蔽注意力)。这种机制会强制屏蔽掉未来的词元,限制模型在处理任何特定词元时,只能关注当前和之前的内容。这与能够同时访问并双向理解整个输入序列的标准自注意力机制(即Encoder采用的方式)形成了鲜明对比。总结来说,正是因为舍弃了Encoder的双向处理能力,仅保留了带有因果掩码的Decoder,使得模型虽然获得了强大的文本续写和涌现能力,但也因此在底层机制上被“锁死”在了从左到右的单向逻辑中,这就是逆向诅咒的根源所在。