Datawhale大语言模型-Transformer以及模型详细配置

发布于:2025-03-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

Transformer模型

当前主流的大语言模型都基于 Transformer 模型进行设计的。Transformer 是由多层的多头自注意力(Multi-head Self-attention模块堆叠而成的神经网络模型。原始的 Transformer 模型由编码器和解码器两个部分构成,而这两个部分实际上可以独立使用,例如基于编码器架构的 BERT 模型 [13] 和解码器架构的 GPT 模型 [14]。
与 BERT 等早期的预训练语言模型相比,大语言模型的特点是使用了更长的向量维度、更深的层数,进而包含了更大规模的模型参数,并主要使用解码器架构,对于 Transformer 本身的结构与配置改变并不大。
下面对Transformer的每一个模块进行介绍

位置编码

  • 可以通过训练学校得到,也可以事先指定
  • 在输入词嵌入当中引入位置编码,将绝对或者相对位置信息注入
    在这里插入图片描述

前馈层网络

  • 用于学习复杂的函数关系和特征
    F F N ( X ) = σ ( X W U + b 1 ) W D + b 2 FFN(X)=\sigma(XW^U+b_1)W^D+b_2 FFN(X)=σ(XWU+b1)WD+b2
    在这里插入图片描述

注意力机制

一种基于相似度的查表

  • 计算query与key的相似度
    e i j = q i T k j e_{ij}=q_i^Tk_j eij=qiTkj
  • 相似度规范化
    α i j = e x p ( e i j ) ∑ j ′ e x p ( e i j ′ ) \alpha_{ij}=\frac{exp(e_{ij})}{\sum_{j'}exp(e_{ij'})} αij=jexp(eij)exp(eij)
  • 对value进行加权求和
    o i = ∑ j α i j v i o_i=\sum_{j}\alpha_{ij}v_i oi=jαijvi
    在这里插入图片描述

多头自注意力

该部分属于是Transformer当中的核心创新技术

  • 多头自注意力机制能够直接建模任意距离的词元之间的交互关

    在这里插入图片描述
    多头自注意力机制通常由多个自注意力模块组成。在每个自注意力模块中,对于输入的词元序列,将其映射为相应的查询(Query, 𝑸)、键(Key, 𝑲)和值(Value,𝑽)三个矩阵。然后,对于每个查询,将和所有没有被掩盖的键之间计算点积。这些点积值进一步除以 D \sqrt D D 进行缩放(𝐷 是键对应的向量维度),被传入到 softmax函数中用于权重的计算。进一步,这些权重将作用于与键相关联的值,通过加权和的形式计算得到最终的输出。在数学上,上述过程可以表示为:
    Q = X W Q K = X W K V = X W V A t t e n s t i o n ( Q , K , V ) = s o f t m a x ( Q K T D ) V Q=XW^Q\\ K=XW^K\\ V=XW^V\\ Attenstion(Q,K,V)=softmax(\frac{QK^T}{\sqrt D})V Q=XWQK=XWKV=XWVAttenstion(Q,K,V)=softmax(D QKT)V
    与单头注意力相比,多头注意力机制的主要区别在于它使用了 𝐻 组结构相同但映射参数不同的自注意力模块。输入序列首先通过不同的权重矩阵被映射为一组查询、键和值。每组查询、键和值的映射构成一个“头”,并独立地计算自注意力的输出。这使得自注意力的计算可以更好的基于硬件去进行优化,这也是其成为主流的大语言模型的方法之一

编码器

将输入变换为隐藏层的特征

  • 将每个输入词元都编码成一个上下文语义相关的表示向量
  • 编码器结构由多个相同的层堆叠而成,其中每一层都包含多头自注意力模块前馈网络模块
    X l ′ = LayerNorm ⁡ ( MHA ⁡ ( X l − 1 ) + X l − 1 ) , X l = LayerNorm ⁡ ( FFN ⁡ ( X l ′ ) + X l ′ ) , \begin{array}{l} \boldsymbol{X}_{l}^{\prime}=\operatorname{LayerNorm}\left(\operatorname{MHA}\left(\boldsymbol{X}_{l-1}\right)+\boldsymbol{X}_{l-1}\right), \\ \boldsymbol{X}_{l}=\operatorname{LayerNorm}\left(\operatorname{FFN}\left(\boldsymbol{X}_{l}^{\prime}\right)+\boldsymbol{X}_{l}^{\prime}\right), \end{array} Xl=LayerNorm(MHA(Xl1)+Xl1),Xl=LayerNorm(FFN(Xl)+Xl),
    在这里插入图片描述

解码器

将隐藏层的特征变换为自然语言序列
与编码器不同,解码器需要引入掩码自注意力(Masked Self-attention)模块,用来在计算注意力分数的时候掩盖当前位置之后的词,以保证生成目标序列时不依赖于未来的信息
在训练过程中,解码器可以通过一次前向传播,让每个词元的输出用于预测下一个词元

Y l ′ = LayerNorm ⁡ ( MaskedMHA ⁡ ( Y l − 1 ) + Y l − 1 ) , Y l ′ ′ = LayerNorm ⁡ ( CrossMHA ⁡ ( Y l ′ , X L ) + Y l ′ ) , Y l = LayerNorm ⁡ ( FFN ⁡ ( Y l ′ ′ ) + Y l ′ ′ ) , \begin{aligned} \boldsymbol{Y}_{l}^{\prime} & =\operatorname{LayerNorm}\left(\operatorname{MaskedMHA}\left(\boldsymbol{Y}_{l-1}\right)+\boldsymbol{Y}_{l-1}\right), \\ \boldsymbol{Y}_{l}^{\prime \prime} & =\operatorname{LayerNorm}\left(\operatorname{CrossMHA}\left(\boldsymbol{Y}_{l}^{\prime}, \boldsymbol{X}_{L}\right)+\boldsymbol{Y}_{l}^{\prime}\right), \\ \boldsymbol{Y}_{l} & =\operatorname{LayerNorm}\left(\operatorname{FFN}\left(\boldsymbol{Y}_{l}^{\prime \prime}\right)+\boldsymbol{Y}_{l}^{\prime \prime}\right), \end{aligned} YlYl′′Yl=LayerNorm(MaskedMHA(Yl1)+Yl1),=LayerNorm(CrossMHA(Yl,XL)+Yl),=LayerNorm(FFN(Yl′′)+Yl′′),

在这里插入图片描述

大语言模型的参数配置

考虑因素如下

  • 归一化方法
  • 位置编码
  • 激活函数
  • 注意力计算

在这里插入图片描述

归一化

为了应对训练过程当中不稳定这一问题,深度学习方法通常会采用特定的归一化策略来加强神经网络训练过程的稳定性。
在这里插入图片描述

激活函数

前馈网络中激活函数的选择对于大语言模型的表现至关重要。通常来说,激活函数主要是为神经网络中引入非线性变化,从而提升神经网络的模型能力
在这里插入图片描述

位置编码

由于 Transformer 模型中自注意力模块具有置换不变性,因此仅使用注意力机制无法捕捉序列中的顺序关系,从而退化为“词袋模型”。为了解决这一问题,需要引入位置编码(Position Embedding, PE)对于序列信息进行精确建模,从而将绝对或相对位置信息整合到模型中。
在这里插入图片描述

旋转位置编码

使用了基于绝对位置信息的旋转矩阵来表示注意力中的相对位置信息
为序列中每个绝对位置设置了特定的旋转矩阵 R θ , t R_{\theta,t} Rθ,t(位置索引为t)
在这里插入图片描述

代码内容实现

在这里插入图片描述

注意力机制

在这里插入图片描述

参考资料

DataWhale组队学习资料:https://www.datawhale.cn/learn/content/107/3295
Transformer动画演示:https://www.bilibili.com/video/BV1vN9gYZEj8/?spm_id_from=333.1387.favlist.content.click&vd_source=5a776c1236491cc434fff497ee1d79a5