【大模子理论篇】通用大模子架构分类及技能统一化

一给  金牌会员 | 2024-9-13 01:11:49 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 994|帖子 994|积分 2982

1. 背景    

        国内的 “百模大战” 以及开源大模子的各类评测榜单令人眼花缭乱,极易让人陷入迷茫。面对云云众多的大模子,我们该如何审视和选择呢?本文将从大模子架构的角度,对常见的开源大模子架构进行汇总与分析。资料来源于公开的学术论文、技能报告、企业官网、技能讨论等。经过深入分析可以发现,尽管到场大模子研发的机构众多,但大模子的结构大致可分为几个主要类别:Encoder-Decoder、Causal Decoder、Prefix Decoder。接下来,我们将对这几个大类模子进行肯定的介绍,并由此引出当前业内常用大模子的架构分析。
         起首,有必要介绍一篇文章【1】,提出了统一语言模子预练习概述。模子参数在语言模子目的(即双向语言模子、单向语言模子和序列到序列语言模子)之间共享。使用差别的自注意力掩码来控制每个词符对上下文的访问。
   

  
 统一预练习语言模子架构描述        

        输入向量
起首被打包成
,然后使用一个 L 层的Transformer将其编码为差别抽象级别的上下文表示
,此中
。在每个Transformer模块中,多个自注意力头被用来聚合前一层的输出向量。对于第 l 个Transformer层,自注意力头
的输出通过以下方式计算:



        此中,前一层的输出
通过参数矩阵
 线性投影为查询、键和值的三元组,掩码矩阵
决定了一对tokens是否可以彼此关注。使用差别的掩码矩阵 M来控制计算tokens的上下文表示时可以关注的上下文,比方双向语言模子的环境,掩码矩阵的元素全为0,表示所有tokens都可以互相访问。
        Encoder-Decoder: 输入双向注意力,输出单向注意力。目前,只有少数LLM是基于编码器-解码器架构构建的(如T5)。在输入端(编码器)双向语言模子允许所有词元相互关注。可以或许编码来自两个方向的上下文信息。如公式
所示,自注意力掩码矩阵M为全零矩阵,因此每个词元都可以关注输入序列中的所有位置。
        Causal Decoder:因果解码器架构采用单向注意力掩码(从左到右),以确保每个输入token只能关注已往的token和它本身。GPT、LLaMA系列模子均是基于此架构,也是目前主流的大模子架构。单向语言模子使用从左到右的语言模子目的。以从左到右的语言模子为例,每个词元的表示仅编码其左侧上下文词元及其自身。比方,在预测“x1 x2 [MASK] x4”中被遮蔽的词元时,只能使用x1、x2和该词元本身。通过对自注意力掩码矩阵
使用一个三角矩阵来实现这一点,此中自注意力掩码的上三角部门设为−∞,别的元素设为0,如上图所示。
        Prefix Decoder: 输入双向注意力,输出单向注意力。前缀解码器架构(又称非因果解码器)修改了因果解码器的屏蔽机制,使其可以或许对前缀tokens进行双向关注,并仅对生成的tokens进行单向关注(如 GLM)。对于预测,第一个(源)片断中的标记可以在片断内从两个方向相互关注,而第二个(目的)片断中的标记只能关注目的片断中的左向上下文以及自身和源片断中的所有标记。比方,给定源片断 t1 t2 及其目的片断 t3 t4 t5,将输入 “[SOS] t1 t2 [EOS] t3 t4 t5 [EOS]” 输入到模子中。虽然 t1 和 t2 都可以访问包括 [SOS] 和 [EOS] 在内的前四个标记,但 t4 只能访问前六个标记。
        【2】中讨论了大模子的零样本泛化能力,即它们可以执行各种未经过明确练习的任务。然而,最先辈的模子所使用的架构和预练习目的有很大差异。在文中对建模选择及其对零样本泛化的影响进行了大规模评估。特殊是,对三种模子架构(因果 / 非因果仅解码器和编码器 - 解码器)进行实验,使用两种差别的预练习目的(自回归和掩码语言建模)进行练习。因此对于模子架构的讨论和对零样本泛化能力的影响,可以参考理解,进一步摸清差别的模子架构的特点。

        【3】也对这三类大模子架构进行了讨论,可以参考理解。

【17】中给出了当前业内主流大模子的架构配置分析表(L表示层数,N表示注意力头数,H表示隐藏状态的巨细),可以看到因果范例模子占据绝对比例,而且结构上许多模子根本划一,以致参数设置都趋同。(08.29更新)

2. 常见大模子架构

        在第一部门,我们介绍了目前流行的大模子架构主要分为三类:Encoder-Decoder、Causal Decoder、Prefix Decoder,而且对每一类架构做了关键差异的分析。而此中,又以Decoder-only架构最为主流,比如当前的GPT、Llama、Qwen、ChatGLM等系列模子。因此,接下来,我们主要是针对Decoder-only范例的大模子做进一步讨论分析。
2.1 GPT系列模子结构

        在文章《GPT系列预练习模子原理讲解》中,我们已经体系性讲解了GPT-1、GPT-2、GPT-3、GPT-3.5(InstructGPT)等模子的结构和各自特点。GPT系列模子,主要涉及:
   

  • 输入嵌入(Input Embeddings)

    • 将输入文本中的每个词或子词转换为向量表示。包括词嵌入(Word Embedding)和位置嵌入(Position Embedding),后者用于保留序列中的位置信息。

  • 多头自注意力机制(Multi-head Self-Attention Mechanism)

    • 自注意力机制是Transformer模子的核心。它允许模子在处理每个词时,关注输入序列中的其他词。多头自注意力机制则通过并行计算多个差别的注意力头,使模子可以或许关注序列中的差别部门,并捕捉丰富的上下文信息。

  • 前馈神经网络(Feed-Forward Neural Network, FFN)

    • 在每个Transformer层中,注意力机制的输出会通过一个全连接的前馈神经网络进行进一步处理。这个网络通常包罗两层线性变换和ReLU激活函数。

  • 残差连接和层归一化(Residual Connections and Layer Normalization)

    • 每个自注意力模块和前馈网络模块都包罗残差连接(即跳跃连接),将输入直接添加到输出以克制梯度消失。层归一化则有助于加快练习速率和进步模子的稳定性。

  • 层堆叠(Layer Stacking)

    • GPT模子由多个Transformer层堆叠而成,每一层都由一个多头自注意力模块、一个前馈神经网络模块及其相应的残差连接和层归一化组成。层数通常决定了模子的深度和表示能力。

  • 输出层(Output Layer)

    • 终极的隐藏状态会被映射到词汇表巨细的向量,用于预测下一个词。这个映射通常通过一个线性层和一个softmax函数来实现,以计算每个词的生成概率。

  • 自回归机制(Autoregressive Mechanism)

    • GPT采用自回归方式生成文本,这意味着在生成序列中的每个词时,模子只能访问之宿世成的词。这种机制通过掩码操作来实现,确保模子在生成第 t 个词时只能看到前 t-1 个词。

          具体内容这里不再赘述,有兴趣可以看下我们之前的技能分析文章。GPT系列大模子,是典型的Decoder-only模子【4,5,6,7】。
       
GPT模子架构概览         

2.2 Llama系列模子结构

        在《关于LLaMA 3.1 405B》、《LLaMA3结构关键模块分析》两篇文章中,我们对Llama大模子的架构、关键模块都进行了具体的介绍。Llama大模子的整体结构与GPT根本保持划一,同样涉及上述提到的关键模块内容。但它进一步做了改进,分别为:新增Pre-Norm、Layer Norm换成了RMSNorm、  Self-Attension采用了Group Query Attention、Positional Embedding采用了ROPE、FFN结构采用了SwiGLU。
        起首是Pre-Norm,归一化模块置于注意力和前馈层之前。Pre-norm 可以使每一层的输入分布更加稳定。有助于防止梯度在反向传播过程中出现剧烈的变革,减少梯度消失或爆炸的风险。

        其次是位置嵌入差别,Llama 使用旋转位置嵌入。注意力机制差别,Llama 使用分组多查询注意力。前馈网络(FFN)中的激活函数是 SwiGLU。这些模块的算法原理介绍,可以参考 《LLaMA3结构关键模块分析》,别的也可以参考讲解视频【8】。
        此外,【9】专门讨论了GPT模子与LLama模子的差异,也可以关注。除了我们讨论的关键模块,还针对具体的分类能力、架构的学习效能做了对比。        

GPT模子与Llama模子架构差异对比

2.3 Qwen2模子结构

        关于Qwen2-72b大模子的资料,来自于阿里云官方分享以及其官方技能报告【10, 11】。

Qwen2-72b模子架构图

        从模子架构图来看,Qwen2与Llama模子结构划一,使用的关键模块也都一样。大概与Llama的差异,主要就是参数量设置以及使用的练习预料差别。【12】中提到通义千问基于LLaMA结构调整,此中tied embeddibg改为untied embedding,然后在其他层去除bias,在QKV的注意力机制层参加bias 。不外这种小范围的参数调整不影响大的层面学习,本质上还是一样的结构。不外在【13】中提到Llama-3 不能有用地处理多语言提示,暗示Qwen大概在提示词的处理方便大概会更优。
        以下是Qwen2的参数列表。
  1. {
  2.   "architectures": [
  3.     "Qwen2ForCausalLM"
  4.   ],
  5.   "attention_dropout": 0.0,
  6.   "bos_token_id": 151643,
  7.   "eos_token_id": 151645,
  8.   "hidden_act": "silu",
  9.   "hidden_size": 8192,
  10.   "initializer_range": 0.02,
  11.   "intermediate_size": 29568,
  12.   "max_position_embeddings": 32768,
  13.   "max_window_layers": 80,
  14.   "model_type": "qwen2",
  15.   "num_attention_heads": 64,
  16.   "num_hidden_layers": 80,
  17.   "num_key_value_heads": 8,
  18.   "rms_norm_eps": 1e-06,
  19.   "rope_theta": 1000000.0,
  20.   "sliding_window": 131072,
  21.   "tie_word_embeddings": false,
  22.   "torch_dtype": "bfloat16",
  23.   "transformers_version": "4.40.1",
  24.   "use_cache": true,
  25.   "use_sliding_window": false,
  26.   "vocab_size": 152064
  27. }
复制代码
2.4 ChatGLM模子结构

        本章节会重点对GLM模子进行睁开分析讲解,以便更好地理解该模子底层原理。
2.4.1 ChatGLM模子介绍

        ChatGLM是智谱AI的大模子。受 GPT-3 的启发,该团队提出了通用语言模子(GLM)架构,其特点是具有自回归空缺填充目的,并在 2021 年开源了 GLM-10B 模子。随后推出了GLM-130B的千亿参数大模子。与此同时,一个较小的版本 ChatGLM-6B 在同一天开源。2024GLM-4已通过 GLM-4 API对外提供服务。 
        【14】介绍了在 ChatGLM 中采用和开辟的预练习和后练习技能,包括模子架构、预练习数据、对齐等。预练习数据。预练习语料库由来自差别来源的多语言(主要是英语和中文)文档组成,包括网页、维基百科、册本、代码和论文。数据处理流程主要包括三个阶段:去重、过滤和tokenization。去重阶段通已往除重复或相似的文档来进步数据多样性,包括精确去重和暗昧去重。过滤阶段通已往除包罗攻击性语言、占位符文本、源代码等的噪声文档来进步数据质量。tokenization阶段将文本转换为一系列token。预练习数据中的token数量直接影响模子练习速率。采用字节级字节对编码(BPE)算法分别学习中文和多语言token,并将它们与 tiktoken 中的 cl100k_base tokenizer的token归并为一个巨细为 150,000 的统一词汇表。在终极的练习集中,对差别的来源进行重新加权,以增加像册本和维基百科如许的高质量和教育性来源的比例。预练习语料库由大约十万亿个token组成。数据质量和多样性对于构建有用的大型语言模子非常重要。
        GLM 系列大型语言模子基于 Transformer 构建。GLM-130B 采用 DeepNorm 作为层归一化策略,并在 FFN 中使用旋转位置编码(RoPE)以及带有 GeLU 激活函数的门控线性单元。在 GLM-4 模子中,架构上的关键模块技能与Llama有所趋同
   

  • 除 QKV 外无偏置:为了进步练习速率,去除所有偏置项,除了注意力层的查询(Query)、键(Key)和值(Value)(QKV)中的偏置。如许做在长度外推方面略有改进。
  • RMSNorm 和 SwiGLU:采用 RMSNorm 和 SwiGLU 分别替换 LayerNorm 和 ReLU。这两种策略具有更好的模子性能。
  • 旋转位置嵌入(RoPE):将 RoPE 扩展为二维形式以适应 GLM 中的二维位置编码。
  • 分组查询注意力(GQA):用分组查询注意力(GQA)替换多头注意力(MHA),以减少推理过程中的 KV 缓存巨细。鉴于 GQA 比 MHA 使用更少的参数,增加了 FFN 的参数数量以保持相同的模子巨细。
          模子的上下文长度从 2K(ChatGLM)扩展到 32K(ChatGLM2 和 ChatGLM3),再到 128K 和 1M(GLM-4)。这种扩展通过上下文扩展(位置编码扩展和在长文本上的持续练习实现),还通过长上下文对齐实现,使 GLM-4 可以或许有用地处理长上下文。预练习为大型语言模子奠基基础,而后练习进一步细化这些模子以与人类偏好对齐,比方理解人类意图、遵循指令和促进多轮对话。对于 GLM-4,对齐主要通过有监督微调(SFT)和基于人类反馈的强化学习(RLHF)实现。不外目前针对RLHF对于模子的性能影响在业内有一些争议。对于第一代模子(ChatGLM-6B 和 ChatGLM-130B),提示 - 响应对主要由模子开辟职员标注。对于后续模子,对齐数据是内部标注数据和从第三方获取的专有数据的组合,并受到相对严格的质量控制步伐。
2.4.2 GLM模子介绍      

        GLM (General Language Model) 是一种预练习语言模子,它结合了自回归和填充缺失的方法,称为“Autoregressive Blank Infilling”。该模子的核心思想是通过一个混淆的自回归和填充策略进行预练习,以进步模子在生成和理解文本方面的能力【15,16】。   

关键特点:

   

  • 自回归 (Autoregressive) 生成:
    GLM 结合了自回归的生成方式,即从左到右徐徐生成文本。这使得模子可以或许在生成过程中考虑到上下文信息,从而生成连贯的文本。
  • 填充缺失 (Blank Infilling):
    在预练习阶段,模子会随机掩盖一些词或片断,并要求模子填充这些空缺。这种方法雷同于 BERT 的掩码语言模子,但差别之处在于 GLM 可以在差别位置填充多个一连的空缺,而不仅仅是单个词汇。
  • 统一的框架:
    GLM 的框架将生成和理解结合在一起,既可以用于生成任务(如文本生成)又可以用于理解任务(如问答、文本分类等)。这种统一的预练习目的使得 GLM 在差别的鄙俚任务中表现优异。
  GLM Pretraining:


GLM 预练习过程如下:
   (a) 原始文本为 [x1, x2, x3, x4, x5, x6],从中选取了两个片断 [x3] 和 [x5, x6]。
  
  (b) 在 Part A 中,将选取的片断替换为 [M],并在 Part B 中对这些片断进行打乱。
  
  (c) GLM 自回归地生成 Part B。每个片断在输入时前置 [S],在输出时后置 [E]。二维位置编码用于表示片断间和片断内的位置。
  
  (d) 自注意力掩码中,灰色区域表示被掩盖部门。Part A 的标记可以互相注意(蓝色框),但不能关注 Part B。Part B 的标记可以关注 Part A 及其在 Part B 中的前置部门(黄色和绿色框分别对应两个片断)。[M] 表示 [MASK], [S] 表示 [START], [E] 表示 [END]。
          在这里,给定输入文本 x=[x1, …, xn],从中采样多个文本片断 {s1, …, sm},此中每个片断 si 对应于文本 x 中一系列一连的标记 [s_i,1; … ; s_i,li]。每个片断都被替换为一个 [MASK] token,从而形成一个被粉碎的文本
。在预测片断中的缺失token时,模子可以访问被粉碎的文本和之前预测的片断。这些片断的顺序会被随机打乱。形式上,设 Zm 为长度为 m 的索引序列 [1, 2, , …, m] 的所有大概排列的集合,而
 为
,则预练习目的界说为:


        在 Part A 中,将采样的片断替换为 [M],并在 Part B 中打乱这些片断。输入 x 被分为两部门:Part A 是被粉碎的文本
,Part B 包罗被掩盖的片断。GLM 以自回归方式生成 Part B。每个片断在输入时前置 [S],在输出时后置 [E]。二维位置编码用于表示片断间和片断内的位置。为了实现自回归生成,每个片断在输入和输出时分别填充特殊标记 [START] 和 [END]。通过这种方式,GLM 自动在一个统一的模子中学习到一个双向编码器(用于 Part A)和一个单向解码器(用于 Part B)。对该模子有兴趣的话,可以看看原论文。

           综上所述,虽然目前各厂家都在力推本身的大模子,但是从模子架构来看,差异并不大,从当前的形势看,大概会越来越统一。反而在输入token的长度、输出文本的长度、多任务能力、多模态能力、垂直领域的商用能力等这类功能层面的能力提升,各厂家会徐徐形成了自身的壁垒。
  3. 参考文献 

【1】Unified Language Model Pre-training for Natural Language Understanding and Generation
【2】What Language Model Architecture and Pretraining Objective Work Best for Zero-Shot Generalization?
【3】Exploring Architectures and Configurations for Large Language Models
【4】gpt-4-research
【5】A brief on GPT-2 and GPT-3 models
【6】The GPT-3 Architecture
【7】The Transformer architecture of GPT models
 【8】LLaMA explained: KV-Cache, Rotary Positional Embedding, RMS Norm, Grouped Query Attention, SwiGLU
【9】Towards Optimal NLP Solutions: Analyzing GPT and LLaMA-2 Models
【10】QWEN TECHNICAL REPORT    
【11】预练习一个72b模子必要多久(阿里云开辟者公众号)
【12】LLM大语言模子-ChatGPT、LLaMA、ChatGLM、文心一言、通义千问
【13】Hello Qwen2
【14】ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools
【15】GLM: General Language Model Pretraining with Autoregressive Blank Infilling
【16】acl-GLM: General Language Model Pretraining with Autoregressive Blank Infilling
【17】大语言模子-RUC AI BOX

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表