微信扫码
与创始人交个朋友
我要投稿
本文将按以下几个部分进行叙述:
•全参 SFT•Lora SFT•Lora 继续预训练•Llama pro 预训练 + SFT
数据说明:
•预训练数据:由SFT数据的Query 与 Answer 的拼接•SFT数据:由GPT4根据垂域文档抽取问答对+人工挑选而来,大概20000条,其中包括公司的介绍•自我认知数据:大概200条,从公开的自我认知数据整理而来•通用数据:匠数科技大模型sft数据集[1]
显卡 4 * A100 (40G)
训练框架 LLaMA-Factory[2]
基座模型 Qwen1.5-7B[3]
基座模型Qwen1.5-7B[4]
总的来说,全参SFT是学知识最容易的一个,只需要一个epoch即可学会垂域知识,能够完全按照你的训练数据输出,是快速验证效果最简单的一条路了。
以下是lr = 5e-5 , epoch = 1, 混合了12w通用数据的训练Loss
可以看出,所有数据训练完都还没有完全收敛,应该还需要再加点通用数据,loss才会更好看些。
此时的模型已经能够完全复述SFT的训练数据了,关于公司的问答、自我认知的效果都很不错,通用能力也还可以,但受限于资源问题,并未对全参SFT的模型在MLU等通用数据集上进行完整的测试。
值得一提的是,当混合的通用数据较少时,模型比较容易出现复读现象。看来在混合比例的基础之上,还要确保你混合数据的量足够多才行,不能光有混合比例没有足够的混合数据量。
基座模型Qwen1.5-7B[5]
lr = 2e-4 , epoch=5时,训练的模型基本学会了公司的介绍,
对于Lora来说,记住知识的能力差很多,需要训练很多个epoch才能学会垂域知识,且从训练曲线来看纯纯就是过拟合才学会的知识。该版本未进行MLU等数据集的测试。
要想曲线好看点,可以对垂域数据进行过采样,曲线会好看非常多,如下:
这里我对2000条垂域数据进行了高达20倍的采样,采样完后总共4w条数据,且通用数据有12w条 lr = 5e-5, epoch=3。
这一版训练出来的模型通用能力并未损失多少,且有提升:
大概时因为我未进行预训练,且混合了大量通用数据,所以才未损失通用能力吧。
这里要再提一嘴,当你的垂域数据较多时,对Chat模型进行SFT,会损失非常多的通用能力
基座模型Qwen1.5-7B[6]
使用垂域QA数据拼接成的数据直接进行Lora预训练,未混合通用数据,垂域数据是网络安全数据[7]
(因为我手上没有大量的预训练数据,所以找的这个数据集代替)
lr = 1e - 4, epoch =1的曲线
使用训练好的lora模型合并后进行了标准的测试,结果如下
通用能力并未损失的样子。注意,这里并没有使用通用数据集
为了对比和base模型在垂域的效果,我在渗透测试考试单项选择题上进行了对比测试,结果如下:
实际上base模型在这个数据集上的表现就已经很好了,我在垂域数据上继续预训练后,也就 one shot有一点点提升。实在是尴尬。
不过这里并没有出现所谓的LORA预训练必须要混合足够多的通用数据,不然会损失通用能力,只能怀疑说,这份垂域数据,不够垂,qwen 系列的大模型的预训练数据包含了这部分数据集。
随后,我又进行了训练数据的复读测试,看看lora 预训练的模型,能否输出训练数据。结果表明,lora只训练一个epoch,没法对预训练数据进行复读,训练3个epoch后,基本能够复读出训练数据了。
使用llama pro方法在Qwen1.5-7B[8]基座模型上进行拓展,我这里扩展了4个hidden_layers,还是在网络安全数据[9]上进行预训练
lr = 5e-5, epoch = 3
使用合并后的模型能够准确复述出预训练数据,说明确实学到了知识。
综合来看,比lora模型的通用能力要好一点。
但是,在渗透测试考试单项选择题上进行测试,结果却更差了
但是对于学习知识而言,确实是能够复述预训练数据了。
1、全参微调学东西最快 2、lora要学习垂域知识,得多训几个epoch才行,或者对数据集进行过采样 3、llama pro学东西也快,缺点就是会增加参数量 4、如果不是特别垂直的场景,优先RAG吧 5、训垂域模型,要我选,我选llama pro
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-04-11
2024-08-21
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17