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

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.mzph.cn/pingmian/48210.shtml

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

相关文章

ChatGPT实战100例 - (20) 如何玩转影刀RPA

文章目录 ChatGPT实战100例 - (20) 如何玩转影刀RPA背景需求需求分析与流程设计一、需求收集二、流程梳理三、可行性分析流程设计(详细步骤)具体步骤的影刀RPA实现流程图总结AIGC在影刀RPA中的使用总结其他RPA步骤中可能用到AIGC的地方展望总结ChatGPT实战100例 - (20) 如何玩…

LeYOLO, New Scalable and Efficient CNN Architecture for Object Detection

LeYOLO, New Scalable and Efficient CNN Architecture for Object Detection 论文链接:http://arxiv.org/abs/2406.14239 代码链接:https://github.com/LilianHollard/LeYOLO 一、介绍 本文关注基于FLOP的高效目标检测计算的神经网络架构设计选择&am…

【Vite】快速入门及其配置

概述 Vite是前端构建工具。vite 相较于webpack,vite采用了不同的运行方式: 开发时,并不对代码打包,而是直接采用ESM的方式来运行项目在项目打包部署时,使用 rollup 对项目进行打包除了速度外,vite使用起来也更加方便…

驱动程序在\device\raidport1 上检测到控制器错误

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

全新UI自助图文打印系统小程序源码/自助云打印机前后端源码

全新UI自助图文打印系统小程序源码,自助云打印机前后端源码。最新的自助图文打印系统和证件照云打印小程序源码采用了PHP作为后端开发语言,旨在为用户提供全面的自助打印服务。 这些服务覆盖了多种文件格式,包括文档、图片、表格等。除此之外…

pipeline:无题

这里写自定义目录标题 复盘我是如何做的撰写评审文档O-KR-KA任务网络图与计划资源需求 && 风险项资源需求风险项 其他 讨论、评审文档撰写评审纪要、结论 反思 复盘 目前工作中的一个现状是,在季度开始的时候需要自己思考方向、规划工作;可能还需…

手机接Usb hub再连接电脑下D+D-波形

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

医联体信息平台建设方案PPT(54页)

文章摘要: 医联体信息平台现状当前医联体信息平台存在脱离医疗业务建设的倾向,导致信息孤岛,业务协同困难。 建设存在的问题主要问题包括健康档案无法动态更新和共享,信息系统之间信息共享和协同不足。 医联体信息平台建设方案方…

堆及堆的管理

堆的作用 堆是用来作为存储空间的 堆的创建与释放 分离的空闲空间的管理建议使用链表 在链表中指定空间大小及下一块空闲链表

2.3 大模型硬件基础:AI芯片(上篇) —— 《带你自学大语言模型》系列

本系列目录 《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型(科普向) 第一章 走进大语言模型 1.1 从图灵机到GPT,人工智能经历了什么&#xff1…

Qt创建列表,通过外部按钮控制列表的选中下移、上移以及左侧图标的显现

引言 项目中需要使用列表QListWidget,但是不能直接拿来使用。需要创建一个列表,通过向上和向下的按钮来向上或者向下移动选中列表项,当当前项背选中再去点击确认按钮,会在列表项的前面出现一个图标。 实现效果 本实例实现的效果如下: 实现思路 思路一 直接采用QLis…

day5 分布式节点

文章目录 1 流程回顾2 抽象 PeerPicker3 节点选择与 HTTP 客户端4 实现主流程5 main 函数测试。6 QA 本文代码地址: 本文是7天用Go从零实现分布式缓存GeeCache的第五篇。 注册节点(Register Peers),借助一致性哈希算法选择节点。实现 HTTP 客户端&…

CTF-Web习题:[BJDCTF2020]Mark Loves cat

题目链接:Mark Loves cat 解题思路 访问靶机网站后得到如下页面: 先浏览网页,发现最下面有一个"dog"字样,此时翻看源码并没有什么发现 那就例行进行目录扫描,源码泄露扫描,用dirsearch目录扫…

威尔史密斯太太贾达平特:友谊在迷恋浪漫的世界中很重要 坦言与威尔·史密斯20多年婚姻中犯下的错误

这位威尔史密斯的太太、著名演员兼音乐家贾达萍克特史密斯 (Jada Pinkett Smith) 因其在 Facebook Watch 系列《Red Table Talk》中的直言不讳而闻名,她的表达方式证明了她的诚实以及她渴望说出自己的想法。 这段揭露真相的视频讲述了她与威尔史密斯 (Will Smith) …

在LabVIEW中实现图像矫正

在LabVIEW中实现图像矫正,特别是将倾斜的笔记本图像(如左图)校正为正视图像(如右图),通常需要以下几个步骤: 1. 获取图像 使用图像采集设备或加载图像文件来获取图像数据。 2. 图像预处理 对…

鸿蒙语言基础类库:【@system.storage (数据存储)】

数据存储 说明: 从API Version 6开始,该模块不再维护,可以使用模块[ohos.data.storage]。在API Version 9后,推荐使用新模块[ohos.data.preferences]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用…

鸿蒙OpenHarmony Native API【HiLog】

HiLog Overview Description: HiLog模块实现日志打印功能。 开发者可以通过使用这些接口实现日志相关功能,输出日志时可以指定日志类型、所属业务领域、日志TAG标识、日志级别等。 syscap SystemCapability.HiviewDFX.HiLog Since: 8 Summary Files File …

springboot服务如何执行sql脚本文件

当sql脚本文件包含不同数据库实例sql时,遍历读取sql文件再插入时,由于是不同的数据库实例这种方式就不行了,这时就需要程序直接执行sql脚本。 springboot执行sql脚本 /*** 执行sql脚本* throws SQLException*/ private void executeSqlScri…

电脑永久性不小心删除了东西还可以恢复吗 电脑提示永久性删除文件怎么找回 怎么恢复电脑永久删除的数据

永久删除电脑数据的操作,对于很多常用电脑设备的用户来说,可以说时有发生!但是,因为这些情况大都发生在不经意间,所以每每让广大用户感觉到十分苦恼。永久删除也有后悔药,轻松找回电脑中误删的文件。恢复文…

C#定时发送邮件功能

C#定时发送邮件功能 背景 自动运维监控客户端在自动关闭时,需要给实施同学发送提醒邮件。支持163邮箱、qq邮箱、火狐邮箱等各种通用邮箱。 定时器发送邮件 代码 邮件功能模块 using ITSLog.LogManage; using System; using System.Collections.Generic; using…