![cover](https://img-blog.csdnimg.cn/direct/9c8f11c318b04c6e9df6aa62bec7686b.png)
qwen2理论/改进点
除英语和中文外,还接受过 27 种语言的数据培训显着提高编码和数学表现;Qwen2-7B-Instruct 和 Qwen2-72B-Instruct 的扩展上下文长度支持高达 128K 令牌更详细的benchmark建议去看官网blog。
概述
改进点
- 除英语和中文外,还接受过 27 种语言的数据培训
- 显着提高编码和数学表现;
- Qwen2-7B-Instruct 和 Qwen2-72B-Instruct 的扩展上下文长度支持高达 128K 令牌
更详细的benchmark建议去看官网blog
技术
- 全系列采用了GQA,提高预测速度、减小显存占用(分组查询注意力 (Grouped Query Attention) 是一种在大型语言模型中的多查询注意力 (MQA) 和多头注意力 (MHA) 之间进行插值的方法,它的目标是在保持 MQA 速度的同时实现 MHA 的质量 )
- 两个小模型采用了Tie sparse embeding作为很大一部分参数(针对小模型,由于embedding参数量较大,使用了tie embedding的方法让输入和输出层共享参数,增加非embedding参数的占比 )
- 全系都是在32k上下文预料上做预训练,然后部分模型通过YARN外推或者Dual Chunk Attention.
- 除去常规的预训练、sft对齐外,还采用了在线DPO训练,各种自动对齐策略:如例如数学的rejection sampling、编码和指令遵循的执行反馈、创意写作的反向翻译、角色扮演的 scalable oversight等,
- 采用了Online Merging Optimizer最小化对齐税
模型结构
一、使用AutoModelForCausalLM类打印模型结果
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2-7B-Instruct')
from transformers import AutoTokenizer, AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(model_dir)
print(model)
Qwen2的模型结构如下
Qwen2ForCausalLM(
(model): Qwen2Model(
(embed_tokens): Embedding(152064, 3584)
(layers): ModuleList(
(0-27): 28 x Qwen2DecoderLayer(
(self_attn): Qwen2SdpaAttention(
(q_proj): Linear(in_features=3584, out_features=3584, bias=True)
(k_proj): Linear(in_features=3584, out_features=512, bias=True)
(v_proj): Linear(in_features=3584, out_features=512, bias=True)
(o_proj): Linear(in_features=3584, out_features=3584, bias=False)
(rotary_emb): Qwen2RotaryEmbedding()
)
(mlp): Qwen2MLP(
(gate_proj): Linear(in_features=3584, out_features=18944, bias=False)
(up_proj): Linear(in_features=3584, out_features=18944, bias=False)
(down_proj): Linear(in_features=18944, out_features=3584, bias=False)
(act_fn): SiLU()
)
(input_layernorm): Qwen2RMSNorm()
(post_attention_layernorm): Qwen2RMSNorm()
)
)
(norm): Qwen2RMSNorm()
)
(lm_head): Linear(in_features=3584, out_features=152064, bias=False)
)
结构图
区别
- 网络结构:无明显变化
- 核心网络Qwen2DecoderLayer层:由32层减少为28层(72B是80层)
- Q、K、V、O隐层尺寸:由4096减少为3584(72B是8192)
- attention heads:由32减少为28(72B是64)
- kv head:由32减少为4(72B是8)
- 滑动窗口(模型尺寸):由32768(32K)增长为131072(128K)(72B一样)
- 词表:由151936增长为152064(72B一样)
- intermediate_size(MLP交叉层):由11008增长为18944(72B是29568)
可以看到其中有的参数增加有的参数减少,猜想是:
减少的参数,并不会降低模型效果,反而能增加训练和推理效率,
增大的参数:比如MLP中的intermediate_size,参数越多,模型表达能力越明显。
二、Qwen2 技术修改点
Transformer Architecture with SwiGLU activation: 不多说,最主流的transformer架构,不变。但是,SwiGLU激活函数是GLU变体,可以让模型学习表达更加复杂的模式。
QKV bias:在Transformer模型中,Q、K、V分别代表查询(Query)、键(Key)和值(Value)。这些向量是通过输入向量与对应的权重矩阵相乘得到的。QKV bias表示在计算Q、K、V时添加可学习的偏置项。
GQA:Grouped-query attention,它是一种插值方法,介于多查询和多头注意力之间,可以在保持接近多头注意力的质量的同时,达到与多查询注意力相当的速度。
Mixture of SWA and Full Attention: SWA指的是Sliding Window Attention,是一种注意力模式,用于处理长序列输入的问题。而full attention则是传统的注意力机制,考虑序列中所有元素的交互。这里的mixture可能指的是这两种注意力机制的结合使用。
Improved Tokenizer Adaptive to Multiple Natural Languages and Code: 这说明模型使用了一种改进的分词器,它不仅适用于多种自然语言,还能处理代码。在自然语言处理和编程语言处理中,分词器用于将文本分解成更小的单位(如词、字符或其他符号),这是理解和处理文本的基础步骤。
三、Qwen2核心类
- Qwen2RMSNorm: RMS归一化层
- Qwen2RotaryEmbedding: 旋转位置编码,和Qwen1不同.Qwen1可以对部分位置做旋转位置编码
- Qwen2MLP: 全连接层,lora和MOE主要在这个层上做事情
- Attention
- Qwen2Attention: 注意力层
- Qwen2FlashAttention2: 使用Flash Attention 2.0版本加速的注意力层
- Qwen2SdpaAttention: 使用Sdpa(pytorch自带的加速, Scaled Dot-Product Attention)加速的注意力层 - Qwen2DecoderLayer: 编码层,核心结构,之后就是堆叠 - Qwen2PreTrainedModel: 预训练类
- Qwen2Model: 不带head的Qwen2模型
- Qwen2ForCausalLM: 带Causal LM head的Qwen2模型 - Qwen2ForSequenceClassification: 带序列分类头的Qwen2模型
更多推荐
所有评论(0)