Qwen
Qwen:使用了3T token, 数据包含多样化各个领域的文本和代码。
数据
- 网页数据:先从HTML中抽取文本,并用语言识别工具识别语种和内容。
- 去重技术提升数据多样性:包括归一化后的精确匹配删除,以及使用MinHash、LSH算法的模糊数据删除。
- 过滤低质量数据:基于规则和机器学习的方法,使用多个模型对内容进行打分(语言模型、文本质量评分模型、识别潜在攻击性或不当内容的模型等),同时也会通过人工对各种来源的文本进行采样并进行审核以确保质量。
- 有选择的对某些来源的数据进行上采样:确保模型接受到各种高质量内容的训练。
- 预训练加入高质量的多任务数据:研究表明,使用多任务质量数据可以增强zero-shot,few-shot能力。
- 确保评估公平性:将相关训练数据从评测集中删除。(采用13-gram overlap)
分词器
词汇表的设计显著影响模型的训练效率和下游任务的性能,Qwen采用BPE分词器方法(遵循GPT-3.5和GPT-4),从开源的快速BPE Tokenizer, tiktoken开始,并选择词汇表cl100l为基础作为起点,用常用汉字、短语以及其他语言的单词来增加词汇量以便增强多语言的性能(这里特别说明对中文词汇进行了增加),最终词汇表的大小为152K。
模型结构
Qwen是使用Transformer的修改版本设计的,具体来说,是采用了LlaMA的架构设计,Qwen对架构的修改包括以下几个方面:
- 嵌入层和输出映射(Embedding and output projection):根据初步的实验结果,选择了不受限嵌入方法,而不是捆绑输入嵌入和输出投影的权重。
- 位置编码(Positional embedding):选择RoPE作为将位置信息纳入模型的首选。Qwen选择使用 FP32 精度作为逆频率矩阵,而不是 BF16 或 FP16,以便优先考虑模型性能并实现更高的精度。
- 偏置(Bias):在 QKV 注意力层中添加偏置以增强模型的外推能力。
- 归一化(Pre-Norm & RMSNorm):文中提到现代Transformer模型广泛使用前置归一化(Pre-Norm),得益于Pre-Norm使得训练更加稳定(更容易训练),最新的研究也提出了一些提高训练稳定性的替代方法(计划在未来Qwen系列模型中进行探索),Qwen已将传统归一化方法替换为RMSNorm(RMSNorm是LayerNorm的一个变体),在相同的性能下提高了效率。
- 归一化方法参考:大模型归一化方法
- Pre-Norm和Post-Norm:
- 激活函数(Activation function):采用SwiGLU作为激活函数,它是Swish和门控线性单元的组合。初步实验验证,基于GLU的激活函数效果优于基于其他基线的选项,比如GeLU研究中的常见做法,将FFN的维度从隐藏层大小的4倍减少为8/3倍。
- 激活函数:大模型激活函数
扩展上下文
Qwen实现了简单的免于训练的技术可以在预测阶段扩展上下文长度。关键技术之一是NTK感知插值,不同于位置插值(PI)需要对RoPE的每个维度进行均等缩放,NTK感知插值调整RoPE基数防止在免训练模式下高频信息丢失。进一步提升性能,实现动态NTK-感知插值,按照块动态改变规模,以避免严重的性能下降,这些技术可以有效扩展Transformer模型的上下文长度,且不损害计算效率和准确性。
Qwen2
源码:https://github.com/huggingface/transformers/tree/v4.39.3/src/transformers/models/qwen2
模型结构
模型结构基于Transformer实现,并且包括因果掩码的自注意力机制。实现4个不同大小的DenseModel和1个MOEModel。
Qwen2 Dense Model
由多个Transformer层构成,每层包含因果注意力机制和前馈神经网络FFNs, 相比之前系列主要不同有:
- 分组查询注意力(Grouped Query Attention,GQA):分组查询注意力(GQA)取代传统的多头注意力(MHA)。 GQA优化推理过程中的KV缓存使用,显著提高吞吐。这种机制将多个query头组合在一起,共享同一组key和value矩阵。因此需要缓存的key和value矩阵就大大减少了,节省了内存占用。同时,推理时可以对多个query一起计算attention,显著提高了计算效率。
- 双块注意力结合YARN(Dual Chunk Attention with YARN):为了扩展上下文窗口,实现双块注意力(Dual Chunk Attention, DCA), 将长序列分割成可管理的块长度,如果输入可以在一个块中处理,DCA会产生与原始结果相同的结果注意力。DCA有利于有效捕捉块内、块间的不同Token的相对位置信息,从而提高长上下文性能。此外,还使用YARN重新调整注意力权重以获得更好的长度外推。
激活函数仍然使用SwiGLU, 位置编码使用RoPE, Attention使用QKV偏置,RMSNorm前置归一化使得训练稳定。
双块注意力:双块注意力会把很长的输入序列切割成若干个“块”(chunk)。如果输入不太长,只需一个块就能处理,那么DCA就等同于普通的注意力机制。但如果输入很长,需要很多个块来处理时,DCA就会发挥作用。它不仅能捕捉每个块内部单词之间的关系,还能捕捉不同块之间单词的相对位置关系。
YARN (NTK-aware + NTK-by-parts + Dynamic NTK):YaRN是基于NTK-aware方法的进一步拓展,通过结合温度缩放和NTK-by-parts插值技术,全面提升长文本外推能力。
大模型位置编码:从ROPE到Yarn, 一条通用公式速通长文本大模型中的位置编码
参考文章:稳步前行的阿里云大模型——Qwen2凭什么蝉联榜首?
Qwen2 Mixture-of-exports Model
Qwen2 MOE模型架构和Qwen1.5-MoE-A2.7B的架构非常相似,MoE FFN取代FFN由n个独立的FFN构成,每个作为专家服务。每个Token都被定向到特定的专家Ei进行概率(基于门控网络G分配的概率)计算:
参考文章:https://zhuanlan.zhihu.com/p/21021458859
后训练数据
自动数据合成
维持大规模指令的标注响应数据的质量是具有挑战的,特别是那些需要专家、经验、仔细耐心标注的数据。应对这些挑战,我们设计了各种自动对齐策略来大规模合成数据。
- 拒绝采样:对于具有明确最终答案的数学或类似任务,应用拒绝采样提高质量。LLM的任务是为每条质量生成多个响应,即推理路径。那些可以导向正确结果切被模型认为是合理的路径会被保留,作为示例数据。通过相对正确和相对错误路径生成偏好数据。
- 执行反馈:对于代码类的任务,用LLM生成解决方案和相关测试用例。评估这些解决方案的方法是编译和执行测试用例,据此构建示例和偏好数据。这个方法也被应用于评估指令遵循的能力,对于每条具有约束的指令,比如长度限制等,用LLM生成Python校验方法确保结果是否跟指令对齐。
- 数据再利用:创建有技巧性的文学类写作任务对于没有经过专业训练的标注人员是有挑战的。为处理这类问题,我们从公开领域收集了高质量的文学作品以及使用LLM开发不同程度的细节指令,这些指令和原始作品一起作为示例数据。例如,要编译生动引人入胜的角色扮演响应,我们从维基百科等知识库中获取详细的角色简介,指导大模型生成相应指令和响应。这个过程,类似做阅读理解任务,维持确保角色个人信息的完整性。
- 宪法反馈:宪法AI是指引导大模型生成预先定义准则的响应的过程。为确保例如安全性和价值观的遵守,编制了宪法数据集。该数据集描述需要被遵循和被规避的准则。它被用来指导大模型生产对齐响应和背离响应,从而制作示例和偏好数据。
拒绝采样:拒绝采样的核心思想是让模型生成多个答案,然后只选择最优的答案来继续训练。
参考文章:模型结构-qwen2