QWEN2技术报告阅读笔记(第一部分,分词器和模型设计)

引言

  1. 突出性能:语言理解、生成、多语言熟练程度、代码(重点提高)、数学(重点提高)和推理(间接提高)

  2. 评测集:MMLU(科学知识)、GPQA(科学知识)、HumanEval(代码)、GSM8K(数学)、BBH(通用)、MT-Bench(多轮能力)、Arena-Hard(通用)、LiveCodeBench(代码)

  3. 监督微调和直接偏好优化(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

大模型长度扩展:直接外推, PI, NTK-aware, NTK-by-parts, Dynamic NTK, ALiBi, YaRN, S2-Attention - 幻影星全能的木豆 - 博客园 (cnblogs.com)

增大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)

一文通透位置编码:从标准位置编码、旋转位置编码RoPE到ALiBi、LLaMA 2 Long-CSDN博客

大模型系列:快速通俗理解Transformer旋转位置编码RoPE_rope旋转位置编码-CSDN博客

对于 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)——注意力局部化,提高模型的外推性。

Bias项的神奇作用:RoPE + Bias = 更好的长度外推性 - 科学空间|Scientific Spaces

预测时,若序列长于训练序列长度,更多的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模型结构图       从零手搓大模型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值