大模型微调技术介绍
LLM微调是一个将预训练模型在较小、特定数据集上进一步训练的过程,目的是精炼模型的能力,提高其在特定任务或领域上的性能。微调的目的是将通用模型转变为专用模型,弥合通用预训练模型与特定应用需求之间的差距,确保语言模型更贴近人类的期望。
以OpenAI的GPT-3为例,这是一个为广泛的自然语言处理(NLP)任务设计的先进LLM。假设一家医疗组织希望使用GPT-3来帮助医生从文本笔记生成患者报告。虽然GPT-3能理解和创建一般文本,但它可能没有针对复杂的医学术语和特定医疗术语进行优化。
为了提高GPT-3在这一专业角色中的性能,该组织会在包含医疗报告和患者笔记的数据集上对GPT-3进行微调。它可能会使用像SuperAnnotate的LLM定制编辑器这样的工具来构建具有所需界面的模型。通过这个过程,模型变得更加熟悉医学术语、临床语言的微妙之处和典型的报告结构。微调后,GPT-3能够协助医生生成准确且连贯的患者报告,展示了它对特定任务的适应性。
说起LLM,总会涉及到上下文学习、零样本、单样本和少样本推理等话题。我们先快速了解一下它们主要的功能。
**上下文学习(In-context learning) **是一种通过在提示中加入特定任务示例来改进提示的方法,为LLM提供了完成任务的蓝图。
「零样本(Zero-shot)、单样本(One-shot)和少样本(Few-shot)推理」 零样本推理是在提示中直接使用输入数据,不添加额外示例。如果零样本推理未能达到预期结果,可以使用单样本或少样本推理。这些策略涉及在提示中添加一个或多个已完成的示例,帮助较小的LLM表现得更好。
「上下文学习的问题」 将以上这些技术直接应用于用户提示,旨在优化模型输出,使其更符合用户偏好。问题是它们并不总是有效,尤其是对于较小的LLM。除此之外,在提示中包含的任何示例都会占用宝贵的上下文窗口空间,减少了包含其他有用信息的空间。
「当以上方式无法解决相关问题时,这就需要LLM微调」。但它与预训练阶段使用大量非结构化文本数据不同,微调是一个监督学习过程。这意味着你使用标记好的示例数据集来更新LLM的权重。这些标记好的示例通常是prompt-response,使得模型能更好地完成特定任务。
Freeze方法,即参数冻结,对原始模型部分参数进行冻结操作,仅训练部分参数,以达到在单卡或不进行TP或PP操作,就可以对大模型进行训练。
微调代码,见finetuning_freeze.py,核心部分如下:
arduino复制代码for name, param in model.named_parameters():
if not any(nd in name for nd in ["layers.27", "layers.26", "layers.25", "layers.24", "layers.23"]):
param.requires_grad = False
针对模型不同层进行修改,可以自行修改。训练代码均采用DeepSpeed进行训练,可设置参数包含train_path、model_dir、num_train_epochs、train_batch_size、gradient_accumulation_steps、output_dir、prompt_text等,可根据自己的任务配置。
css复制代码CUDA_VISIBLE_DEVICES=0 deepspeed finetuning_freeze.py --num_train_epochs 5 --train_batch_size 2
三元组抽取的推理代码,见predict_freeze.py,其他任务可以根据自己的评价标准进行推理预测。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有