最近在公司落地AI产品的过程中,与团队小伙伴深入探讨和测试了大模型微调,同时也跟多个业内专家进行了交流和学习。相信很多人在实际落地大模型应用的时候都会有个疑问:到底要不要做微调模型?我的结论是在实际落地的过程中绝大多数场景是不需要做的,所以今天主要跟大家分享一下什么是Fine-tuning、Fine-tuning的原理以及Fine-tuning的应用,以帮助大家在工作中更好的理解大模型微调。
Fine-tuning是基于预训练模型并使用特定领域的数据对其进行能力增强,通过让模型理解和学习特定领域的知识库,以提升模型在特定领域、特定任务中的性能。 这个过程旨在优化模型以用于目标应用,提高其在专业领域中的性能和语境相关性。
这里需要注意的是预训练基础模型的训练数据集都是从网页、书籍、维基百科等开源平台抓取到的,不一定能够理解特定领域的知识,以下为模型微调前后的对比:
左侧流程展示了大模型训练的基本流程(仅仅作为示例,细节不展开),一般都是基于公开数据进行预训练的,那训练后的模型自然不知道一些领域知识;
右侧流程展示了模型微调的流程,需要拿特定领域的数据集对基础模型进行微调,微调后的模型才能学会特定领域的知识。
大家可以把基础模型理解为高中生,具备较强的学习能力和一定的知识储备,但他还没办法进入某个领域开始工作;模型微调就相当于是高中生开始读大学开始选专业了,读完大学之后才具备从事某个专业领域工作的技能。
不管哪种微调方式,数据集的质量一定能够影响微调模型的性能;所以数据集的处理一定要细致,否则可能会导致模型欠拟合、过拟合、鲁棒性不够等问题,以下为数据集准备的具体步骤:
● 数据采集:可能包括结构化数据、非结构化数据等;
● 数据处理:对收集上来的数据集进行清洗、转换和标注;
● 数据合成:如果专业领域的数据集不够,我们还需要通过已有数据进行合成新数据,通过数据的多样性来提高模型鲁棒性,防止过拟合和偏差过大;
● 数据评估:如果使用了合成数据,最好对数据集进行评估,否则可能会因为合成了一批垃圾数据影响模型微调的整体性能;
一般是选择基础模型进行微调,选择基础模型没有固定的规则和限定,在大量开源模型中如何选择更适合自己的基础模型呢?给大家分享一些个人经验:
● 规模定律:大模型的**第一性原理Scaling Law(规模定律)**还是存在的,参数量越大性能越好,但小模型如6B、7B、8B的基本能力:理解、生成、推理等也已经具备;
● 场景优先:在选择模型时一定要理解自己要做的是什么场景,如果是海外业务那最好选择国外开源模型如Llama系列;如果是简单的内容生成场景,就没有必要一味的追求Scaling Law;所以先把场景梳理清楚再选择模型一定会事半功倍~
● 模型架构:不同的模型架构适用不同的任务,比如BERT模型是基于Transformer架构的编码器(Encoder)部分训练的,对于文本理解类的任务表现很好;而GPT系列模型主要是基于Transformer架构的解码器(Decoder)部分训练的,对于文本生成类的任务表现很好;
● 计算资源:参数量较大的模型需要的计算资源就更多,所以也需要衡量公司能在这件事情上的投入有多大!
模型微调也是非常关键的部分,不同的微调方案、超参数配置都会对结果有很大的影响。不管什么微调方案、什么超参数配置,一定要懂怎么看模型微调的好坏;最主要的就是loss值(损失函数),这个值越小越好,而且不同的问题在该值的曲线上表现也不同,以后细说。
全量微调(Full Fine-Tuning):全参微调是对基础模型的所有参数权重都进行调整,这种方式比较消耗计算资源并且效果有限;一般如果没有特别大数据量和特别复杂的场景不太建议使用该方案。
高效微调(Parameter-Efficient Fine-Tuning,PEFT) :介于比较重的全量微调,Hugging Face提出了全量微调,并开源了一个高效微调大模型的库:PEFT。PEFT方法的核心思想是仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本;主流PEFT微调方法有以下几种:
learning_rate(学习率):在训练过程中模型通过优化算法调整权重以最小化损失函数,学习率决定了每次更新时权重调整的幅度。如果学习率设置的太高,模型可能会在最优值附近震荡无法收敛,如果太小则可能会陷入局部最优解,导致训练进展非常慢。
epochs(训练周期):训练周期表示数据集被模型训练的次数。epoches的数量过大可能会使模型学习到的细节太多,从而导致模型过拟合;训练周期太少时模型可能无法学到更多的特征,导致欠拟合。
batch size(批处理大小):批处理大小指的是模型每次学习的数据集数量,batch size的大小会影响模型的训练效率和内存占用大小。
超参数的配置也非常重要,模型调优就是找到领域数据集和基础模型微调时的学习参数平衡;此外,还要防止模型遗忘,就是学会了领域任务却忘记了基础模型最基本的能力。
有些基础模型微调完成后权重会自动合并起来,但是有些模型微调后需要手动合并权重,这个主要看基础模型厂商提供的微调方案。如果微调后没有自动合并权重,那我们需要先将微调后的模型权重和主模型合并起来才能进行部署和推理,如果不知道怎么合并模型的可以看我上篇文章:一文学会GLM-4-9B-Chat模型Lora微调(二)!。
微调最适合特定领域的情况,例如以利基语气或风格响应详细提示,即法律简报或客户支持票。还非常适合克服信息偏见和其他限制,例如语言重复或不一致等情况。另外,如果有大量的标记数据,也可以通过微调来提供更加完善的模型行为。
上面讲了模型微调主要是做什么的,这里简单总结几个适合做模型微调的场景:
在大模型应用开发领域还有一项技术栈:RAG(Retrieval-Augmented Generation 检索增强生成),同样有着非常广泛的适用场景,基本原理如下:
这里不再详细介绍,后面会有专门的章节为大家介绍RAG的应用和开发,想学习了解的可以持续关注。以下再给大家总结下什么场景需要模型微调、什么场景适合用RAG:
以上内容给大家先对微调的整体知识扫扫盲,后面会持续更新更多关于大模型应用相关知识点。