首页 > 其他分享 >如何微调:关注有效的数据集!

如何微调:关注有效的数据集!

时间:2024-09-14 17:27:08浏览次数:11  
标签:模型 微调 有效 关注 例子 LLM 数据 全量

如何微调:关注有效的数据集

本文关于适应开源大型语言模型(LLMs)系列博客的第三篇文章。在这篇文章中,我们将探讨一些用于策划高质量训练数据集的经验法则。

  • 第一部分探讨了将LLM适应于领域数据的普遍方法
  • 第二部分讨论了咋确定微调是否适用于你的实际情况

1 介绍

微调LLMs是一门艺术与科学的结合,该领域的最佳实践仍在不断发展中。在本篇博文中,我们将突出微调的设计变量,并给出我们迄今为止所见的最佳实践的方向性指导,以在资源受限的情况下微调模型。我们建议使用下面的信息作为制定微调实验策略的起点。

2 全量微调 V.S 参数高效微调(PEFT)

都显示出在应用于新领域时改进了下游性能,无论在学术环境中还是在实际设置。选择哪种取决于:

  • 可用的计算资源(以GPU小时数和GPU内存衡量)
  • 除目标下游任务之外的任务表现(学习-遗忘权衡)
  • 人工标注成本

2.1 全量微调

更可能遭受两个问题:

如该系列的第一部分所述,灾难性遗忘导致模型失去其能力。一些早期经验研究表明,全量微调比PEFT更易出现上述问题,尽管还需要进一步研究。

2.2 PEFT技术

设计上作为微调的自然正则化器。PEFT通常需要相对较少的计算资源来训练下游模型,且对于数据集大小有限的资源受限场景更适用。

2.3 小结

某些情况下,全量微调在感兴趣的特定任务上表现更好,通常是牺牲了模型的一些原有能力。这种“学习-遗忘”的权衡在LoRA和全量微调之间的比较论文中进行了深入探讨在此论文中。

考虑到资源限制,PEFT技术可能比全量微调提供更好的性能提升/成本比率。如果在资源受限的情况下,下游性能至关重要,那么全量微调将是更有效的。无论在哪种情况下,关键在于创建高质量的数据集,同时牢记以下主要原则。

3 数据集策划

在文献中的微调实验中,数据集对于充分利用微调至关重要。这不仅仅是“质量更高和更多样例”的问题,你可以智能地投资于数据收集以提高资源受限微调实验的表现。

3.1 数据质量和数量

① 质量至上

总体趋势是质量比数量更重要—即最好拥有一小套高质量数据,而非一大套低质量数据。质量的关键原则包括一致的标注、无错误、未标记的数据、噪声输入/输出以及与总体相比具有代表性分布。

微调时,LIMA数据集中的几千个精心挑选的例子比5万个机器生成的Alpaca数据集表现更好。OpenAI微调文档建议,即使是50到100个样例的数据集也可能有所作为。

② 较难的语言任务需要更多数据

相对较难的任务,如文本生成和摘要,比简单的任务如分类和实体提取更难微调,且需要更多的数据。“较难”可指多种情况:输出中的更多标记、所需的人类能力等级更高、多个正确答案。

③ 高效高质量数据收集

由于数据收集昂贵,建议以下策略以提高样本效率和降低成本:

  • 观察失败模式:观察先前ML能力失败的例子,并添加针对这些失败模式的例子
  • 人机协作:这是一种更便宜的方式扩展数据标注。我们使用LLM自动化生成基础响应,人类标注者可以用来在更短时间内完成标注

3.2 数据多样性

简单来说,如果你过度训练模型以产生某种特定类型的响应,则即使这不是最合适的答案,模型也会偏向于给出那种响应。这里的经验法则是尽可能确保训练数据反映模型在现实世界中的行为方式。

  • 重复: 这已经被发现是模型退化的根源,无论是微调还是预训练。通过去重实现的多样性往往能改善性能指标。
  • 输入的多样性: 通过改写输入来实现多样性。在微调SQLCoder2时,团队重新表述了伴随SQL查询的纯文本,以引入语法和语义多样性。类似地,指令回译已被用于人类编写文本,通过问LLM“这可能是对什么问题的回答?”来生成问答数据集。
  • 数据集的多样性: 当微调更一般的下游任务——例如多语言适应——时,使用多样化的数据集已被证明可以改善模型遗忘原始能力与学习新能力之间的学习-遗忘权衡。为不同语言如印地语奥迪亚语微调的模型使用了丰富的语言特定数据集与其他指令微调数据集,如FLANAlpaca、Dolly等,以增加多样性。
  • 标准化输出: 从输出中移除空格和其他格式花招已被证明是有帮助的。SQLCoder2从生成的SQL中移除空格,让模型专注于学习重要的SQL概念,而不是像空格和缩进这样的花招。如果你希望回答中有特定的语气,“帮助台聊天机器人是...”,那么在每个例子中都加入这些内容。

4 基于LLM的数据管道

为了策划高质量多样化的数据集,数据管道经常使用LLM来减少标注成本。实践中观察到的技术:

  • 评估: 使用高质量数据集训练模型并利用它来标注你较大的数据集,以过滤出高质量的例子
  • 生成: 用高质量的例子种子LLM并提示其生成类似的高质量例子。合成数据最佳实践正在形成中
  • 人机协作: 使用LLM生成一组初始输出,并用人来通过编辑或选择偏好来提高质量

5 调试你的数据集

  • 评估你的数据集中的不良输出: 如果模型在某些方面仍然表现不佳,添加直接展示给模型如何正确处理这些方面的训练例子。如果你的模型有语法、逻辑或风格问题,检查你的数据是否有同样的问题。例如,如果模型现在说“我会为你安排这次会议”(当它不应该这样做时),看看现有例子是否教会了模型说它可以做它不能做的事情。
  • 审视正负类平衡: 如果数据中有60%的助手回应说“我无法回答这个问题”,但在推理阶段只有5%的回应应该这么说,那么你可能会得到过多的拒绝回应。
  • 详尽性和一致性: 确保你的训练例子包含所有需要的回应信息。如果我们希望模型根据用户的个人特质赞美用户,并且训练例子中包含了对前面对话中没有提到的特质的助手赞美的例子,模型可能会学会虚构信息。确保所有的训练例子都是以预期的格式呈现,以便推理。查看训练例子中的一致性。如果多人创建了训练数据,那么模型的表现很可能受到人们之间一致性的限制。例如,在文本抽取任务中,如果人们只在70%的抽取片段上达成一致,模型很可能也无法做得更好。

6 结论

微调是LLMs开发的重要组成部分,需要在资源限制下取得微妙的权衡!

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。

本文由博客一文多发平台 OpenWrite 发布!

标签:模型,微调,有效,关注,例子,LLM,数据,全量
From: https://blog.51cto.com/JavaEdge/12018050

相关文章

  • 如何微调:关注有效的数据集!
    如何微调:关注有效的数据集本文关于适应开源大型语言模型(LLMs)系列博客的第三篇文章。在这篇文章中,我们将探讨一些用于策划高质量训练数据集的经验法则。第一部分探讨了将LLM适应于领域数据的普遍方法第二部分讨论了咋确定微调是否适用于你的实际情况1介绍微调LLMs是一门艺......
  • 【VMware vCenter】vCenter Server 各版本证书有效期及过期解决办法。
    这篇(VMwarevCenterServer(VCSA)5.5版本证书过期问题处理过程。)文章阐述了有关vCenterServer证书过期的处理过程,整个过程相对来说比较复杂并且有的地方可能也没有说清楚,因此我想在此篇文章中重新做一个针对vCenterServer证书相关的汇总,以方便有需要的朋友进行查阅和参考......
  • 一款安全、简单、有效的蜜罐平台Hfish,windows 搭建教程!
    一款安全、简单、有效的蜜罐平台Hfish,windows搭建教程!蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方......
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调-unsloth(让微调起飞)-单机单卡-V100(十七)
    一、前言  本篇文章将在v100单卡服务器上,使用unsloth去高效微调QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。  使用unsloth能够使模型的微调速度提高2-5倍。在处理大规模数据或对时间要求较高的场景下......
  • 乐企申请、测试及运维阶段,重点关注什么?如何完成高效乐企对接?
    金税四期下,数电票的推广与应用程度越来越深,企业陆续在完成数电票的使用切换。从目前来看,企业开具数电票有两种方式:一是通过电子发票服务平台手工开具数电票,二是通过乐企直连自动开票。这两种开票方式主要有三点不同:一是在开票人操作。乐企是企业自有系统与税局直接做对接,以固定IP接......
  • 32. 最长有效括号
    题目链接32.最长有效括号思路动态规划题解链接官方题解关键点1.只有\(s_{i}=\text{(}\)时才需要转移2.当遇到'...))'格式的情形时,需要考虑前面片段中转移的索引下标时间复杂度\(O(n)\)空间复杂度\(O(n)\)状态转移方程为(只有\(s_{i}=\text{(}\)......
  • 前端性能优化:如何有效提升网页加载速度 面试必备
    为什么要进行性能优化呢进行性能优化的原因是因为:性能的体现对干产品的影响是非常大,那么为了保证用户的留存率和转化率,我们就需要提升应用的响应速度交互体验。以保证竞争力。性能优化如何衡量性能优化如何衡量,也就是性能优化的标准是什么?游览器中控制台呢有两个重要......
  • Xtuner微调个人小助手
    task:使用Xtuner微调InternLM2-Chat-1.8B实现自己的小助手认知。1安装环境!pipinstalltransformers==4.39.3!pipinstallstreamlit==1.36.02安装xtunergitclonehttps://gitclone.com/github.com/InternLM/XTuner./XTunercdXTunerpipinstall-e'.[deepspeed]'-ihttp......
  • IBM裁员事件引起了广泛的关注和讨论
    近日,IBM中国宣布撤出在华两大研发中心,这一消息无疑在IT行业中引起了轩然大波。作为全球知名的科技公司,IBM的这一决策不仅触动了众多在华IT从业者的神经,也引发了人们对于跨国公司在华研发战略的深入思考。面对这一变化,我们应该如何看待?中国IT人才和中国IT产业又该如何应对?一、跨国公......
  • vc++ 6.0 实现代码的多行注释与取消注释功能(实测有效)
    方式一1.新建MacroFile宏文件点击菜单栏“文件→新建(File→New)”选项,在“新建(New)”弹框中,顶部区域选项“文件(File)”下找到MacroFile,点击,并在右边输入“文件名”,点击“确定(OK)”按钮。此时弹出“新建宏文件”窗口,在“描述(Descripion)”输入框中输入信息,点击“确定(OK)”按钮。......