跳转到主要内容
Chal1ce blog

大语言模型的架构

带大家了解现在流行的一些大模型的架构

大语言模型的架构

下面我来介绍一下大语言模型的架构,下个月月尾之前应该会出一篇关于LLM代码的文章,教大家如何从头用Python实现一个大语言模型,包括分词器、模型各层实现、优化器、编码解码、训练推理等等。

  • 基于transformer的架构
  • 新型架构(mamba、RWKV、RetNet、Hyena等等)

基于 Transformer 的架构

首先先来介绍一下基于transformer的大语言模型架构,在预训练语言模型的时代,预训练 + 微调的方式成为了自然语言处理领域的主流方法。这个方法背后有几个非常重要的架构,它们都是基于大规模数据进行预训练的,然后通过微调来适应特定任务。

首先,有BERT为代表的这种基于**编码器(Encoder-only)**的架构,它专注于理解文本的含义,特别擅长处理自然语言理解类的任务,比如问答、情感分析等。

然后是GPT为代表的一系列模型,它们采用了**解码器(Decoder-only)**架构,专注于生成文本,擅长写作、对话等任务。GPT 的设计让它特别适合进行生成任务,因为它通过预测下一个词来不断生成新的文本。更进一步来说,解码器架构还可以细分为两个变种架构,包括因果解码器(Causal Decoder)架构和前缀解码器(Prefix Decoder)架构

最后还有T5,它使用了**编码器-解码器(Encoder-decoder)**架构,这种设计让它既能理解输入的文本,又能生成输出的文本。T5 因此能够同时处理理解和生成两类任务,具有很大的灵活性。

今天我们来聊聊自然语言处理领域里常见的三种语言模型架构:Encoder-decoderCausal LMPrefix LM,它们每种架构都有不同的特点和应用场景,适用于不同的任务。让我们简单易懂地拆解一下这三种架构,看看它们是如何工作的,为什么每种都有它的优势和不足。

1. Encoder-decoder:理解+生成的组合

首先说说Encoder-decoder架构,这种架构可以说是最传统也是最经典的结构。它有两个主要部分:编码器(Encoder)解码器(Decoder)。简单来说,编码器负责“理解”输入的内容,而解码器则负责“生成”输出的内容。

比如你要做机器翻译,假设你想把英文翻译成中文。编码器首先接收英文句子,并把它转化为机器能理解的“上下文向量”,这是一个抽象的表示,里面包含了原始句子的所有信息。然后,解码器会根据这些信息生成中文句子。

在这个过程中,编码器会对输入的每个词(或者叫token)进行双向的自注意力(self-attention)。什么意思呢?就是说,编码器不仅仅是看当前词,还会关注到句子中其它所有的词,甚至是反过来看。这样,模型能理解每个词的上下文关系,从而获得更准确的含义。

这种架构非常适合那些需要处理理解+生成任务的应用,比如机器翻译、文本摘要、对话生成等。比如谷歌的T5和亚马逊的AlexaTM都使用了这种架构。

优点

  • 双向编码的方式让它对输入的理解更加全面。
  • 特别适合那些理解型任务,例如文本分类、实体识别等。

缺点

  • 在处理长文本生成任务时,Encoder-decoder的表现通常不如Causal LM,训练起来效率也较低。

2. Causal LM:从左到右生成文本

接下来是Causal LM,这类架构就更加专注于文本的生成任务。它使用了Decoder-only的结构,编码和解码器其实是共享同一个网络的。Causal LM的特点是:它单向生成文本,也就是说,它从左到右依次生成每个词。

举个例子,假设你让模型生成一句话:“今天的天气很好”。模型会先生成“今天”,然后根据“今天”来预测下一个词“的”,接着再根据“今天的”预测下一个词“天气”,以此类推,直到生成完整的句子。

这种单向生成的方式意味着模型只会看当前词之前的所有词,而不看之后的词。所以,它的自注意力是单向的,只关注过去的内容。

Causal LM架构的代表性模型有GPT-3(OpenAI的模型)、PaLM(谷歌的模型)、OPTLLaMA(Meta的模型)等等。

优点

  • 特别适合做文本生成任务,像写文章、对话生成等,效果通常很好。
  • 由于架构简单,扩展性更好,能更容易地进行模型的扩展和优化。
  • Zero-shot能力强:也就是没有经过专门训练的情况下,它也能处理一些没有见过的任务。

缺点

  • 对于一些需要深度理解和推理的任务,Causal LM可能不如Encoder-decoder那么强大。

3. Prefix LM:两者的折中

最后是Prefix LM,它有点像Encoder-decoderCausal LM的折中。它基本上继承了Causal LM的结构,但在处理输入文本时会进行双向编码。这意味着它在生成文本的同时,也会理解输入的上下文信息,尽量保持两者之间的平衡。

比如,假设你输入一个问题,Prefix LM会先对问题进行双向理解,然后再生成回答。它不仅会根据问题的前文信息来生成答案,还能综合考虑后文的提示来生成更合适的内容。

这种架构的代表模型有U-PaLMGLM,其中U-PaLM是在谷歌的PaLM基础上,继续以Prefix LM的方式进行二次预训练,提升了模型的多任务能力。

优点

  • 结合了Encoder-decoderCausal LM的优点,可以更好地处理理解+生成的任务。
  • 对于那些需要理解上下文信息,同时又要生成文本的任务,表现更加平衡。

缺点

  • 虽然是折中,但相比于其他两种架构,训练过程可能会更复杂。

架构比较:哪种更好?

每种架构都有它的优势和适用场景。我们来做个简单的对比:

  • Encoder-decoder:更适合需要深度理解和处理的任务,比如文本分类、实体识别等。但是,在生成长文本时可能会不如Causal LM,训练效率也相对较低。
  • Causal LM:最适合文本生成类任务,如写作、对话生成等。它的扩展性好,能够在zero-shot的情况下处理很多任务,但对于理解类任务可能不如Encoder-decoder
  • Prefix LM:是两者的折中,能够在理解和生成之间找到一个平衡,适合需要处理复杂上下文并生成文本的任务。

Transformer的缺点

为什么Transformer这么厉害?

要先了解Transformer的缺点,就先来看看它的优点。Transformer的厉害之处在于它的核心机制:自注意力(Self-Attention)。简而言之,Transformer能通过“自我对话”来理解输入的每一个词。假设你输入一段文字,Transformer会自动把每个词和其他词进行“对比”和“联系”,比如它会理解句子里的每个词在上下文中代表的意义。这个“自我对话”的机制,使得它在语义理解信息关联上表现得非常好。

不过,这么强大的能力也有一个问题,那就是计算复杂度太高了,尤其是在处理长文本时。Transformer在计算时,每一个词都需要和序列中的所有词进行计算,假设你有一个很长的句子或段落,这个过程就会非常耗时,并且需要消耗大量的计算和存储资源。

那这个问题有多严重?

为了理解这个问题,我们可以把它想象成一个高效的办公室。假设你要和办公室里的所有同事讨论一个问题,最直接的方法是让每个人都和其他所有人交流,这样就能了解大家的观点。然而,随着办公室人数的增加,讨论的时间和复杂度会急剧增加。如果办公室人太多,讨论就变得非常缓慢,而且每个人都需要记住大量的信息,浪费很多资源。

这就是Transformer模型的一个问题:随着输入文本长度的增加,计算和存储的复杂度呈平方级增长。这意味着,如果文本很长,模型的效率会大大下降,甚至需要巨大的计算资源才能正常运行。

研究人员是怎么解决这个问题的?

为了应对这个问题,研究人员开始探索新的模型架构,来提升长文本的处理效率,同时又不牺牲模型的强大能力。很多新的模型架构都采用了一种叫做**参数化状态空间模型(State Space Model, SSM)**的方法。

简单来说,SSM模型是通过一种更加高效的方式来表示和处理文本中的信息,避免了Transformer那种“所有词元都要联系”的方式。这种模型能够更好地处理长序列文本,同时减少计算和存储的需求。

这些新模型有什么优势?

  1. 更高效的计算:SSM模型在处理长文本时,比Transformer要高效得多。它减少了计算和存储的复杂度,使得模型在处理长文本时更加节省资源。
  2. 保持了强大的建模能力:尽管计算更高效,SSM模型并没有丧失Transformer的强大序列建模能力。它依然能够很好地理解和生成文本,保持了优异的性能。
  3. 更适合大规模数据:对于需要处理大量数据和文本的应用,这些新型模型的高效性使它们在实际应用中更具优势。它们不仅可以节省计算资源,还能应对更大规模的数据。

一些新型架构

对于SSM的优化,近年来出现了几种新型的模型架构,其中包括 Mamba、RWKV、RetNet 和 Hyena。这些架构不仅能够提高模型在长文本处理中的效率,还能在保持良好性能的同时,大大减少计算资源的消耗。今天,我们就来简单介绍这几种模型,看看它们是如何工作的,以及它们与传统 Transformer 模型的对比。后面有机会会再写几篇文章单独介绍它们的细节。(画饼)

1. Mamba:选择性状态更新

Mamba 是一种基于状态空间模型(SSM)设计的模型,它的关键创新在于如何更新模型的“状态”——也就是模型如何根据输入的文本信息更新自己的理解。传统的状态空间模型在每次更新时,会用相同的参数来处理前一时刻的状态和当前输入的文本。这种方法虽然简单,但对上下文的表示效果有限。

Mamba 通过引入一个选择机制,让模型能够根据当前输入的文本信息“选择”如何更新状态。换句话说,Mamba 可以灵活地选择哪些信息对当前时刻的理解最重要,从而更好地捕捉上下文关系。虽然这种方法比标准状态空间模型更有效,但由于它的非线性设计,Mamba 不能像 Transformer 那样利用快速傅里叶变换(FFT)加速计算。因此,尽管 Mamba 在文本建模上表现优越,但它在某些计算效率方面可能逊色于其他模型。

2. RWKV:结合 RNN 和 Transformer 的优势

RWKV 是一种结合了 RNN(循环神经网络)和 Transformer 优点的模型。Transformer 在捕捉长距离依赖关系方面表现出色,但在处理长文本时,其计算和内存消耗较大。而 RNN 在处理长序列时相对更加高效,但它在捕捉远距离依赖时表现不佳。RWKV 试图将这两者的优势结合起来。

RWKV 的关键创新在于它用“词元偏移”(Token Shift)来代替传统的词元表示,在每一步的状态更新中,模型不仅使用当前的输入,还结合了上一个词元的信息,通过线性插值的方式来更新状态。这种方式让模型像 RNN 一样高效地处理长文本,同时又保留了 Transformer 在理解复杂关系上的能力。

然而,RWKV 在训练过程中不如 Transformer 那样并行化处理得那么高效,这意味着它在训练速度上可能没有 Transformer 快,但在长文本处理上,RWKV 展现了比传统 Transformer 更高的效率。

3. RetNet:多尺度保留机制

RetNet 是另一种针对 Transformer 限制进行改进的架构。它的创新在于引入了“多尺度保留机制”(Multi-scale Retention, MSR)。这一机制通过改进状态更新的线性映射,让模型能够在更新状态时更好地利用输入信息,从而增强了对序列的建模能力。

RetNet 通过将输入映射成查询、键和值向量,并通过这些向量与前一个时刻的状态进行线性相加,从而更新当前状态。它类似于注意力机制,但不完全相同,因为它将所有词元的状态进行并行计算,这样提高了效率,同时又保留了处理序列时的顺序依赖关系。RetNet 的多尺度保留机制让它在训练和推理时都能高效地利用输入信息,并且它的计算复杂度比 Transformer 更低。

4. Hyena:长卷积提高计算效率

Hyena 是一个不同的模型,它摒弃了 Transformer 中复杂的注意力机制,转而采用了长卷积(Long Convolution)来提高计算效率。卷积操作是一种非常高效的计算方式,通常可以通过快速傅里叶变换(FFT)来加速计算,这就是 Hyena 能够在处理长文本时,比传统 Transformer 更高效的原因。

在 Hyena 中,每个输入的词元都会使用一个相应的滤波器进行卷积,滤波器的组合形成卷积核,然后对整个输入序列进行卷积操作,最终得到每个位置的中间表示。之后,通过一个基于输入的加权函数对结果进行调整,从而得到最终的输出。

这种方法非常适合处理需要捕捉长距离信息的任务,并且由于卷积操作可以通过快速傅里叶变换加速,Hyena 在训练时的计算复杂度比 Transformer 要低得多。然而,由于卷积操作需要对整个序列进行计算,因此在解码时,它的计算复杂度相对较高。

总结:这些新模型架构的优势

  • Mamba:通过选择性状态更新,Mamba 在文本建模上表现得更灵活,能够更有效地捕捉上下文关系,但在计算效率上不如某些其他模型。
  • RWKV:通过结合 RNN 和 Transformer 的优点,RWKV 在处理长文本时更加高效,能够在不牺牲建模能力的情况下提高计算效率。但在训练时,它可能不如 Transformer 那样高效并行。
  • RetNet:通过多尺度保留机制,RetNet 在保持并行计算优势的同时,也提升了对序列的建模能力,特别是在处理长文本时,表现出色。
  • Hyena:采用长卷积来提高计算效率,尤其适用于需要捕捉长距离信息的任务。通过快速傅里叶变换,Hyena 在训练时能够高效计算,但解码时的计算复杂度较高。

这些新型架构各有优势,它们的目标都是为了提高在长文本处理中的效率,同时保持良好的序列建模能力。虽然 Transformer 仍然是许多任务的首选模型,但这些新架构可能在某些特定任务中表现得更加高效和灵活,特别是在处理大规模数据和长文本时。随着研究的深入,未来我们可能会看到这些模型架构在各种实际应用中获得更广泛的应用。