引言
-
突出性能:语言理解、生成、多语言熟练程度、代码(重点提高)、数学(重点提高)和推理(间接提高)
-
评测集:MMLU(科学知识)、GPQA(科学知识)、HumanEval(代码)、GSM8K(数学)、BBH(通用)、MT-Bench(多轮能力)、Arena-Hard(通用)、LiveCodeBench(代码)
-
监督微调和直接偏好优化(DPO),赋予模型有效遵循指令的能力
分词器和模型设计
byte-level byte-pair encodning 较高的编码效率,进而提升了多语言理解能力
Qwen报告中提到,选择open-source fast BPE tokenizer-tiktoken,初始词汇表为 cl100k base,为了多语言能力,还将中文常见字词和其它语言的常见词加入到词汇表中,并将数字拆分为个位数,最终词汇量为512Kraw.githubusercontent.com/weikang-wang/ChatGPT-Vocabulary/main/cl100k_base_vocab.json
Dense模型设计(相较于Qwen)
1. 分组查询注意力GQA代替多头注意力GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
前置内容:Multi-query attentionFast Transformer Decoding: One Write-Head is All You Need
即不同的attention head共享一份keys和values权重, 推理速度上生成一个token时MHA和MQA的encoder分别耗时1.7us和1.5us,而decoder分别46us和3.8us,说明decoder上MQA比MHA快很多。另外在效果上MQA的PPL(越小越好)有所上升,BLEU(越大越好)有所下降,换句话说就是效果有所下降。
decoder生成任务相比较encoder任务收益明显大很多,来源于每一次softmax(QK)V注意力计算微小耗时差异的累积(同时处理所有query),一次生成任务要生成许多个token,一个token需要经历模型结构层数次的softmax(QK)V注意力的计算。
适中数量的组使得GQA的质量高于MQA,但比MHA更快,这代表了一个有利的权衡。
2. 使用双块注意力DCA拓展上下文窗口Training-Free Long-Context Scaling of Large Language Models
提出DCA是为了避免长序列微调大模型的昂贵开销
核心方法三部分:
- Intra-Chunk Attention: 用于计算相同块内词元的注意力分数——直接截断
- Inter-Chunk Attention: 用于计算不同块之间词元的注意力分数——为了确保query的位置索引大于key(因果),对query采用新的位置索引(常数,预训练的上下文长度c - 1)
- Successive-Chunk Attention: 用于计算相邻块之间词元的注意力,并保持局部性。
可以看到(b)中,k5和q6之间的相对位置距离为4,但实际上绝对距离为1。为了保持局部性,此处再对query的位置索引进行修改,使得连续块的局部相对位置差等于绝对位置差。
3. 使用YARN重新调整注意力权重,以获得更好的长度外推
Position Interpolation
在相邻的整数位置上插值位置编码,把没见过的位置映射到见过的位置(缩放)。目标长度是原来的n倍,则旋转弧度减小至原来的1/n。
存在的问题:针对绝对位置m,插值对每个维度都同等生效。由图第二段可知,维度靠前,旋转的角度大,插值后间隔变化要大得多,影响模型的位置区分能力。(模型需要重新适应拥挤的映射关系,尤其是高频处差异和低频相比很突出,这种不对等的差异会加剧模型的学习难度)
NTK-Aware Interpolation
增大RoPE的base(引入参数λ),保留高频信息;高频分量旋转速度降幅低,低频分量旋转速度降幅高;在高频部分进行外推,低频部分进行内插。
位置n的最低频角度为
对于最低频保持内插,需要使引入参数后的角度和原内插角度相同(k为缩放倍数)
位置n的最高频角度为
NTK-by-parts Interpolation
不改变高频部分,仅缩小低频部分的旋转弧度。因为对于某些维度,引入参数后,可能轻微被外推到超出边界的值,即
--如何界定高频低频?
高维数据由于旋转角度小,对于一定的预训练模型上下文长度,可能还没有完整的走完一个周期,不同位置之间的差异小,每个位置的嵌入不因相对位置变化而变化——需要进行改变
低维数据由于旋转角度大,可以走很多个周期,此时不同位置之间的绝对位置已经模糊(不断重复),使得这些维度上的嵌入反映的是相对位置信息
中间维度则既可以学习到绝对位置信息也可以学习到相对位置信息
--如何改变?
高维插值创建更细粒度的编码,有助于模型学习到更精确的位置感;对于中间维度,动态帮助其学习更精确的位置感(NTK-Aware Interpolation)。总的来说高维插值既能帮助模型学习到更精确的位置感,又不会大幅影响模型的位置区分能力(低维插值),而且还能扩展上下文
Dynamic NTK Interpolation
推理长度小于等于训练长度时,不进行插值(插值会影响效果);推理长度大于训练长度时,每一步都通过NTK-Aware插值动态放大base,即序列长度越长旋转弧度越小。
YaRN
NTK-by-parts Interpolation与注意力分布修正策略的结合,通过温度系数修正注意力分布。
以上几个方法本质都是通过减小旋转弧度扩展长度,词向量之间的距离变近点乘变大,破坏了模型原始的注意力分布,性能受损。所以提出使用温度系数修正注意力分布,只需将原来的注意力分布除以温度t即可。
4. 使用SwiGLU进行激活(Qwen)
Swishβ(x)=xσ(βx),β是可学习参数
优点:
- GLU的门控特性,提升模型的能力
- 可学习参数多,增强了模型的灵活性和适应性
- swish和GELU相比计算复杂度更低
- swish和Relu相比,所有点都可微,对于负值的输出不是常数0
5. 使用旋转位置嵌入RoPE进行位置嵌入(Qwen)
对于 token 序列中的每个词嵌入向量,首先计算其对应的 query 和 key 向量
然后对每个 token计算对应的旋转位置编码,即得到token所有维度的sin位置编码和cos位置编码(假定output_dim = 512)。下图为第一个token的例子,此时m=0
接着对每个 token 位置的 query 和 key 向量的元素成对应用旋转变换,得到position embedded query and key。此处是否取相邻维度应用旋转变换不重要。
最后再计算 query 和 key 之间的内积,value不参加RoPE改造,得到 self-attention 的计算结果
本质上:
RoPE是对各个位置的token向量根据自身位置m计算角度做逆时针旋转,在Attention的内积操作中,内积能够感知到旋转之后两个向量之间的夹角(内积等于模长*cosθ,归一化需要除以模长,就可以知道角度θ),这个夹角就是相对位置信息!!!
6. QKV bias for attention(Qwen)——注意力局部化,提高模型的外推性。
预测时,若序列长于训练序列长度,更多的token去平均注意力,意味着最后的分布相对来说越“均匀”(熵更大),即注意力越分散,所以会影响模型的性能——引申出需要长度外推性
而加上QKV bias后:(R为旋转矩阵)
其中,第一项和第四项呈现出关于|m−n|递减的趋势(Sandwitch),加到注意力矩阵上后,能够起到局部化注意力的作用,从而可能提高模型的长度外推性;
第二项第三项的分析如下图所示:
7. RMSNorm(均方根层归一化)和pre-normalization for training stability数据输入前归一化(Qwen)
LayerNorm(层归一化):针对一个样本的所有特征计算均值和方差,并对样本进行归一化。
作用:
1. 保持每一层输出的均值和方差稳定,使得梯度传播更加稳定
2. 减少网络对于数据分布的依赖,降低过拟合风险,提高模型的泛化能力
LayerNorm每次需要计算均值和方差,RMSNorm就是移除μ的计算部分,仅使用均方根来对输入进行归一化
MOE模型设计(Mixture-of-experts model)
前置内容:MOE
全网最细致大模型MoE原理+代码手撕版-CSDN博客0 来源于:大猿板砖简记
MOE就是将Transformer中的FFN层替换成MoE-layer,每个MoE-layer由一个gate和若干个experts组成,其中gate和每一个expert可以理解成线性神经网络。
作用是什么:
1. expert:术业有专攻,原来一个FFN处理所有内容,现在是若干个expert处理各自擅长的内容(扩大模型规模的同时保证计算量是非线性增加的,因为每个token只用k个expert)
2. gate:通过gate将token传送到对应的expert上。若输入数据维度是(batch, seq_len, d),经过gate后得到(batch, seq_len, expert_num),即每个token送到每个expert的概率
Expert Granularity
传统:每个专家的参数设置为原始Dense模型中单个FFN的参数(直接策略,一次只激活一个)
Qwen2采用细粒度专家Expert Granularity,创建较小规模的专家,同时激活较多数量的专家,提供更丰富的专家组合集,提高整体性能和适应性;
Expert Routing
DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models
1. transformer:
2. 传统的top-2 routing:每个token有top1 expert和 top2 expert,输送到top1 和 top2 expert后,加权和得到token的输出
缺点:多样性不够
3. fine-grained expert segmentation:更多的组合可能,代表更准确的知识获取。
对于典型的top-2 routing,当expert为16时,共有120种组合方式
加入每个expert分为4个小的expert,共有4426165368种组合可能
4. fine-grained expert segmentation + shared expert isolation(Qwen2):将一部分专家隔离出来作为共享专家,这些共享专家总是被激活,旨在捕获和整合不同上下文中的共同知识。从而减轻其他专家之间的参数冗余,提高参数效率,并确保每个专家专注于其独特的方面。
在 MoE 层内集成共享专家和特定于路由的专家已成为一个显著趋势。它有助于共享专家在各种任务中的应用,同时保留其他专家在特定场景中选择性使用。
Expert Initialization
先设定n个expert,每个expert的intermeidate size hE,已知每个FFN的intermediate size hFFN,可以知道需要复制 math.ceil(n * hE / hFFN)个FFN。为了保证FFN的多样性,沿着中间维度(输出特征维度)对FFN的参数进行打乱,提取n个专家并丢弃剩余维度。对于每个专家,50%的参数被随机重新初始化,引入一定随机性。
模型配置
值得注意的是,Qwen2相较于Qwen1.5每个token有较低的key-value size(可能是较少的KV Heads或较小的维度)。这种特征可减少内存占用,在长上下文推理任务中特别有利。
继续更新。。。。
最后附上Qwen2模型结构图 从零手搓大模型