目录
一、multi-head 共享
二、attention结构
1.传统的Tranformer结构
2.GPTJ —— 平行放置的Transformer结构
三、归一化层位置的选择
1.Post LN:
2.Pre-LN【目前主流】:
3.Sandwich-LN:
四、归一化函数选择
1.传统的归一化函数 LayerNorm
2.RMSNorm
五、激活函数
六、LLama2结构
七、MoE架构 混合专家模型
SWITCH TRANSFORMERS
八、DeepSeek Moe
九、位置编码和长度外推性
1.为何需要位置编码
2.长度外推性
3.目前的主流位置编码
Ⅰ、正余弦位置编码
Ⅱ、可学习位置编码
Ⅲ、ROPE相对位置编码
Ⅳ、Alibi位置编码
① 相对位置矩阵生成
② 头特定斜率参数
③ 偏差矩阵计算
④ 偏差注入与注意力计算
Ⅴ、总结
十、DeepSeek MLA —— Multi - head Latent Attention(多头潜在注意力)
I will love you in your freezing night
Please just hold me tight
—— 25.3.27
大语言模型都是基于transformer结构来做
一、multi-head 共享
Values:10×64
Keys:10×64
Queries:10×64
多头注意力(MHA) —— 12个头:
缩小Key和Value,多查询注意力(MQA) —— 1个头:
缩小Key和Value,分组查询注意力(GQA) —— 4个头:
效果随头的数量减少而减弱,减少运算量,加速训练
二、attention结构
1.传统的Tranformer结构
多层感知机(MLP)位于多头自注意力机制之后,对自注意力机制输出的特征表示进行进一步的非线性变换。自注意力机制虽然能够有效地捕捉序列中的长距离依赖关系,生成丰富的上下文感知表示,但这些表示可能仍然需要进一步处理,以更好地适应下游任务。MLP 通过将输入特征映射到一个更高维的空间,然后再投影回原始维度,能够增强特征的表达能力,使模型能够学习到更复杂的模式。
公式:
MLP(多层感知机)的作用是:对经过注意力机制和层归一化处理后的特征进行非线性变换
流程:
① 第一次层归一化:对输入 x 进行层归一化(LayerNorm),得到 LayerNorm(x),稳定数据分布。
② 注意力计算:将 LayerNorm(x) 输入到注意力模块(Attention),计算 Attention(LayerNorm(x)),捕捉序列依赖关系。
③ 第一次残差连接:将 x 与 Attention(LayerNorm(x)) 相加,即 x + Attention(LayerNorm(x)),保留原始信息并促进梯度传播。
④ 第二次层归一化:对残差连接结果进行层归一化,得到 LayerNorm(x + Attention(LayerNorm(x)),再次稳定数据分布。
⑤ MLP 变换:将 LayerNorm(x + Attention(LayerNorm(x))) 输入到多层感知机(MLP),通过非线性变换提取高级特征,得到 MLP(LayerNorm(x + Attention(LayerNorm(x))))。
⑥ 第二次残差连接:将原始输入 x 与 MLP 的输出相加,得到最终结果 y = x + MLP(LayerNorm(x + Attention(LayerNorm(x)))),融合原始信息与处理后的特征。
MLP的核心作用:
① 增加非线性:MLP 通过激活函数(如 ReLU)引入非线性,使模型能学习更复杂的映射关系。
② 特征变换与融合:对注意力处理后的特征进行二次加工,整合不同维度的信息,提升特征的表征能力。
③ 配合残差连接:最终输出 y 再次通过残差连接(x + MLP(⋅)),确保原始信息不丢失,同时促进梯度传播,防止训练中的梯度消失问题。
2.GPTJ —— 平行放置的Transformer结构
GPTJ结构,平行放置attention layer和feed forward layer
moss, palm用的这种结构,目前不算太主流
公式:
流程:
① 层归一化:对输入 x 进行层归一化(LayerNorm),得到 LayerNorm(x),稳定特征分布。
② 并行处理:
将 LayerNorm(x) 输入到 MLP 模块,计算 MLP(LayerNorm(x)),通过非线性变换提取特征。
将 LayerNorm(x) 输入到 Attention 模块,计算 Attention(LayerNorm(x)),捕捉序列依赖关系。
③ 残差融合:将原始输入 x、MLP 的输出、Attention 的输出相加,即 y = x + MLP(LayerNorm(x)) + Attention(LayerNorm(x)),实现信息融合与残差连接,保留原始信息并促进梯度传播。
三、归一化层位置的选择
1.Post LN:
流程:先进行子层计算,再对子层输出进行层归一化,最后残差连接。
特点:子层输出可能因未归一化而波动较大,深层训练时稳定性较差,但早期 Transformer 架构常用此方式。使用post-LN的深层transformer容易出现训练不稳定的问题。
2.Pre-LN【目前主流】:
流程:在进入子层(如注意力层或 MLP 层)之前先进行层归一化
特点:使每个子层的输入分布稳定,缓解梯度消失问题,便于深层模型训练;相比于Post-LN,使用Pre-LN的深层transformer训练更稳定,可以缓解训练不稳定问题;相比于Post-LN,Pre-LN的模型效果略差。
3.Sandwich-LN:
流程:在子层的输入和输出端都应用层归一化,形成 “三明治” 结构。
在pre-LN的基础上,额外插入了一个layer norm
Cogview用来避免值爆炸的问题。
特点:结合 Pre - LN 和 Post - LN 的优势,进一步稳定特征分布,同时增强模型对特征的表达能力
缺点:训练不稳定,可能会导致训练崩溃。
四、归一化函数选择
1.传统的归一化函数 LayerNorm
2.RMSNorm
目前主流做法是:将Norm层提前到attention之前
五、激活函数
FeedFoward层所使用激活函数的演进
初始Transformer:relu()
Bert:gelu()
目前最主流的激活函数:Swish()
六、LLama2结构
分词器:使用字节对编码(BPE)算法,词汇表大小为 32,000 tokens,支持多语言文本的高效编码。
① 初始化词汇表:把文本中所有单词分解成最小字符单位,这些字符构成初步词汇表 。比如单词 “look” 会被分解为 “l”“o”“o”“k”。
② 统计字符对频率:遍历文本,计算每对相邻字符出现的频次。例如在单词 “look” 中,字符对为(“l”,“o”)、(“o”,“o”)、(“o”,“k” ) ,在整个文本范围内统计它们出现的次数。
③ 合并最频繁字符对:找出出现频率最高的字符对,将其合并成一个新符号。比如统计后发现 “lo” 出现频率最高,就把 “l” 和 “o” 合并为 “lo” 。
④ 更新文本和词汇表:在文本中把所有该字符对的实例替换为新合并的符号,同时更新词汇表。如 “look” 变为 “lo”“ok” ,词汇表中新增 “lo”。
⑤ 重复迭代:不断重复步骤 2 - 4 ,直到达到预设的词汇表大小,或者字符对不再频繁出现。
位置编码:采用旋转位置编码(RoPE),通过旋转矩阵实现相对位置关系建模,支持上下文窗口扩展至 4096 tokens。
预归一化:在每个 Transformer 层的输入前应用RMSNorm(均方根归一化),而非传统的 LayerNorm,提高训练稳定性和收敛速度。
多头注意力(MHA):
分组查询注意力(GQA):在 70B 版本中,将查询头分为 G 组,每组共享键(K)和值(V)投影。例如:70B 模型采用 32 组,每组 2 个查询头,总头数 64 个。这种设计减少了内存占用,尤其在长序列推理时优势显著1315。
多查询注意力(MQA):7B 和 13B 模型采用 MQA,所有查询头共享同一组 K 和 V,进一步降低参数规模315。
前馈网络(FFN):使用SwiGLU 激活函数,公式为SwiGLU(x) = x * σ(β * x) * W
,其中 σ 为 Sigmoid 函数,β 为可学习参数。相比 ReLU,SwiGLU 在保持非线性能力的同时提升了模型表达能力。
语言建模头:通过线性层将最终隐藏状态映射到词汇表空间,输出下一个 token 的概率分布。
七、MoE架构 混合专家模型
MOE 的核心思想是将复杂任务分解为多个 “专家” 子模型,每个专家专注于处理特定类型的输入,通过门控机制动态决定输入数据由哪些专家处理
输入层:将原始数据编码为特征向量。
门控网络(Gating Network):计算每个输入分配给不同专家的概率。
实现方式:
① 软门控:使用 Softmax 或 Sigmoid 函数计算概率,允许多个专家共同处理输入(如 Google Switch Transformer)。
② 硬门控:仅选择一个专家处理输入(如 BERT-MOE)。
负载均衡:通过正则化(如 L2 损失)避免某些专家过载。
专家网络(Expert Network):多个独立的子模型,每个专家负责处理特定类型的输入。
结构:每个专家是一个独立的神经网络(如 MLP、Transformer 块),可共享或独立训练。
多样性:不同专家可学习不同的特征模式,例如一个专家擅长处理文本分类,另一个擅长翻译。
并行计算:输入仅激活部分专家,减少冗余计算。
输出层:整合专家的输出结果,生成最终预测。
SWITCH TRANSFORMERS
MoE架构,会带来分类预测和整体模型的参数数量不同
八、DeepSeek Moe
除了随机挑选专家外,还有一位专家总是在工作(一位专家主要做工作,其余随机挑选的专家进行改进)
如图所示,增加了“共享专家”,总是会使用这个“专家”进行计算,其余的按照传统Moe方式由模型自己随机进行挑选
九、位置编码和长度外推性
1.为何需要位置编码
由于transformer中使用的都是线性层,编码过程中没有明显的位置信息
字词位置的交换,仅相当于矩阵中行位置的交换
这带来并行计算的优势,但是也弱化了语序信息
因此需要引入位置编码来弥补
如果不引入位置编码,当语序位置不同时,最终归一化后也并不能体现出差异;
引入位置编码,当语序改变时,每个位置位置编码的权重值不同,整体相乘后,值也会发生变化;
2.长度外推性
预测时序列长度比训练时候长,模型依然有好的表现,称为有较好的长度外推性
比如: 训练样本最大长度为512;预测过程中输入的样本长度为1024
长度外推性是一种理想的性质,并非是必要的
3.目前的主流位置编码
相对位置编码是目前LLM的主流
RoPE是相对位置编码的主流
Ⅰ、正余弦位置编码
优点:① 理论上可以进行一定程度的外推,但是效果不是很好 ② 是一个固定的位置编码
位置编码向量 + token向量 得到编码后的embedding
我们称之为Positional Encoding
Ⅱ、可学习位置编码
一般称为position embedding,以Bert为代表
如同token embedding一样,随机初始化之后,靠梯度更新学习调整
缺点:无法外推,需要预设最大长度
Ⅲ、ROPE相对位置编码
ROPE(Rotary Position Embedding,旋转位置编码)是一种结合绝对位置编码与相对位置编码优势的技术,通过旋转矩阵将位置信息融入自注意力机制,使模型能显式学习相对位置关系。
ROPE 对查询(Q)和键(K)向量的每个偶数 - 奇数维度对进行旋转:
相对位置编码在计算Self-attention时做这个注意力矩阵
公式:
相对位置编码需要找到符合如下条件的f、q函数:
x_m:输入的Embedding
m:相对位置
f_q:对x_m和相对位置m做的一种变换
x_n:输入的Embedding
n:相对位置
f_k:对x_n和相对位置n做的一种变换
g:对于q和k做上述变换后再做内积得到的一种相对位置编码
施加在Transformer每一个q、k相乘计算之后使用,没有长度限制,只与传入的m、n值有关,计算其差值
最后找到的函数:
—— Re代表[值]的实数部分
Ⅳ、Alibi位置编码
ALiBi(Attention with Linear Biases)是一种非学习型相对位置编码方法,通过在注意力分数中注入线性偏差来隐式编码序列的相对位置关系。其核心思想是利用注意力机制的数学特性,在不引入额外参数的情况下提升模型对长序列的处理能力。
ALiBi 的核心是在注意力分数计算阶段直接添加位置偏差,而非通过位置嵌入或旋转操作。
① 相对位置矩阵生成
② 头特定斜率参数
③ 偏差矩阵计算
④ 偏差注入与注意力计算
公式:
值越大,两位置差距越大,值越小,两位置差距越小
多个头时,乘以不同的系数值
Ⅴ、总结
对于文本类NLP任务,位置信息是很重要的
可学习的位置编码缺点在于没有长度外推性
相对位置编码不需要学习,有一定的长度外推性,但是相对位置编码具有天然的远程衰减性
目前的主流是RoPE和Alibi两种相对位置编码
十、DeepSeek MLA —— Multi - head Latent Attention(多头潜在注意力)
主要着重于self-attention的重点
通过一个大的线性层计算Q、K
将Q、K拆分为Q1,Q2和K1和K2,
Q1,K1过RoPE相对位置编码,Q2和K2不过RoPE相对位置编码
然后将Q1和Q2相加,K1和K2相加
Q、K拆分的比例通过实验确定
效果: