大模型LLMs组件系列:大模型组件概述

💡 大语言模型(Large Language Models, LLMs),指的是Transformer-based,GPT-like,参数量在数亿到千万亿级别的大规模语言模型。虽然如今数不胜数的研究在探索改良Transformers甚至取代Transformers,但总体来说大模型的组件是一个相对固定的对象池。本系列将采用总分结构,在本篇中将综述当前主流大模型的各种组件,包含总体Transformer架构、分词器Tokenizer、嵌入模型Embedding、位置编码Position Encoding、注意力机制Attention、残差连接Residual Connection、弃置Dropout、全连接层/多层感知机MLP、归一化Normalization、激活函数Activation以及输出层分类器,能在有限篇幅内讲清楚的将放在本篇中,否则将单开一篇并附链接。

0 概述:Transformer架构

Transformer是Google在2017年底写的论文Attention is all you need中举例展示的Seq2Seq翻译模型的名称,该翻译模型采用了Encoder-Deocoder架构,但相较于之前以RNN为内核的模型,Transformer的核心卖点是注意力Attention机制,基本结构是Transformer Block Stack堆叠,每个Block中都有一组Attention模块(负责注意力)和MLP模块(负责记忆和表示)。很快,该架构掀起了深度学习的新浪潮,此后拥有类似注意力机制的模型都叫做Transformer架构。

在这里插入图片描述

在论文的经典Transformer架构中,Encoder-Deocoder架构是机器翻译等序列到序列任务(Seq2Seq)中最常用的架构。为了将A语言翻译到B语言,先将A使用Encoder编码嵌入得到一个中间状态I,再将I输入Decoder得到输出。这种一次性全部编码然后再解码的形式的bottleneck在中间层的容量(长度限制下一次性记不太多)。目前主流的大模型都采用单架构,如专注于语言建模的BERT模型采用具有双向注意力的Encoder-Only架构,而最流行的大模型则采用单向注意力的Decoder-Only架构,后者又衍生除了Causal DecoderPrefix Decoder(Prefix部分采用双向注意力,其余部分单向注意力)。

在这里插入图片描述

目前,许多研究对经典架构进行了优化和魔改,例如经典架构中的归一化层放在了Attention和MLP模块的后面,而目前主流的大模型都将归一化放到了两个模块前;在工程上出现了复用之前计算结果的KV Cache技术,这一技术又因显存规模而导致后后续许多优化技术如Page Attention;此外,经典架构中采用ReLU激活函数(MLP之间)和基于正余弦函数的固定位置编码,后来都得到了改良。下面按照是否有可训练参数将所有组件分为两组。

1 神经网络组件

1.1 词嵌入Word Embedding:万物皆可表征学习

词嵌入属于表征学习Representation Learning,表征学习指将数据(在NLP中通常是文本)表示为计算机可以理解和处理的形式。它可以是任何形式的数据表示,包括离散式表示(如One-Hot Encoding)和分布式表示(如Embedding)。涵盖多个方面,如:

  • 词嵌入:Word Embedding,大语言模型中直接涉及
  • 句子和文档嵌入:Sentence/Doc
  • 实体/概念嵌入:Knowledge Graph Embeddings
  • 其他类型:图像、图、音频、传统表格行等

大模型中的Embedding当前仅指Word Embedding,就是在Tokenization的基础上,为词表中的所有m个Token建立一个到n维度向量空间的映射,m常常为数万数十万,而n常用的有1024,4096等。例如这个词作为一个最小词元Token,在词表中编号为12,但这个数值化还不够,还需要将12这个数值对应映射到一个长度为4096的浮点数向量,即嵌入后的词向量(Word Vector)

Word Embedding的发展历程大致可以概况为从稀疏one-hot基于统计的分布式词嵌入(Distributed Word Vector)再到基于深度学习的分布式词嵌入的总体历程。其中基于深度学习的分布式词嵌入又分为静态词嵌入(Word2Vec、GloVe、FastText)和动态词嵌入,后者又分为基于预训练静态词嵌入和LSTM的动态嵌入(CoVe、ELMo、ULMFit)和基于可训练静态词嵌入和Transformer的动态嵌入。详见本系列文章的Embedding专题

1.2 注意力机制Attention

但值得一提的是,Attention机制的Query查询Key-Value的架构来源于信息搜索领域(Information Extraction, IE),而注意力机制灵感来源于生物注意力。机制的核心是所有要素token之间的关注度评分,算法上将输入X通过三个权重可学习的矩阵变换为Q、K、V,将QK相乘后点积V,获得机器主体对sequence客体各部分的注意力评分。经过训练,机器可以知道主体对什么更感兴趣Q客体中什么更吸引注意力K观察到相应的K后获得的感官反馈是多少Q,非常符合人脑和人眼的感知机制。

在这里插入图片描述

经典的Transformer架构采用Self-attention和Cross-attention,两者又均使用了缩放点积注意力(Scaled Dot-Product Attention,SDPA),以及多头注意力(Multi-Head Attention,MHA)多组QKV。不久后,针对Attention特点,在工程上实现了对点积注意力的复用,即KV Cache机制。而后续针对Attention也出现了许多优化,例如多查询注意力MQA分组查询注意力GQAFlash Attention以及Page Attention页注意力,具体时间信息见文章AI简史(下):后深度学习时代(大模型时代)。在大模型中,Attention机制具有更好的并行计算性能,这是因为:

  1. 没有循环结构:传统的 RNN 结构在计算时需要逐个计算时间步,而 Transformer 模型采用了注意力机制,并没有循环结构,因此减少了计算时间的关联性,可以直接并行计算。
  2. 矩阵运算:注意力机制所需的张量乘法操作可以进行矩阵运算,可以利用高效的 GPU 加速。
  3. 上下文无关:Transformer 通过位置编码表达了输入单词间的位置信息,使得相同单词的嵌入表示是上下文无关的,可以在不同的位置和步骤之间并行计算。详见本系列文章的Attention专题

1.3 全连接层FCN

Transfomer Block中Attention模块后一定跟着一个全连接层,作用是让Attention层输出的特征向量的不同维度之间进行充分的交叉,让模型能够抓取到更多的非线性特征和组合特征的信息,这就使深度学习模型在表达能力上较传统机器学习模型大为增强。此外,大模型的MoE混合专家策略就是将MLP替换为稀疏门控制的MoE层。详见本系列的全连接层专题

1.4 输出层/分类器Output Layer

大模型本体是一个静态词向量模型+一堆上下文表示层(Transformer Blocks堆叠),并为不同的任务配备任务相关的输出层。因此可以看到,大模型工程文件本体的最终输出是一个seq_len、batch_size和hidden_size都与embedding后的输入一样的hidden_states。也就是说,一个输入序列在经过embedding以后,输入Transformer Blocks前后的shape是一样的。所以本质上大模型本体是一个先进的表示学习器。那么它是怎么用于后续任务的呢?以Qwen2为例,继承了Qwen2Model这个类的具体任务类有以下三个:

  • Qwen2ForCausalLM
    • 任务:因果语言模型,或者更直白一点,和GPT一样的生成式大模型,用于对话生成后续tokens。
    • 分类器:self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False),即和embedding形状相反的线性层。
    • 处理:将size = [batch_size, seq_len, hidden_size]的大模型输出,在分类器类中投影到词表空间,在while true逻辑中取最后一个token的Logits放入logits_processor。在实现上可以直接使用embedding层的转置(Tie Embedding共享向量技术)也可以单独训练一个。Untied Embedding相比之下,最后优化参数不一致,input tokens和output tokens对应的Embedding表示不一致,相当于学习了两套分类表示,理论上capacity更高,效果更好。
  • Qwen2ForSequenceClassification
    • 任务:序列分类,对整个输入序列进行分类。常见的应用包括情感分析、文本分类等
    • 分类器:self.score = nn.Linear(config.hidden_size, config.num_labels),输出维度是标签的个数。
    • 处理:根据size = [batch_size, seq_len, hidden_size]的大模型输出的表示进行多标签分类。
  • Qwen2ForTokenClassification
    • 任务:token分类,对输入序列的每个token的类型进行分类。
    • 其他同上。

2 非神经网络组件

2.1 分词Segmentation & Tokenization

分词属于NLP中的词法Lexical/形态Morphological分析任务,改任务包括分句分词Tokenization(Segmentation)、词干提取Stemming、词性标注POS Tagging。Segmentation通常指的是将一个长序列(如文本、音频、图像等)分割成若干个较短且语义上相关的子序列或单元的过程。包含分句、分词 (Word Segmentation/Tokenizer)等任务。分词方法可以分为基于规则的方法、基于统计的方法和基于深度学习的方法。基于规则的方法依赖于人工定义的词典和规则,而基于统计的方法则依赖于大规模语料库的学习。详见本系列的Tokenization专题

2.2 大模型常用位置编码Position Encoding

‌Self Attention具有排列不变性,意味着无论输入序列中元素的顺序如何变化,Self Attention机制的计算结果保持不变(即结果除了顺序对应变动外,对应token的hidden_states计算值是不变的)。‌这种特性使得Self Attention机制在处理输入数据时,能够关注到关键信息而忽略非关键信息的顺序变化,从而提高了模型的泛化能力。这种忽略顺序的能力是之前RNN类模型无法避免的(因为它们按照时间步串行),但是在对话生成任务中,词序(token序列)本身含有位序信息,因此在大模型中加入位置编码以保留序列中元素的相对位置信息。这使得模型在处理顺序敏感的任务(如机器翻译、文本生成、文本分类等)时更加准确和有效。

如果从零设计一个大模型,最佳实践到底用什么position encoding其实还没有定论。RoPE和ALiBi目前看都是可尝试的对象,需要根据模型结构和数据进行实验验证。目前看来,经典架构如早期BERT类/语音模型都使用固定位置编码Sinusoidal,Llama/GLM/Qwen用Rotary旋转位置编码,Falcon/Baichuan使用ALiBi。详见本系列文章的位置编码专题

2.3 大模型常用归一化Normalization

原始Transformers归一化层放在attention和MLP后,现在主流都放在两者前面,即Attention前后都是归一化。归一化又称标准化,标准化技术主要是为了解决参数过大或过小以及其引发的梯度爆炸等问题。标准化技术通常会调整模型的输入或者是中间输入(层和层之间传递的值),调整方法通常是改变参数的分布(最常用的是将输入调整到均值为0,方差为1)。常见的Norm手段包括Batch normalization,Layer normalization、Instance normalization、Group normalization、RMSNorm。其中RMS(均方根归一化)有可学习参数(缩放因子),以参数向量的形式保存,是当前大模型中主流采用的归一化实现,是在Layer Norm之上的改进,它通过舍弃中心不变性来降低计算量。详见本系列文章的归一化专题

2.4 大模型常用激活函数

如果softmax不算的话(attention score要softmax至和为1),一般只用于全连接层(FNN/MLP)中间,主要有两个功能:

  • 引入非线性因素
  • 将输出约束到指定空间和分布

目前主要有Swish/SiLU和SwiGLU两中最受欢迎的激活。详见本系列文章的激活函数专题

2.5 其他

输入配套组件:attention_mask和position_ids,都服务于Batch

  • attention_mask在推理时mask掉batch输入的padding token,在训练时还用于控制注意力方向
  • position_ids在推理时主要表示一个token在一个序列中的index,用于识别哪个令牌位于哪个位置

随机失活Dropout:2012,Hinton,缓解过拟合问题,仅用于训练阶段。深度模型的结构中,当前层神经元的输入是上一层神经元的输出,神经元的相互依赖使它们在训练过程中协同适应,而非彼此独立。当一些神经元学习效果强时,其它神经元对其依赖性增强,导致模型过于依赖某些神经元的输出,从而导致模型过拟合。为了缓解神经元的协同适应带来的过拟合,通过在训练过程中随机丢弃神经元的方式,减弱不同神经元的相互依赖性,提高模型的泛化能力。

残差连接Residual:2015,何恺明,缓解梯度消失问题。是一种通过引入跨层的直接连接来优化深度神经网络的方法,Residual是残差、残余的意思,在统计学中残差是指预测值和观测值之间的差距,误差则是观测值与真实值之间的差距。残差连接的核心思想是引入一个shortcut(近路、捷径)或skip connection,允许输入信号直接绕过一些层,并与这些层的输出相加。这样,网络不再需要学习将输入映射到输出的完整函数,而是学习一个残差函数,即输入与期望输出之间的差异。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值