大模型学习笔记 - LLM模型架构

news2024/9/24 3:19:45

LLM 模型架构

  • LLM 模型架构
    • 1. LLM 核心模型 Transformer
    • 2. 详细配置
      • 2.1 归一化方法
      • 2.2 归一化模块位置
      • 2.3 激活函数
      • 2.4 位置编码
        • 2.4.1 绝对位置编码
        • 2.4.2 相对位置编码
        • 2.4.3 旋转位置编码 RoPE
        • 2.4.4 ALiBi位置编码
      • 2.5 注意力机制
        • 2.5.1 完整自注意力机制
        • 2.5.2 稀疏注意力机制
        • 2.5.3 多查询/分组注意力机制
        • 2.5.4 硬件优化的注意力机制
      • 2.6 混合专家模型
      • 2.7 LLaMA实现和模型配置建议
    • 3. 主流架构
    • 4. 长上下文模型
      • 4.1 扩展位置编码
      • 4.2 调整上下文窗口
      • 4.3 长文本数据
    • 5. 新型模型架构

1. LLM 核心模型 Transformer

目前主流的大模型都是基于Transformer模型进行设计的。Transformer是由多层的多头注意力模块(Multi-Head Self-Attention) 堆叠而成的神经网络模型。
原始的Transformer是由Encoder 和Decoder两部分构成,而这两部分是可以独立使用的(如BERT 单独使用Encoder, GPT单独使用Decoder).
大语言模型与早期的预训练语言模型相比,主要是使用了更长的向量维度、更深的层数、更大的数据集、进而包含了更大规模的模型参数。LLM主要使用Decoder 架构,对Transformer本身结构和配置改变不大。

关于Transformer的详细介绍可以参考之前的博客:https://blog.csdn.net/m0_37531129/article/details/104363591?spm=1001.2014.3001.5502

  1. 输入端:x = v + p (词向量 + 位置编码)
    1. 输入词元序列 首先经过一个Embedding Module转成词向量。
    2. 位置编码 (由于Transformer无法识别序列顺序所以 通过位置编码来表示序列中的位置)
      1. 位置编码也有绝对位置编码,相对位置编码。这个后续讨论。
  2. 多头注意力机制(MHA)
    1. 多头注意力机制是Transfomer的核心技术,能够直接建模任意距离的词元之间的相互关系。之前RNN迭代利用前一个时刻状态更新当前时刻状态,在处理长文本时会出现梯度爆炸或消失的问题。在卷积神经网络中只有同一个卷积核的窗口中的词元可以直接交互,通过堆叠层数来实现远距离词元信息交互。
    2. 多头注意力机制 = 多个自注意力模型组成。
      1. 每个模块将输入词元映射成Query,Key,Value 三个矩阵。然后对于每个query,与所有没有被mask的key计算点积,点积值除以 D \sqrt{D} D (D是key的向量维度),然后传入softmax中计算权重。权重与Value加权和得到最终输出。
      2. A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T D ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{D}})V Attention(Q,K,V)=softmax(D QKT)V 其中 Q = X W Q Q=XW^Q Q=XWQ, K = X W K K=XW^K K=XWK, V = X W V V=XW^V V=XWV
      3. 多头注意力机制 使用了 H 组 结构相同但是参数不同的自注意模块。输入序列通过不同的权重映射为K Q V,每组KQV经过上面计算映射成一个Head得到自注意力输出,不同 Head 被拼接在一起,通过一个权重矩阵 W O W^O WO(H*H)进行映射,产生最终的输出。 M H A = C o n c a t ( h e a d 1 , . . h e a d N ) W O MHA=Concat(head_1,..head_N)W^O MHA=Concat(head1,..headN)WO 其中 h e a d n = A t t e n t i o n ( X W n Q , X W n K , X W n V ) head_n = Attention(XW^Q_n,XW^K_n,XW^V_n) headn=Attention(XWnQ,XWnK,XWnV).
      4. 自注意力机制能够直接建模序列中任意两个位置的关系,进而有效捕捉长程依赖关系,具有更强的序列建模能力。另一个优势是计算可以并行化,因此可以支持大规模参数的高效优化。
  3. 前馈网络层(FFN)
    1. FeedForwardNetwork.对每个位置的隐状态进行非线性变化和特征提取。 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
      在这里插入图片描述4. 编码器 (Encoder = LayerNorm+MHA+FFN) 1. 编码器=多个相同的层堆叠而成(每层包含MulitHeadAttention和FFN) 2. 在MHA和FFN之后,使用LayerNormalization 和 Residual Connection (残差连接)来加强模型的训练稳定性。 1. 残差连接将输入层与输出层相加,实现了信息在不同层的传递,缓解梯度爆炸和消失的问题。
      2. LayerNorm则对数据进行重新缩放,提升模型的训练稳定性。
    2. 编码器端,输入数据是完全可见的,自注意力模块采用的是双向注意力,每个词元表示能够有效融合上下问的语义关系。
    3. X l ′ = L a y e r N o r m ( M H A ( X l − 1 + X l − 1 X'_l = LayerNorm(MHA(X_{l-1}+X_{l-1} Xl=LayerNorm(MHA(Xl1+Xl1
    4. X l = L a y e r N o r m ( F F N ( X l ′ + X l ′ ) X_l = LayerNorm(FFN(X'_l+X'_l) Xl=LayerNorm(FFN(Xl+Xl)
  4. 解码器(Decoder)
    1. Decoder基于Encoder的最后一层输出表示以及模型生成的词元序列,执行后续的生成任务。
    2. Decoder与Encoder的不同是 Decoder需要引入掩码自注意力模块(Masked Self-attention) 用来计算注意力分数时掩盖当前位置之后的词,以保证生成目标序列时不依赖未来的信息。
    3. 经过Decoder后,模型通过一个全连接层将输出映射到大小为V的目标词汇表的概率分布,并基于某种解码策略生成对应的词元。

2. 详细配置

2.1 归一化方法

2.2 归一化模块位置

2.3 激活函数

2.4 位置编码

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

关于位置编码 苏神的介绍更详细:https://kexue.fm/archives/8130

2.4.1 绝对位置编码

在原始Transformer中,采样了绝对位置编码。根据输入词元在序列中的绝对位置生成唯一的位置嵌入,并与词元的嵌入表示进行相加来注入位置信息 x t = v t + p t x_t = v_t + p_t xt=vt+pt。原始Transfomer采用了正余弦位置编码。

在这里插入图片描述

2.4.2 相对位置编码

相对位置编码是根据Key和query之间的偏移量计算得来的。计算得到的相对位置编码通常应用于注意力矩阵的计算中,而不是直接与词元本身的位置编码进行相加相对位置编码的Transformer可以对更长序列的进行建模,具备一定的外推能力。

  1. Transformer-XL提出了一种相对位置编码,基于绝对位置编码分解得到的。
  2. T5提出了一种较为简化的相对位置编码。在注意力分数中引入了可学习的标量,这些标量是基于查询和键的位置之间的距离计算的。
    A i j = x i W Q W K T x j T + r i − j A_{ij} = x_i W^Q W^{K^T} x_j^T + r_{i-j} Aij=xiWQWKTxjT+rij 其中 r i − j r_{i-j} rij表示基于query 和 key之间偏移的可学习标量。
2.4.3 旋转位置编码 RoPE

RoPE的出发点就是“通过绝对位置编码的方式实现相对位置编码”,通过公式推导得到 "向量旋转"的位置编码。 原作者的解读 https://kexue.fm/archives/8265

2.4.4 ALiBi位置编码

ALiBi 通过在键和查询之间的距离上施加相对距离相关的惩罚来调整注意力分数。
A i j = x i W Q W K T x j T − m ( i − j ) A_{ij} = x_i W^Q W^{K^T} x_j^T - m(i-j) Aij=xiWQWKTxjTm(ij)
i-j是query 和key之间的位置偏移量,m是每个注意力头独有的惩罚系数。ALiBi的惩罚分数是预先设定的,不需要引入任何可训练得参数。

2.5 注意力机制

注意力机制是Transformer 架构中的核心技术,它能够针对序列中的词元对构建交互关系,聚合来自于不同位置的语义信息。

2.5.1 完整自注意力机制

考虑序列中所有词元之间的相互关心。因此对于序列长度为T的序列需要O(T^2)的计算复杂度。

2.5.2 稀疏注意力机制

完整自注意力机制在处理长序列时O(T^2)的时间复杂度带来计算和存储开销较大。
为了降低注意力机制的计算复杂度,研究人员提出了多种高效的注意力变种。其中,滑动窗口注意力机制(Sliding Window Attention, SWA)是大语言模型中使用最多的一种稀疏注意力机制。不同于完整的注意力机制,滑动窗口注意力根据词元位置,仅仅将位置索引上距离该词元一定范围内的词元考虑到注意力的计算中。具体来说,滑动窗口注意力设置了一个大小为𝑤 的窗口,对每个词元𝑢𝑡,只对窗口内的词元[𝑢𝑡−𝑤+1, . . . , 𝑢𝑡 ] 进行注意力计算,从而将复杂度降低到𝑂(𝑤𝑇)。进一步,通过信息的逐层传递,模型实现了随着层数线性增长的感受野,从而获取远处词元的信息。

2.5.3 多查询/分组注意力机制

为了提升注意力机制的效率,多查询注意力(Multi-Query Attention, MQA)提出针对不同的头共享相同的键和值变换矩阵。这种方法减少了访存量,提高了计算强度,从而实现了更快的解码速度并且对于模型性能产生的影响也比较小。
分组查询注意力机制(Grouped-Query Attention, GQA)结合多查询注意力机制的效率与多头注意力机制的性能。GQA 将全部的头划分为若干组,并且针对同一组内的头共享相同的变换矩阵。这种注意力机制有效地平衡了效率和性能,被LLaMA-2 模型所使用。

2.5.4 硬件优化的注意力机制

利用硬件设施来优化注意力模块的速度和内存消耗,FlashAttention 通过矩阵分块计算以及减少内存读写次数的方式,提高注意力分数的计算效率;PagedAttention 则针对增量解码阶段,对于KV 缓存进行分块存储,并优化了计算方式,增大了并行计算度,从而提高了计算效率。

2.6 混合专家模型

来自于《Mixtral of Experts》,Mixtral 8x7B 是一种稀疏的混合专家(稀疏 MoE)模型,目前是性能最佳的大型语言模型(LLM)之一,同时也是最受人关注的一种公开可用的 LLM。具体解读可参考: Mixtral of Experts 机器之心解读

Mixtral 8x7B 的关键思想是用 8 个专家层替换 Transformer 架构中的每个前馈模块,8x 是指使用了 8 个专家子网络。7B 是指其组合了 Mistral 7B 模块。Mixtral 8x7B 总共有 47B 参数,明显少于 Llama 270B 等模型。此外,由于每个时间步骤仅有 2 个专家处于活动状态,因此对于每个输入 token,该模型仅使用 13B 参数。如此一来,它的效率就比常规的非 MoE 47B 参数模型高多了。

在这里插入图片描述
在这里插入图片描述

在MoE 中,每个混合专家层包含K个专家组件,每个组件Ei都是一个前馈神经网络,对于输入的每个词元xt,模型通过一个路由网络(门控函数)G来计算该词元对应于各个专家的权重。在路由函数中,首先通过线性层 W G W^G WG映射为K各专家的得分,并基于此选择出概率最该的k个专家进行激活。随后这k个专家的得分被送入softmax函数计算他们的权重 G ( x t ) = [ G ( x t ) 1 , . . G ( x t ) k ] G(x_t)=[G(x_t)_1,..G(x_t)_k] G(xt)=[G(xt)1,..G(xt)k] 没有被选则的专家权重置为0. G ( x t ) = s o f t m a x ( t o p k ( x t ∗ W G ) ) G(x_t)=softmax(topk(x_t * W^G)) G(xt)=softmax(topk(xtWG)),
之后,每个被选择的词元的输出的加权和将作为该混合专家网络层的最终输出𝒐𝑡: o t = M o E l a y e r ( x t ) = ∑ i = 1 K G ( x t ) i ∗ E i ( x i ) o_t = MoElayer(x_t) = \sum_{i=1}^K G(x_t)_i * E_i(x_i) ot=MoElayer(xt)=i=1KG(xt)iEi(xi)

2.7 LLaMA实现和模型配置建议

关于模型详细配置的推荐建议:

  1. 为了增强稳定性:建议采用前置RMSNorm作为层归一化。
  2. 为了更好地模型性能,激活函数可以考虑SwiGLU或GeGLU
  3. 位置编码可以选择RoPE或ALiBi 这两种在建模长序列数据具有较好的性能。

对于一个LLaMA 模型,其首先将输入的词元序列通过词嵌入矩阵转化为词向量序列。之后,词向量序列作为隐状态因此通过𝐿 个解码器层,并在最后使用RMSNorm 进行归一化。归一化后的最后一层隐状态将作为输出。

3. 主流架构

在预训练时代,主要范式是 预训练+微调。Bert为代表的Encoder-only架构,以GPT为代表的Decoder-Only架构,以T5为代表的Encoder-Decoder架构。

随着GPT的发展,目前LLM生成式大语言模型上,主要以Decoder-only为主流的架构。Decoder架构还可以细分为两种变种:因果解码器(Causal Decoder)和前缀解码器(Prefix Decoder).一般提到解码器通常是因果解码器架构。
在这里插入图片描述

4. 长上下文模型

目前,增强大语言模型长文本建模能力的研究主要集中在两个方向:一个是扩展位置编码,一个调整上下文窗口。

4.1 扩展位置编码

4.2 调整上下文窗口

4.3 长文本数据

5. 新型模型架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT】QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)

一、Qt 背景介绍 1、什么是 Qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。 它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展。Qt 为开发者提供了一种基于组件的开发模式,开发者可以通过简单的拖拽和…

Puromycin(嘌呤霉素)— pac基因筛选抗生素

Puromycin是由Streptomyces alboniger(白黑链霉菌)产生的一种氨基糖苷类抗生素,可抑制原核细胞和真核细胞的肽基转移。Puromycin可抑制革兰氏阳性菌、多种动物细胞和昆虫细胞的生长,但是真菌和革兰氏阴性菌对Puromycin具有抗性&am…

大屏系统类优质UI风格

大屏系统类优质UI风格

JetBrains IDE 使用git进行多人合作开发教程

以下DEMO可以用于多人共同开发维护一个项目时,使用Git远程仓库的实践方案 分支管理 dev:开发分支test:测试分支prod:生成分支 个人开发也最起码有一个masterdev,作为主分支和当前开发分支。master永远是稳定版本&am…

工厂方法模式java

文章目录 1. 概念2. 示例3. 代码示例 1. 概念 定义: 工厂方法模式又叫工厂模式,通过定义工厂父类创建对象的公共接口,而子类负责创建具体的对象 作用: 由工厂的子类来决定创建哪一个对象 缺点: 工厂一旦需要生成新的东西就需要修改代码,违背的开放封闭原则 2. 示例 3. 代码示…

RabbitMQ发布确认及交换机类型

RabbitMQ发布确认机制详解 一、引言 在消息队列(MQ)技术中,RabbitMQ因其稳定性、可靠性和易用性而受到广泛欢迎。为了确保消息的可靠传递,RabbitMQ提供了一系列高级特性,其中发布确认(Publisher Confirms&…

顶级 Vue 管理仪表板和模板

Vue.js 是当今繁忙的 Web 开发领域中最受欢迎的 JavaScript 框架之一,用于创建交互式动态用户界面。Vue.js 的组件反应性及其流畅的数据绑定使其在管理仪表板设计方面占据了主导地位。 本文讨论了一些领先的 ​​Vue 管理员仪表板,它们可以节省您制作 We…

昇思25天学习打卡营第11天|基于 MindSpore 实现 BERT 对话情绪识别

BERT是一种先进的语言模型,由Google在2018年推出。它通过双向编码器Transformer的Encoder部分,捕捉词语和句子的深层含义。BERT的创新之处在于其预训练方法,特别是Masked Language Model和Next Sentence Prediction,这使得它在问答…

【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵

文章目录 1. 算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵1.1 题目描述1.2 算法实现1.2.1 步骤说明:1.2.2 算法实现1.2.3 代码实现:1.2.4 程序说明:1.2.5 示例详细讲解如何将一个矩阵顺时针旋转90度1. 算法题:输入一个N阶方…

【练习】链表题

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 两数相加 题目描述 题解 代码实现 两两交换链表中的节点 题目描…

4、可变电阻、可变电感、可变电容(simulink仿真)

4、可变电阻、可变电感、可变电容&#xff08;simulink仿真&#xff09; 1&#xff0c;自己搭建R/L/C元件 2&#xff0c;搭建可变R/L/C元件 以第三讲为基础做此讲 MATLAB中 电气仿真元件 1&#xff0c;U/I 测量, 2&#xff0c;U/I关系方程建立受控源信号 自己的电阻 我们先将其…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-排它网关里数字比较大小的处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、在仿钉钉流程中&#xff0c;条件的数字比较跟普通的字符串比较又不一样&#xff0c;同时在flowable里也是不同的表达式&#xff0c;所以需要特殊处理 2、后端方面 增加操作符 //以下为…

Linux 注意事项

Linux 与 Windows 是两个相互独立的操作系统&#xff0c;两者有较大差距&#xff1a; 1.1 Linux 严格区分大小写&#xff08;Windows不严格区分大小写&#xff09;&#xff1b; 1.2 Linux 中所有内容&#xff0c;硬件设备都以文件形式保存在 /dev 目录下&#xff08;万物皆文件…

16_网络IPC4-数据传输

send() 用于流式套接字 向SOCKET发送数据 。 Socket 只是通信节点&#xff0c;通信之前需要连接&#xff0c;即发送端发送之前 需要知道对端的地址&#xff0c;才能找到对端的socket节点&#xff0c;才能发送成功。而接收端不同&#xff0c;接收函数 如 recv () 不需要一定知道…

【ai】学习笔记:电影推荐2:工程+ 深度学习模型

ml_movice_recommend_flask http://127.0.0.1:5000/recommend【ai】学习笔记&#xff1a;电影推荐1&#xff1a;协同过滤 TF-DF 余弦相似性 进行了学习和理解&#xff0c;成功运行了工程。本文进一步分析。不知道是否有引入语义分析&#xff1f;还是单独只是匹配算法&#xff…

吴恩达老师机器学习-ex1

线性回归 有借鉴网上部分博客 第一题 单变量 先导入相关库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 读取数据&#xff0c;并展示前五行 datapd.read_csv(path,headerNone,names["Population","Profit"]) data.head…

C++基础入门(二)(函数重载,引用,内联函数,nullptr)

目录 一. 函数重载 1. 概念 2. 实现 (1). 参数类型不同 (2). 参数个数不同 (3). 参数类型顺序不同 3. 注意事项 (1). 返回值不能作为重载的条件 (2). 不能仅按函数返回类型重载 (3). 与缺省参数的问题 二. 引用 1. 概念和定义 2. 引用的特性 (1). 引用在定义时必须…

【云原生】Kubernetes微服务Istio:介绍、原理、应用及实战案例

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Spring Boot集成Spring Batch快速入门Demo

1.什么是Spring Batch&#xff1f; Spring Batch 是一个轻量级的开源框架&#xff0c;它提供了一种简单的方式来处理大量的数据。它基于Spring框架&#xff0c;提供了一套批处理框架&#xff0c;可以处理各种类型的批处理任务&#xff0c;如ETL、数据导入/导出、报表生成等。S…

Windows 、Linux、MacOS 进程管理机制

本心、输入输出、结果 文章目录 Windows 、Linux、MacOS 进程管理机制前言Windows 进程管理机制Linux 进程管理macOS 进程管理内存不够了,几个操作系统如何处理Windows 、Linux、MacOS 进程管理机制 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 …