大语言模型模块

三种类型的大语言模型:

大语言模型的正则位置、正则方法、激活函数、位置编码

正则方法:

  • layerNorm——对单个样本的最优特征进行归一化(设定其方差和均值)

常见开源大语言模型

transformer

模型结构:

注意力点积和多头注意力机制

Attention(Q,K,V)=Softmax(QKTMdk)VAttention(Q,K,V) = Softmax(\dfrac{QK^T\odot M}{\sqrt{d_k}})V

GPT

  • 使用带掩码的子注意力机制

Q=XWq,K=XWK,V=XWVQ = XW^q, K = XW^K, V = XW^V

  • LayerNorm

Llama

Llama 1

在原有decoder的基础上

  • 使用 RMSNorm 代替 Layernorm
    • 来源:LayerNorm的中心偏移没什么用(减去均值等操作)
    • 增强了训练稳定性
    • 提升训练速度
  • 使用 SwiGLU 激活函数 Sigmoid(x)xSigmoid(x)*x
    • 旨在提升模型性能
    • 含有一个可学习的参数 β,能够调节函数的插值程度
  • 旋转式位置编码 (RoPE)——更好的建模长序列文本
    • 通过正弦和余弦函数实现的绝对位置编码(Absolute Positional Embeddings)。序列中的每个位置都有其独特的编码(positional embedding),它们与词向量相加,从而确保即使单词相同,不同顺序的句子也能表达不同的意思。尽管绝对位置编码已经解决了 Transformer 不区分顺序的问题,但它生成的位置编码是相互独立的,没有考虑到序列中单词之间的相对位置关系。
    • RoPE可以有效地保持位置信息的相对关系。
    • RoPE 可以通过旋转矩阵来实现位置编码的外推
    • RoPE 可以与线性注意力机制兼容

Llama 2

  • 将序列长度 204840962048 \to 4096
  • GQA——平衡性能和准确度
  • MHA 成为了 Transformer 的性能瓶颈
    • Multi-Query Attention (MQA)通过在注意力层使用单一的键和值头(key and value),配合多个查询头(query heads)来大幅降低内存需求。但这种做法可能会降低模型的质量,并导致训练过程不稳定,因此像 T5 这样的其他开源大语言模型并未采用此方法。
    • GQA 则采用了一种折中方案,它将查询值(query values)分为 G 组(GQA-G),每组共享一个键和值头(key and value head)。如果 GQA 的组数为 1(GQA-1),则相当于 MQA,所有查询(queries)都集中在一组;而如果组数等于头数(GQA-H),则与 MHA 相当,每个查询(query)自成一组。这种方法减少了每个查询(query)组中的键和值头(keys and values)数量,从而缩小了键值缓存的大小,减少了需要加载的数据量。与 MQA 相比,这种更为温和的缩减方式在提升推理速度的同时,也降低了解码过程中的内存需求,且模型质量更接近 MHA,速度几乎与 MQA 持平。

Llama 3

  • 上下文长度 409681924096\to 8192
  • 分词工具 Sentence Piece \to TikToken , 词汇表 32k128k32k \to 128k
    • 这两种分词工具的主要差异在于,在输入的 tokens 已经存在于词汇表中时,TikToken 会跳过字节对编码(BPE)的合并规则。例如,如果“generating”这个词已经在词汇表中了,那么它将作为一个完整的 token 返回,而不是将其拆分为“generating”和“ing”这两个最小单元的 tokens 。