如何在自定义数据上微调LLM

2024年03月01日 由 alex 发表 378 0

3


大型语言模型(LLM)是一种先进的人工智能系统,旨在理解和生成自然语言文本。它们通过互联网上的大量文本数据集(包括书籍、网站和文章)进行训练,从而能够学习语言模式、语法和各种信息。因此,LLM 可以根据接收到的输入信息生成连贯且与上下文相关的文本。


LLM 在不断发展,不断学习新的技巧,不断挑战生成式人工智能的极限--强大的(人工智能)能力伴随着巨大的责任;LLM 也是如此。有时,LLM 生成的输出结果并不符合预期,可能是伪造的,也可能是没有经过适当调整的。在本文中,我们将更好地了解如何通过一种称为 "微调 "的方法使 LLM 返回正确的结果。


LLM面临的挑战

虽然 LLM拥有令人印象深刻的通用语言技能,但将其直接应用于特定任务可能会遇到问题。他们庞大的训练数据可能缺乏特定领域的专业知识,导致输出结果不准确或不相关。他们往往难以理解上下文,误解提示或遗漏关键信息。此外,依赖黑盒算法也很难控制输出结果,从而引发对偏见、错误信息甚至道德影响的担忧。


下面我们将深入探讨每种限制及其如何影响 LLM 的有效性的更深研究:


  • 定制输出: 有时,应用程序需要特定类型的样式和结构作为输出,但 LLM 可能无法生成所需的定制输出。这就需要对 LLM 进行适当的调整和培训,使其了解各种风格,从而生成量身定制的输出。
  • 缺少语境: 基础 LLM 模型无法从训练数据中了解特定领域的细节。通过提供可信来源的具体细节来训练 LLM 非常重要。
  • 专业词汇: LLM 通常是在通用数据集上训练的,通常无法理解医学、金融或法律等领域的专业词汇。这导致在准确总结、解释或讨论小众话题时面临挑战,从而导致通用或不正确的回复,严重影响了他们在专业领域的实用性。因此,对LLM进行微调就变得非常重要。


微调可以克服这些局限性,通过有针对性的数据和培训,使 LLMs 针对特定任务进行专业化,最终释放其真正潜力,实现准确可靠的应用。


什么是微调?


4


将LLM想象成拥有丰富知识但缺乏特定技能的语言专家。微调就像学徒制,让这些专家为专门任务做好准备。通过向他们提供特定任务的数据并调整他们的内部 "知识模式",我们可以完善他们的反应并磨练他们的能力。这样,经过微调的 LLM 就能成为医疗信息专家,随时应对你提出的具体问题或任务,而不是纠结于医学术语。这就像为一项精确的工作定制一个强大的工具,让 LLM 在实际应用中真正大放异彩。


微调技术

微调 LLM 并不是一个一刀切的过程。不同的技术具有独特的优势,可以满足特定场景的需要。让我们来探讨四种关键方法:


  1. 全模型微调。这种方法将 LLM 视为白板,根据目标数据重新训练其所有层。这种方法对于需要显著转移注意力的任务非常有效,但计算成本高,而且容易造成灾难性遗忘(丢失先前知识)。
  2. 基于特征的微调。在这里,只对 LLM 的特定层或组件进行重新训练,利用预先训练的知识来理解一般语言,同时适应特定任务。这种方法计算效率高,知识损失最小,非常适合 LLM 通用领域内的任务。
  3. 参数高效微调。LoRA(Low-Rank Adapters)等技术使用较少的参数进行微调,大大减少了计算资源和训练时间。这对于在资源受限的设备上部署 LLM 或快速实验不同任务尤为重要。
  4. RLHF 微调。RLHF 不直接在标注数据上进行训练,而是依靠人类反馈来指导 LLM 的改进。人类会对模型的输出进行评估,对理想的输出进行奖励,对不理想的输出进行惩罚。然后,LLM 利用这些反馈调整其内部参数,不断改进其行为,以满足人类的期望。这对于标注数据稀缺或主观性较强的任务,以及将 LLM 的性能与人类的细微偏好相匹配尤其有帮助。
  5. 除此以外,还有许多其他技术,但我们将坚持使用上述重要技术。选择正确的技术取决于任务复杂性、可用资源和所需的适应水平等因素。


微调教程

我们需要使用 SingleStore Notebooks 和 Gradient 在自定义数据上对 LLM 进行微调。


激活免费的 SingleStore 试用版,访问笔记本。


5


SingleStore 笔记本是基于网络的 Jupyter 笔记本,允许开发人员使用 SQL 或 Python 代码创建、探索、可视化和协作数据分析和工作流程。


接下来,在 Gradient 上创建一个免费账户。Gradient 让开源 LLM 的微调和推理变得简单。


6


确保复制并妥善保存工作区 ID 和访问令牌。稍后我们将在笔记本中用到它们。


进入工作区,点击 "微调


7


我们将对此处提到的基本模型 "nous-hermes2 "进行微调。


8


现在,返回 SingleStore Notebooks 并创建一个新笔记本--可以随心所欲地命名它。


9


首先安装 Gradient AI。


!pip install gradientai — upgrade


然后,添加 Gradient 工作区 ID 和访问密钥


import osos
os.environ['GRADIENT_WORKSPACE_ID']=''
os.environ['GRADIENT_ACCESS_TOKEN']=''


微调基础模型 (nous-hermes2)


下面的脚本演示了在特定数据上微调基础模型 "nous-hermes2 "的过程,以提高其在相关任务或查询中的性能。


10


11


从基础模型创建一个新的模型适配器,名称为 "Pavanmodel"。


脚本定义了一个询问 "谁是 Pavan Belagatti?"的示例查询,并在微调之前通过新创建的模型适配器运行该查询。它会打印生成的响应,展示模型在微调前的性能。


接下来定义了一个训练样本数组。每个样本都包含一个 "输入 "字段,其中有关于 Pavan Belagatti 的特定提示和相应的响应。这些样本将用于微调模型,以便更好地理解和生成与这些查询相关的信息。


脚本将微调的历时数设为 3。


在训练机器学习或深度学习模型的过程中,epoch 是一个术语,用来描述对整个训练数据集的一次完整遍历。


微调后,脚本再次通过模型适配器运行相同的初始样本查询。它会打印新生成的响应,以展示微调的效果。


12


微调后的输出结果令人大吃一惊。第一次询问时,它返回了一个 "Pavan Belagatti 是印度职业羽毛球运动员 "的幻觉答案,但经过我们的输入数据训练和微调后,它给出了正确的答案。


请确保在我们一开始创建的 SingleStore Notebook 中逐步运行代码。


随着生成式人工智能不断攀登新的高峰,LLM 在技术领域的地位也越来越举足轻重。在 LLM 能力的推动下,各组织纷纷将大量投资投入到生成式人工智能应用中,以获得竞争优势并在各领域进行创新。然而,将这些复杂的模型应用于特定数据和需求却面临着相当大的挑战。


微调是一种不可或缺的策略,它可以确保这些模型始终与上下文相关并具有操作效率。这一过程不仅能提高 LLM 的性能,还能使它们更有效地满足不同应用的独特要求和目标。随着我们向前迈进,通过微调对 LLM 进行迭代改进将是释放其全部潜力的关键,从而为更个性化、更准确和更高效的人工智能解决方案铺平道路。

文章来源:https://medium.com/gitconnected/fine-tuning-a-large-language-model-llama-2-on-a-custom-data-98828311f91b
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消