从Coder和Math看Qwen的下游任务适配流程

本文将介绍qwen-coder, qwen-math, qwq等模型
这些模型都是在基座模型基础上continue pretrain+post train获得的,因此其训练过程可以看做行业模型的适配流程;我将简单讨论这两年Qwen团队的适配技术,最后介绍一个旅游行业大模型的比赛和一些简单的思路

从版本发布的时间交叉可以看出,Code起步较早,应该是两个团队有些节奏差异

Coder系列

常用评测集: HumanEval 和 MBPP,LiveCodeBench (不断地从 LeetCode、AtCoder 和 CodeForces 三个竞赛平台中收集问题来测试模型的泛化能力)

Code-Qwen

we have created domain-specific models for coding by leveraging the base language models of QWEN, including continued pretrained model, CODE-QWENand supervised finetuned model, CODE-QWEN-CHAT.
新加入的Code tokens : 90B,规模不算大
为了处理Code任务的超长上下文(Tool use+code interpreation),拉长训练上下文到8K,同期qwen只有2K
多阶段的SFT,细节未能公开;从效果上看,超过了当时的开源模型,距离GPT4存在鸿沟

Qwen团队是在Pretrain Model的基础上研发的,没有考虑RLHF,自然不存在对齐税的问题,但这样的有害性仍有待考量;

Code-Qwen1.5

7B 参数的base和chat model,基于qwen1.5开发,其拥有 GQA 架构,经过了 ~3T tokens 代码相关的数据进行continue 预训练,共计支持 92 种编程语言、且最长支持 64K 的上下文输入。效果方面,CodeQwen1.5 展现出了非凡的代码生成、长序列建模、代码修改、SQL 能力

Qwen2.5 Coder

一句话总结: Qwen2.5-Coder-(0.5B/1.5B/3B/7B/14B/32B)。作为一个特定于代码的模型,Qwen2.5-coder建立在Qwen2.5架构之上,并继续在超过5.5万亿token的庞大语料库上进行预训练。效果上很不错,32B的模型接近4o的代码能力,但是livecodebench上差距不小,拿来做leetcode通过率较低。采用Fill-in-the-Middle技术预测中间缺失代码片段
在这里插入图片描述

模型架构

在这里插入图片描述
intermediate size的设置越来越trick了,以往设置为8/3倍比较符合直觉,但是现在看起来3-6都有例子,MLP的参数设计是否真的对模型效果存在正比例的影响?Hidden, MLP, Layer与Embedding size的参数敏感度是个值得研究的问题。

预训练细节

在这里插入图片描述
预训练包含文件级预训练和仓库级预训练两部分得到Coder-base Model
类似于通用模型如LLAMA的短文-长文两阶段训练,训练序列长度分别8K到32K,这一阶段使用高质量、长上下文的代码数据进行next-token预测,并拓展repo-level FIM

Fill in the Middle算法:
特殊token
在这里插入图片描述
FIM的训练方式仍然采用next-token prediction的范式,但是数据的format整理为前缀和后缀放在前面,OpenAI的论文Efficient Training of Language Models to Fill in the Middle鼓励自回归模型采用FIM进行默认的训练, we keep the loss on all three sections prefix, middle, and suffix, so FIM training does not cause a decrease in the autoregressive learning signal
在这里插入图片描述
可以看到仓库级别的FIM,在FIM的前面加上了很多相关的其他文件进行代码仓库的理解;训练上下文从8K-32K提升,用一下NTK内插提高ROPE base,最后用YARN调整模型可以处理128K长上下文

数据集构造:
多阶段过滤Fasttext的文本-代码混合数据(教程、文档博文等)
合成数据基于CodeQwen1.5生成->验证器过滤
Qwen2.5-math模型的语料数据,Qwen2.5原来的高质量通用数据, 代码数学文本分别721的比例混合

后训练细节

Instruction Data的构造充满了技巧和经验,包含大量来利用LLM本身生成数据的方式。

  1. 基于CodeBert的代码语言识别与过滤
  2. 开源指令微调数据McEval+Github代码片段和LLM生成指令与response的微调数据
  3. 多语言多Agent协作框架 构造多语言SFT数据:
  4. 全面的指令数据评分标准
  5. 代码片段评估沙盒

千万级别的一般质量多样化指令微调样本
百万级别的高质量指令微调样本
小部分的FIM数据集微调
combine the code DPO data and common data for offline DPO train, 基于沙盒与LLM判断response的好坏

评估细节

Math系列

Math-Qwen

没有pretrain,直接构造math的SFT数据,在qwen base的基础上得到两个不同参数规模的chat模型,报告中提到微调Sample都是1024长度内的考试题目,成本相比不高。

Qwen2 Math

基础模型使用 Qwen2进行初始化,然后在精心设计的数学专用语料库上进行预训练,该语料库包含大规模高质量的数学网络文本、书籍、代码、考试题目以及由 Qwen2 模型合成的数学预训练数据

微调模型: 首先基于 Qwen2-Math-72B 训练了一个数学专用的奖励模型。然后,我们将这个密集的奖励信号与一个二元信号结合,该二元信号指示模型是否正确回答了问题。这个组合信号被用作监督来通过拒绝采样构建 SFT 数据,并在此SFT模型的基础上进一步使用 GRPO 来优化模型
但我看Math的指标没有超过qwen-base多少,不知道实际提升有多大

Qwen2.5 Math

一句话总结:(1)在预训练阶段,利用Qwen2-Math-Instruct生成大规模、高质量的数学数据。(2)在训练后阶段,通过对Qwen2-Math-Instruct进行大量采样,开发了一个奖励模型(RM)。然后将该RM应用于监督微调(SFT)中的数据迭代演化。有了更强的SFT模型,就可以迭代地训练和更新RM,进而指导下一轮SFT数据迭代。在最终的SFT模型上,采用终极RM进行强化学习,得到Qwen2.5-Math-Instruct。(3)在推理阶段,利用RM指导采样,优化模型性能。

在这里插入图片描述

预训练

Math 语料库v1:
基于高质量数学seed数据训练了FastText分类器,进行数学数据检索
MinHash重复数据过滤
基于Qwen2通用模型评估数据质量过滤
基于Qwen2-72B通用模型提取、生成数学问答对
在Qwen2的小模型进行数据混合配比的消融实验研究,得到700B的v1数据集,上下文4K

Math 语料库v2:
用Qwen2-Math-72B-Instruct在优化后生成预训练数据
采集了更多的中文数学数据
构造1T的预料对qwen2.5进行预训练

后训练

Math模型应该能够超长推理并且利用外部工具处理难题,构造了专门的数据集训练3epoch;数据的构造遵循query-response的分步骤生成,大量依赖rejection和RM之间的迭代循环

  1. COT数据合成
    2000K en and 500K ch的数据,包含从GSM8K,MATG,NuminaMATH数据集提取的有注释问题、从中文K12考试拿的中文数学问题,基于MuggleMath从注释问题中进化的合成问题等;

有注释的query,从rejection sampling中答案正确的top-k
无注释的,进行加权投票推断正确路径的topk
topk是通过Reward model的分数判断的,训练后的SFT model会作用于RM的提升

  1. TIR数据合成
    对于求根、特征值运算等高精度问题,需要使用Code辅助
    包含190K个标注问题和250K个合成问题,思路同上,其中合成问题有75K是中文翻译的来增强多语言能力

在response构造中使用online rejection Finetuning, RFT在线拒绝微调方法迭代生成推理路径,根据是否存在注释,获得路径参考答案一致或者采用投票法;增加困难query的样本并应用重复数据过滤。
RFT技术:在SFT模型上应用rejection sampling来抽样并选择正确的推理路径作为增强数据集,影响RFT性能的关键因素是不同的推理路径量,可以通过多次采样或组合多个模型的样本来增加推理路径量
在这里插入图片描述
RFT是个比较节约成本的方案,对于比较差的base model, SFT的效果弱于从RFT,rejection sampling的路径越多越好;

  1. Reward Model
    问题规模600K,每个问题有6个回复response
    在这里插入图片描述
    包含k个正样本和6-k个负样本,期望正样本的奖励》负样本奖励
    这里采用sigmod(positive-negetive),值越接近1越好,则其-log运算后最小接近0值;

此外,除了Reward model进行评分,还引入了参考答案相关的verifier进行打分,确保正确response始终比错误response的Reward更高

GPRO原理

在这里插入图片描述
采用了Deepseekmath提出的后训练策略,使用一组采样输出的平均奖励作为基准来计算每个输出的优势A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值