[MIT6.5940] Lect 12 Transformer and LLM (Ⅰ)

[MIT6.5940] Lect 12 Transformer and LLM (Ⅰ)

Administrator 31 2024-08-22

一、Transformer basics

Ⅰ、Pre-Transformer Era

  • NLP Tasks
    • 判别性任务:情感分析、文本分类、文本含义
    • 生成性任务:语言建模、机器翻译、摘要

  • Recurrent Neural Networks (RNNs)
    • 在Transformer时代之前,人们采用RNN及LSTM来构建语言模型。
    • 每个RNNs都包含一个输入层、隐藏层和输出层,当按时间步进行计算时,隐藏状态不仅依赖于当前输入,还依赖于前一个隐藏状态,两者相结合后通过激活函数传递。
    • “工作内存”难以保存长期的依赖关系(可以通过LSTM来解决),并且在tokens之间存在依赖性,这限制了可伸缩性。
lect12-1.webp

  • Convolutional Neural Networks (CNNs)
    • 使用卷积,tokens之间没有依赖性,从而导致更好的可伸缩性。
    • 但这里的局限在于,尽管可以拥有多层结构,你仍然受限于有限的上下文或感受野。这限制了上下文信息的获取,导致建模能力受限。而自然语言任务中,上下文具有重要作用,因此卷积不是最佳方案。

  • NLP with RNN/LSTM
    • 利用RNN和LSTM,我们可以得到双向RNNs(Bi-directional RNNs)和非双向RNNs(Uni-directional RNNs)。
    • 双向RNNs:用于判别类任务,双向不仅能看到当前的词,还能看到未来的词。
    • 非双向RNNs:用于生成类任务,因为在生成任务中,只能看到前一个词,但无法看见未来的词,颖仓状态的方向是单向的。
    • 从下图中可以看出生成任务和判别任务中隐藏状态的区别,对于生成任务,隐藏状态依赖于前一个和后一个隐藏状态,而对于判别任务,隐藏状态仅依赖于前一个隐藏状态。
lect12-2.webp

  • Problem with RNNs/LSTMs
    • 很难建模long-term的关系
      • 它需要O(seq_len)步骤来建模两个标记之间的相互作用,例如下图一中,若要处理'chef'和'was'之间的关系,需要穿越O(seq_len)层。
      • 图像具有局部性,但语言可能没有局部性,因此自然语言任务中存在较多long-term的关系需要处理。
    • 有限的训练并行性
      • 每一个状态都严格地依赖于早期的状态,因此具有较强的依赖性,导致并行的难度下降。
      • 强依赖性意味着它需要n步才能得到状态n。
lect12-3.webp

Ⅱ、Transformer

1、Tokenize words (word -> tokens)

  • Tokenization分词:将人理解的单词words转化为计算机能理解的tokens。
  • 如下图中的分词结果,将一个单词映射到一个/多个tokens,例如图中generative、constrained被分词为多个tokens。因此,一个单词可以映射多个tokens,但是一个tokens只属于一个单词。
lect12-4.webp

2、Map tokens into embeddings

  • One-Hot Encoding
    • 关键思想:将每个单词表示为一个向量,该向量中的值与词汇表中的单词一样多。一个向量中的每一列表示一个词汇表中的一个可能的单词。
    • 缺点:对于大型词汇表,这些向量可以变长,并且它们包含除一个值之外的所有0。这是一个非常稀疏的表示。
lect12-5.webp

  • Word Embedding
    • 关键思想:通过查找表,将单词索引映射到一个连续的词嵌入中。即设置一定的维度,每个词映射一个向量。
    • 单词嵌入可以用模型端到端训练。
    • 流行的预训练单词嵌入: Word2Vec,GloVe。
lect12-6.webp

3、Embeddings go through transformer blocks

Multi-Head Attention (MHA)

  • 多头注意力机制是transformer的重要组成部分
  • Self-Attention
    • 将词嵌入映射到query、key和value ​(Q,K,V) 三个独立的向量上。

      • ​Q=XW^Q,K=XW^K,V=XW^V,其中​W^Q,W^K,W^V是三个可训练的参数矩阵
    • 查询键值的设计类似于一个检索系统(以YouTube搜索为例)

      • query查询:搜索栏中的文本提示
      • key键:视频的标题/描述
      • value值:相应的视频
    • 核心公式:​Attention(Q,K,V) = softmax(QK^T/\sqrt{d_k})V

      • ​Q​K_T经过MatMul,生成了相似度矩阵。
      • 对相似度矩阵每个元素除以​\sqrt{d_k}​d_K为的维度大小。这个除法被称为Scale。当​d_K很大时,​QK_T的乘法结果方差变大,进行Scale可以使方差变小,训练时梯度更新更稳定。
      • 然后经过SoftMax,最后与V做一个MatMul操作得到结果。
lect12-7.webp

  • Mutil-Head Self-Attention
    • 核心公式:​MultiHead(Q,K,V)=Concat(head_1,...,head_n)W^0,where head_i = Attention(QW_i^Q,KQW_i^K,VW_i^V)
    • 我们需要不同的注意力映射来捕捉不同的语义关系。
    • 多头注意力通过多个head(平行的注意分支)来模拟不同的注意功能。每个head关注的子空间不一定是一样的,那么这个多头的机制能够联合来自不同head部分学习到的信息,这就使得模型具有更强的认识能力。
    • 最终的输出被连接起来,并通过一个线性投影来合并特征。
lect12-8.webp

  • 例如下图中,八个head关注到了八张注意力图,以便更细致地捕捉关系中的细节。
lect12-9.webp

  • Attention Masking
    • 正如前面所述,判别任务和生成任务的token具有一定区别,判别任务token应该能看见其他所有token,而生成任务token应该只能看见前面的token。
    • 如图所示,右上的为判别任务,右下的为生成任务。
lect12-10.webp

Feed-Forward Network (FFN)

  • 为什么我们需要一个前馈网络?

    • 自我注意模型只是token之间的关系,但我们还需要学习元素级的非线性函数关系,并将这些特性应用于每个隐藏维度。
    • 因此添加一个前馈网络(FFN),以辅助每个隐藏维度进行特征建模。
  • 朴素实现是一个两层的MLP,具有更大的隐藏状态大小(反向瓶颈)和ReLU/GeLU激活。

    FFN(x) = max(0,xW_1+b_1)W_2+b_2

LayerNorm & Residual connection

  • LayerNorm
    • 与CNNs中的BatchNorm(BN)不同,transformer使用LayerNorm(LN)。
      • BatchNorm是对一个batch-size样本内的每个特征做归一化,而LayerNorm是对每个样本的所有特征做归一化。
      • BN抹杀了不同特征之间的大小关系,但是保留了不同样本间的大小关系;LN抹杀了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小。
    • LN对每个令牌的嵌入进行归一化,然后应用一个可学习的仿射变换。
y = \frac{x-E[x]}{\sqrt{Var[x]+\epsilon}} * \gamma + \beta
lect12-11.webp

  • 为了提高训练的稳定性,我们添加了LayerNorm和Residual Connections(残差连接)
  • 在最初的transformer中,是Post-norm,即先计算多头注意力再LN归一化;而后来人们发现Pre-norm具有更好的训练的稳定性,即先LN归一化再计算多头注意力。
lect12-12.webp

4、Positional encoding

  • 讲到目前为止,我们仍将token当作集合,注意力和前馈网络没有办法区分输入token的位置顺序,而语言中每个词的位置和顺序是非常重要的,因此我们需要方法对序列进行编码->位置编码Positional encoding。
  • Positional Encoding就是将位置信息添加(嵌入)到Embedding词向量中,让Transformer保留词向量的位置信息,可以提高模型对序列的理解能力。
  • 原论文中,Transformer论文中,使用正余弦函数表示绝对位置​PE_{(pos,i)},最后与词嵌入相加以融入位置信息。除此以外,可知两个绝对位置的乘积是独一无二的,使用乘积来表示两个token相对位置。
  • 下图中为原论文中的位置编码公式,其中pos表示token在序列的位置,i表示该位置向量的第i个特征维度,​d_{model}表示token的维度。
lect12-13.webp

5、result

  • 如下图是transformer与其他模型的对比
    • BLEU测量了机器翻译的文本与一组参考翻译的相似性。
    • transformer超过了所有以前发布的模型和集成,并且训练成本更低。
lect12-14.webp

二、Transformer design variants

  • 大多数transformer最初的设计已经被社区广泛使用,尽管如此,人们还是提出了各种替代设计。例如:
    • Encoder-decoder (T5), encoder-only (BERT), decoder-only (GPT)
    • Absolute positional encoding -> Relative positional encoding
    • KV cache optimizations:
      • Multi-Head Attention (MHA) -> Multi-Query Attention (MQA) -> Grouped-Query Attention
        (GQA)
    • FFN -> GLU (gated linear unit)

Ⅰ、Encoder and Decoder

1、Encoder-Decoder

  • 用于机器翻译的原transformer就是一个Encoder-Decoder架构。
  • 《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》这篇论文中提出了一个最新的预训练模型 T5(Text-To-Text Transfer Transformer),T5为各种NLP任务上的迁移学习提供了一个统一的文本到文本的模型。
  • T5基于transformer模型,并且也是Encoder-Decoder架构,使用该模型使单个模型可以执行各种各样的有监督任务,例如翻译、分类、Q&A、摘要和回归。
lect12-15.webp

  • 在Encoder-Decoder架构中,prompt会被输入给编码器,解码器会生成答案。
lect12-16.webp

2、Encoder-only

  • 最流行的Encoder-only架构模型Bidirectional Encoder Representations from Transformers (BERT),基于Transformer的双向编码器表示。
  • BERT使用两种目标之一进行预训练
    • task 1:掩码语言模型(Masked Language Model, MLM)
      • 使用一个被称为掩码标记的特数标记,随机屏蔽大约15%或其他百分比的输入token,并训练模型预测这些被屏蔽的单词。
      • 如下图,对'boring'进行掩码标记,生成特殊的掩码token嵌入,并与位置嵌入相加,然后将其通过Transformer编码器,获取预测结果,在此处注入分类损失来进行监督。
    • task 2:下一句预测(Next Sentence Prediction, NSP)
      • 句子B是否为句子A的下一个句子(较少使用)。
  • 预先训练好的模型会根据下游任务进行微调。
lect12-17.webp

3、Decoder-only

  • 与Encoder-Decoder、Encoder-only的模型相比,Decoder-coder的注意力掩码特性是,每个单词仅能关注其之前的单词。
  • 典型的模型之一是GPT模型,Generative Pre-trained Transformer。
  • 预训练目标为下一个词预测,​L_1(u)=\sum_ilogP(u_i|u_{i-k,...,u_{i-1};\theta})
  • 对于较小的模型(GPT-2),预先训练好的模型将根据下游任务进行微调。对于大模型,可以运行在零样本/少样本。

Ⅱ、Absolute / Relative Positional Encoding

  • 原Transformer论文中采用的是绝对位置编码,但是现在人们发现相对位置编码更
  • 绝对位置编码将位置信息融合到输入嵌入中(Q/K/V)。这些信息通过整个Transformer进行传播。
  • 相对位置编码通过影响注意力分数(增加偏差或修改查询和键)来提供相对距离信息,而不是影响V。
    • 优点:泛化到训练中未见的序列长度,即训练短序列,测试长序列(并不总是有效,需要借助技巧才能有效)。

1、Attention with Linear Biases

  • Attention with Linear Biases (ALiBi,线性偏差注意力)
    • 其想法是改变位置编码,只与相对距离相关,而不是绝对指数。
    • ALiBi建议向注意矩阵添加一个偏移量(定义为相对距离),而不是将其添加到输入标记嵌入中。
    • ALiBi 本质是,通过在注意力机制中加入基于查询和键之间相对距离的线性偏差,来提升Transformer模型对长序列的处理能力无需增加位置嵌入或改变模型结构
    • 如下图,在计算注意力分数时,一个恒定的偏差(右侧矩阵)被添加到每个头的注意力分数计算中(左侧矩阵)。这个偏差是通过将一个头特定的固定标量​m乘以一个下三角矩阵来实现的,其中下三角矩阵的值由查询​q和键​k之间的距离决定,这样更远的键将收到更大的惩罚。
lect12-18.webp

2、Rotary Positional Embedding (RoPE)

  • Rotary Positional Embedding (RoPE)
    • RoPE出自论文《Self-Attention with Relative Position Representations》
    • 论文中提出,为了能利用上token之间的相对位置信息,假定query向量​q_m和key向量​k_n之间的内积操作可以被一个函数g表示,该函数g的输入是词嵌入向量​x_m​x_n和它们之间的相对位置​m - n
      ​<f_q(x_m,m),f_k(x_n,n)> = g(x_m,x_n,m-n)
    • 为了满足上述等式,作者提出了RoPE方法,该编码方式中
      ​f_q(x_m,m) = (W_qx_m)e^{im\theta}=q_me^{im\theta}
      ​g(x_m,x_n,m-n)=Re[(W_qx_m)(W_kx_n)e^{i(m-n)\theta}]=q_mk_ne^{i(m-n)\theta}
      此处的​\theta=10000^{-2(i-1)/d}具体推导
    • 在二维空间中旋转嵌入件,将嵌入维度d分割成d/2对,每对被视为二维坐标。
lect12-19.webp

  • RoPE的优点:扩展上下文窗口
    • 我们可以通过插值RoPE PE(即使用一个较小的​\theta_i)来扩展上下文长度支持。将LLaMA的上下文长度从2k扩展到32k。
lect12-20.webp

Ⅲ、KV cache optimizations

  • 在Transformer decoding(GPT-style)过程中,我们需要存储所有之前token的Keys and Values,以便我们能够执行注意力计算,即KV缓存。
    • 只需要当前的query token。
    • 如下图中,当我们计算到token 2 'trainium'时,我们需要用到之前token的Keys and Values,即需要保存灰色区域到缓存中,以防止重复计算
lect12-21.webp

  • 如下图,计算了Llama几个模型的KV缓存大小:
    • 当BS=16,n_seq=4096时,即假设16个人同时向大模型输入了长度为4096的prompt,需要160GB的KV缓存,这还不包括激活函数和权重需要的的大小,因此迫切的需要减小KV缓存大小。
lect12-22.webplect12-23.webp

  • 如下图,KV缓存大小随着Batch size线性增长,并且KV缓存大小很快大于模型权重。
lect12-24.webp

  • 因此人们提出了多种技术来减少KV缓存的大小,通过减少KV缓存的数目来实现。
    • 通过减少#KV-heads来减少KV cache的大小
    • Multi-head attention (MHA): N heads for query, N heads for key/value
    • Multi-query attention (MQA): N heads for query, 1 heads for key/value
      • 将key和value组合成一个数
    • Grouped-query attention (GQA): N heads for query, G heads for key/value (typically G=N/8)
      • 将key和value按组合并成一个数
lect12-25.webp

  • 如下图是使用MQA和GQA后KV缓存大小随着Batch大小变化图,减少效果相当显著。
lect12-26.webp

  • 再考虑对精度的影响,如下图对Llama-2, 30B, 150B tokens进行MQA和GQA后精度的变化,可以看见精度略微下降,因为会丢失部分信息,但是可以接受。
lect12-27.webp

Ⅳ、Gated Linear Units (GLU)

  • 先前在讨论FFN时,我们假设它对于ReLU或GaLU激活函数而言,起到了逆瓶颈的作用但为了在此基础上进一步改进,人们提出了门控线性单元GLU,它实际上包含了三个矩阵变换。
FFN_{sWIglu}(x,W,V,W_2) = (Swish_1(xW)\otimes xV)W_2
  • FFN和SwiGLU的结构对比图
lect12-28.webp

  • GeLU和Swish激活函数图
lect12-29.webp

三、Large language models (LLMs)

Ⅰ、涌现能力(emergent)

  • LLMs是在大型语言语料库(自然语言、代码等)上训练的scaled-up transformers模型。
  • 涌现能力(emergent):在较小的模型中不出现,而在较大的模型中出现的能力。
    • 如下图,可以看出几个模型在八种常见任务中,随着模型规模增大到一定程度,准确度开始明显上升,这就是大模型的涌现能力。
lect12-30.webp

Ⅱ、GPT-3

  • GPT-3
    • 将Transformer模型扩展为少样本学习者(few-shot learners),引入了上下文学习(In-context learning)。
    • 零/少样本学习
      • 传统上,对于下游任务,人们必须针对不同的下游任务对预训练模型进行微调,十个下游任务就要十个微调。例如翻译,就需要给大量样本进行训练,梯度学习。
      • 零/少样本学习本质上是指模型直接在自然语言提示中描述任务,少样本需要从提示中学习,而零样本不需要,因此两者不需要样本为不同的任务微调成单独的模型,没有梯度更新。
lect12-31.webp

  • 如图,可以看出更大的模型可以更有效地利用少样本的描述进行学习。
  • 随着更多的演示,无prompt的准确性赶上了task-prompt的准确性。这意味着使用者不需要给出明确的任务指示,例如“翻译成法语”,模型也可以自动翻译成法语。
lect12-32.webp

Ⅲ、OPT

  • Open-source pre-trained LLM from Meta
  • Size: 125M/350M/1.3B/2.7B/6.7B/13B/30B/66B/175B
  • Design choices: Decoder-only, Pre-norm (post-norm for 350M), ReLU activation in FFN
  • 175B model: hidden dimension 12288, #heads 96, vocab size 50k, context length 2048
  • Close performance compared to GPT models

Ⅳ、BLOOM

  • Open-source pre-trained LLM from BigScience (and opensource community)
  • Size: 560M/1.1B/1.7B/3B/7.1B/176B
  • Design choices: Decoder-only, Pre-norm, GeLU activation in FFN, ALiBI positional embedding
  • 176B model: hidden dimension 14336, #heads 112, vocab size 250k, context length 2048
  • Support multi-lingual (59 languages in the corpus)

Ⅴ、LLaMA

  • Open-source pre-trained LLM from Meta
  • Size: 7B/13B/33B/65B
  • Design choices: Decoder-only, Pre-norm, SwiGLU (swish, gated linear units), rotary positional embedding (RoPE)
  • 7B model: hidden dimension 4096, #heads 32, #layers 32, vocab size 32k, context length 2048
  • 65B model: hidden dimension 8192, #heads 64, #layers 80, vocab size 32k, context length 2048
  • Much better performance compared to previous opensource models

Ⅵ、LLama 2

  • Larger context length (2k -> 4k)
  • More training tokens (1T/1.4T -> 2T, no sign of saturation yet)
  • GQA for larger models (70B, 64 heads, 8 kv heads)
  • Also include Llama-2-chat, an instruction-tuned version

Ⅶ、How to scale up?

  • The Chinchilla Law
    • 我们需要扩大模型大小和数据大小来进行训练,以获得最佳的训练计算量与精度权衡。
    • 注意:如果我们考虑推理计算的交易,那么权衡是不同的。
    • 如图,根据Chinchilla法则,一个10B参数的模型,需要大约205B tokens才能达到非常出色的性能。
lect12-33.webp