LLM 系列之 Transformer 组件总结

本系列为LLM 学习博客,会一一记录各个模块解读。
以下内容参考:大语言模型综述 https://github.com/RUCAIBox/LLMSurvey

主流架构

大语言模型,主要的核心组件是Transformer。不同的模型选择的架构不一样,目前主流架构有:

  1. 编码器-解码器架构: 传统Transformer模型是建立在编码器-解码器架构上的,由两个Transformer块分别作为编码器-解码器。目前只有少数LLM 是基于 该架构的 如:Flan-T5
  2. 因果解码器架构: 因果解码器架构采用单项注意力掩码,以确保每个输入标记只能关注过去的标记和它本身。输入和输出标记通过解码器以相同的方式进行处理。典型的model有 GPT1/23, OPT, BLOOM, Gopher.
  3. 前缀解码器架构:前缀解码器修正了因果解码器的掩码机制,以使其能够对前缀标记执行双向注意力,并仅对生成的标记执行单向注意力。这样与编码器-解码器架构类似,前缀解码器可以双向编码前缀序列并自回归地逐个预测输出标记,其中在编码和解码过程中共享相同的参数。实用的建议是不从头开始进行预训练,而是基于训练因果解码器,然后将其转换为前缀解码器以加上收敛。典型的model: U-PaLM (从PaLM 演化来的), GLM-130B.

总结:对于这三种类型的架构,也可以考虑通过专家混合MoE扩展他们,其中每个输入的一小部分神经网络权重被稀疏激活,如Switch Transformer 和 GLaM,已经证明 通过增加专家的数量或总参数大小,可以观察到显著的性能改进。

模型组件

Transformer的四个组件:标准化,位置编码,激活函数,注意力和偏置。

标准化

  • 目的是使得训练稳定。
  • 目前主要采用的有:
    1)LayerNorm:后置LN, 前置LN(损失一定的性能 带来更稳定的训练),Sandwich-LN (基于前置LN,在残差连接之前添加额外的LN 避免数值爆炸,有时无法稳定LLM的训练,可能导致崩溃)
    2)最近一些高级标准化技术被提出以作为LN的替代方案,由于RMS Norm 在训练速度和性能方面的优越性,在Gopher 和 Chinchilla中被采用。
    3)DeepNorm 已经表现出更好的训练稳定性 和 后标准化一起被GLM-130B采用。
    4)在嵌入层后添加额外的LN也可以稳定大语言模型的训练(然而这往往会导致显著的性能下降,在最近的一些LLM中已经被移除)。

激活函数

  • 目的:获得更好的性能
  1. 现有的LLM中,广泛使用GeLU.
  2. 在最新的LLM中(PaLM和 LaMDA)也使用了GLU激活函数的变体 特别是SwiGLU 和 GeGLUb 变体 在实践中通常可以获得更好的性能。与GeLU相比,他们在前馈网络中需要额外的参数(约50%)。

位置编码

  • 目的:由于Transformer中自注意模块是置换等变的,因此需要使用位置编码来注入绝对或相对位置信息以建模序列。
  • 主要有:1)绝对位置编码:正弦函数,学习位置编码。 2)相对位置编码:ALiBi, RoPE。
    1) 经典Transformer中有两种绝对位置编码的变体:正弦函数和学习的位置编码(后者经常在LLM中使用)。
    2) 相对位置编码根据 键和查询之间的偏移量生成嵌入。因此它可以在训练中看到长度范围之外的更长序列上表现良好,即外推。
    3)ALiBi 使用基于键和查询之间距离的惩罚来偏置注意力分数。它比其他位置编码具有更好的零样本泛化能力和更强的外推能力。
    4)RoPE: 通过绝对位置设置特定的旋转矩阵,键和查询之间的分数可以使用相对位置信息计算,这对建模长序列是有用的,RoPE已经被广泛应用于一些最新的大语言模型。

注意力和偏差

  • 目的: transform 就是通过注意力机制来实现上下文关系的捕获的。
    1)全自注意力机制:原始Transformer
    2) 分解注意力:GPT3 采用更低计算复杂度的稀疏注意力机制。
    3)特殊注意力机制: Random feature attention, Big bird: Transformers for longer sequences, 考虑GPU 内存访问(FlashAttention)
    4)与原始Transformer一样,大多数LLM 在每个线性层和层标准化中保留了偏置,然后PaLM 和 Galactica中 偏置被移除,研究表明,对于LLM来说,去除偏置可以增强训练的稳定性。(Training language models to
    follow instructions with human feedback)

预训练任务

预训练在将大规模语料库中的通用知识编码到巨大的模型参数中起着关键作用。对于训练LLMs,有两个常用的预训练任务,即语言建模和去噪自编码。

语言模型

语言模型任务(LM)是预训练仅包含解码器的大语言模型(如GPT3和PaLM)最常用的目标。给定
一个标记序列x={x1,…,xn},LM任务旨在基于序列中前面的标记x

由于大多数语言任务可以基于输入的预测问题来解决,这些仅包含解码器的大语言模型可能具有优势,可以隐式地学习如何以统一的LM方式完成这些任务。一些研究还表明,仅包含解码器的大语言模型可以通过自回归地预测下一个标记而自然地转移到某些任务中,而无需微调。LM的一个重要变体是前缀语言模型任务,它是为预训练具有前缀解码器架构的模型设计的。在计算前缀语言模型的损失时,不使用随机选择的前缀内的标记。由于模型预训练涉及的序列中涉及的标记较少,因此在使用相同数量的预训练标记时,前缀语言模型的性能往往略低于传统语言模型任务。

去噪编码

除了传统的LM之外,去噪自编码任务(DAE)也被广泛用于预训练语言模型[24,72]。DAE任务的输入x\˜x是一些有随机替换区间的损坏文本。然后,语言模型被训练以恢复被替换的标记˜x。形式上,DAE的训练目标如下:LDAE(x) = logP(˜x|x\˜x)
然而,DAE任务在实现上似乎比LM任务更为复杂。因此,它并没有被广泛用于预训练大型语言模型。采用 DAE作为预训练目标的现有大语言模型包括 T5 和 GLM130B 。这些模型主要通过自回归地恢复替换区间来进行训练.

TODO

每个模型组件中 各个算法的实现方式和对比。

你可能感兴趣的:(transformer,深度学习,人工智能)