前言

问题:尽管Encoder-Decoder结构听起来更复杂,能做更多的事情,但许多流行的模型(如 GPT)都只使用Decoder-Only结构,这样是否更好呢?

1、Decoder-Only 模型

Decoder和Encoder结构之间有什么区别?关键区别在于输入注意力是否(因果)被掩码mask掉。Decoder结构使用的是基于掩码mask的注意力。

设想我们有一个输入句子,“I like machine learning.”。对于基于掩码的因果注意力层来说,每个单词只能看到它的前一个单词。例如对于单词 "machine"来说,解码器只能注意到 “I like machine”,而编码器则能注意到整个完整的句子。

这一关键的区别使得编码器相关模型和解码器相关模型的训练大相径庭,因为任何带有编码器的模型都可以双向观察,因此在预测下一个单词时会 “作弊”

对于纯解码器模型来说,训练任务被称为因果语言建模目标,即根据之前看到的部分句子预测下一个单词/Token。这也是它唯一需要的目标!因为一切都可以改写成一个句子,比如翻译或其他任务。例如,“The translation from English to French for apple is pomme”,就是将翻译任务重新表述为因果语言建模任务。这样做的好处是,大多数情况下,我们不需要做太多处理,只需将从网页上收集到的句子喂入其中,就大功告成了。

2、Encoder-Decoder模型

然而,对于编码器-解码器模型来说,这就变得更加复杂了,因为我们需要处理编码器在看到 "未来 "句子时的 "作弊 "问题。因此,一项训练任务就是通过随机屏蔽输入句子或在输入句子中添加噪音来对序列进行去噪处理,这样编码器就无法通过看到所有答案来作弊,从而让解码器生成原始输入句子。

为了说明这一点,编码器会为每个输入Token生成一个隐藏状态,而每个隐藏状态都可以包含所有输入Token的信息。这些已编码的隐藏状态将传递给解码器使用。解码器将首先使用普通的纯解码器模型方法,即根据当前生成的标记使用掩码注意来预测下一个Token,然后在预测的下一个Token和所有输入编码隐藏状态之间进行交叉注意,以纳入双向上下文信息。

下图是 《Attention Is All You Need》中的图片,并附有解释。

搞定大语言模型Decoder-Only结构 VS Encoder-Decoder结构,收藏这一篇就够了!!_ai

编码器-解码器模型的第二类任务是序列-序列生成任务。这对于翻译和摘要等任务来说是很自然的,因为在这些任务中,输入序列与输出序列不同,编码器无法欺骗任务。“Translate apple to French” -> “pomme.”。但正如大家所看到的,在这种编码器-解码器结构中添加指令并不像纯解码器模型那样自然,而且构建训练数据也需要更多时间。

对于每种训练数据类型,我们都需要做一些繁重的工作来建立训练数据,因为我们有两个目标:含噪声序列到序列 和 序列到序列。

3、总结

总体而言,我们在基准测试中发现,增加的复杂性并不能证明所带来的好处。对于复杂结构和训练目标,编码器-解码器模型并不一定更好。一个流行的编码器-解码器模型是 T5,流行的纯解码器模型包括 LLaMA、Bard 和 ChatGPT。现实生活中的例子显示了简单因果语言建模目标的威力。

根据奥卡姆剃刀原理:

如果你有两个相互竞争的观点来解释同一现象,你应该选择更简单的观点。

我们应该更倾向于只使用解码器的模型结构。