01.论文概况
1. 论文名称:
LLM2LLM: Boosting LLMs with Novel Iterative Data Enhancement《LLM2LLM:通过新型迭代数据增强提升大语言模型》
2. 论文链接:https://arxiv.org/pdf/2403.15042
3. 论文作者所在机构:加州大学伯克利分校(UC Berkeley)、国际计算机科学研究所(ICSI)、劳伦斯伯克利国家实验室(LBNL)
4. 一句话概括:该论文提出 LLM2LLM,一种针对性迭代数据增强策略,用教师模型扩充小种子数据集,在低数据场景显著提升大语言模型性能,减少对数据收集的依赖,为相关领域任务提供更优解决方案。
02.挑战
1. 大语言模型在实际应用中的挑战
(1)输入上下文长度限制:LLM在处理实际应用时,其能处理的输入上下文长度有限,这限制了输入示例或指令数量,从而影响模型性能。例如在一些需要大量上下文信息的任务中,模型可能无法获取足够信息以做出准确判断。
(2)遗忘或忽略长上下文信息:即使模型能处理长输入提示,也可能会遗忘或忽略长上下文中的信息,导致潜在的准确性下降。
(3)检索增强生成(RAG)的局限性:RAG 虽被开发用于解决部分问题,但有时会检索到不相关的内容,影响生成性能,且在处理长输入提示时,仍可能面临高延迟和高成本问题。
2. 微调大语言模型面临的挑战
(1)训练数据不足:成功的微调需要足够的训练数据,但在许多实际应用中,获取大量任务特定数据可能既昂贵又耗时,因为收集、清理和标记额外数据往往面临成本和时间的双重挑战。
(2)传统数据增强方法的无效性:对于新的和专门的任务,传统的数据增强方法(如同义词替换、字符替换等)在扩充微调大语言模型的训练数据时效果不佳。
(3)现有基于大语言模型的数据增强方法的问题:近期一些使用LLM扩展微调数据集的方法,通常在不考虑LLM对单个训练数据点预测准确性的情况下,对所有可用训练数据进行增强,这可能导致对模型已经能准确处理的数据点进行不必要的增强,浪费资源且效果不佳。
03.论文贡献点
1. 提出 LLM2LLM 数据增强技术
提出一种针对性和迭代性的基于LLM的数据增强技术 LLM2LLM,能有效扩充小任务特定数据集。该技术通过在初始数据集上微调学生 LLM,评估并提取模型出错的数据点,再用 Self-Instruct 风格的数据增强方法扩充这些数据点并添加回训练数据,实现数据集的优化。
2. 在多个数据集上取得显著性能提升
在 GSM8K、CaseHOLD、SNIPS、TREC 和 SST - 2 等数据集的低数据场景下,通过实验验证了 LLM2LLM 的有效性。相较于传统微调方法,在 GSM8K 数据集上实现高达 24.2% 的性能提升,在 CaseHOLD 上提升 32.6%,SNIPS 上提升 32.0%,TREC 上提升 52.6%,SST - 2 上提升 39.8%。
3. 开展消融实验验证设计决策有效性
进行一系列消融实验,对比 LLM2LLM 与多个现有基线及自身变体,评估设计决策的有效性。实验表明 LLM2LLM 的迭代和针对性特性对提高模型性能至关重要,如迭代增强比一次性增强效果更好,仅使用种子数据进行数据增强比同时使用种子数据和增强数据更优,从预训练模型重新开始微调比连续微调效果更好。
04.具体方案
方案概述
论文假设给定一个预训练在某个源数据集(例如,通用爬虫)上的LLM M(例如,GPT-3.5 或 Llama-2-7B)。目标是通过使用一个小的种子数据集 D 来使 M(以下称为学生模型)适应新的目标领域,其中 D 与预训练数据集相比可能具有未见过的特征(例如,具有特定术语的医学数据集,或具有特定特征的私人数据库)。在这种情况下,模型的零样本或微调性能可能不太令人满意。
论文提出了一个基于LLM的数据增强pipeline的更通用的表述形式,以解决上述限制。为此,论文考虑以下迭代过程:
在公式(1)中,M_teacher是教师模型,M_student是学生模型(可能在多次迭代中进行微调),n指的数据增强的第n步,D_n+1是下一次迭代的新训练数据集,f是数据生成算法。在每一步,教师模型可以了解学生模型在第n步的表现(例如,正确/错误标签,或可能是白盒模型的预测分布),并基于此为下一次迭代编辑训练数据点。
需要注意的是,LLM2LLM与知识蒸馏不同。知识蒸馏通常适用于教师模型在目标数据上具有高准确性的情况。相比之下,在这种情况下,教师模型在目标数据上也可能表现不佳(例如,在私人数据库的情况下,教师缺乏特定领域的知识)。然而,如果教师模型有足够的推理能力,在给定提示和答案时能够产生概念上相似但语义上不同的示例,那么论文的框架可以提高性能。
LLM2LLM 策略
LLM2LLM的端到端算法在算法 1 中给出。
受 Self-Instruct的启发,论文使用教师模型从模型在训练过程中出错的数据点生成合成数据,以针对学生模型中的这些缺陷。更详细地说,
(1)在提供的目标数据集D_0上训练基线学生模型,并评估其性能(算法 1 的第 4 至 5 行)。
(2)对结果进行过滤,保留学生模型难以正确回答的错误训练示例(第 6 行中的E_i)。
(3)教师模型被提示创建概念上一致但语义上不同的额外训练数据点(第 7 行)。教师模型不一定需要更大,尽管这可能会潜在地提高性能。
教师模型的主要要求是具有推理能力,能够遵循数据增强指令,以及能够创建与错误示例类似的数据点。这个过程在图 1 中进行了示意性说明。
LLM2LLM中的一个微妙但重要的设计决策是,在提示教师模型生成额外数据点时,只使用种子数据中的示例。这与Alpaca相似,但与EvolInstruct不同。这样做有两个主要原因:
(1)首先,论文的方法防止了多次数据增强迭代导致的数据退化。早期实验表明,尽管教师模型能够生成高质量的增强数据,但一些示例包含逻辑错误。因此,对这些示例进一步进行增强可能会潜在地传播错误,随着时间的推移降低数据集的质量。这在论文的消融研究中得到了强调,其中使用种子数据和合成数据进行数据增强会导致准确性下降。
(2) 其次,**这种方法总体上限制了新生成数据的数量。**假设原始种子数据集的大小为n,在每次迭代中,学生模型对训练数据集D_i的错误比例为p_i,其中0<pi<1。如果我们将增强后的数据纳入种子数据进行数据生成,那么在第j步时数据集D_j的大小将为
这有一个随着每一步呈指数增长的下限。在数据集生成过程中,将输入的错误答案W_i限制为仅来自原始种子数据,使我们能够将训练数据点的总数限制为
,这有一个随着步数呈线性增长的上限。论文中通过实证评估证实了这一点。
05.实验设置
Datasets
论文采用了五个不同数据集:
1. GSM8K 数据集
一个小学数学作业选择题数据集,包含 7500 个训练问题和 1000 个测试问题,主要涉及数学运算和问题解决,用于测试模型在数学推理方面的能力。从总训练数据中抽取不同比例(0.02% - 50%)的数据作为种子数据进行实验,以衡量 LLM2LLM 对小任务特定数据集的扩展效果。例如在某些实验中抽取 1%(74 个示例)或 2%(149 个示例)的数据作为种子数据,观察模型性能的提升情况。
2.CaseHOLD 数据集
一个多项选择法律数据集,要求从给定选项中选择与引用案例相关的判决(holding),以支持论点,涉及法律案例的分析和判断,用于评估模型在法律领域的推理和决策能力。同样对该数据集进行不同比例的抽样,如 0.5%(225 个示例)、1%(450 个示例)等,作为种子数据进行实验,以研究 LLM2LLM 在该数据集上的性能表现,如在低数据场景下对模型准确率的提升效果。
3.SNIPS 数据集
一个 7 分类数据集,用于确定语音助手的正确用户意图,涵盖多种常见的用户指令意图,如播放音乐、查询天气、添加到播放列表等,主要测试模型对不同意图的分类能力。在实验中,为确保各类别数据的均衡性,总是从每个类别中均匀抽取相同数量的示例作为种子数据,例如抽取 10、15 或 20 个示例 / 类,通过在极端低数据场景下的实验,观察 LLM2LLM 对模型性能的提升效果。
4.TREC 数据集
一个 6 分类数据集,要求将文本分类为不同类别,如缩写、位置、数值等,涉及文本分类任务,用于检验模型对不同类型文本的分类准确性。与 SNIPS 数据集类似,在实验中从每个类别中均匀抽取一定数量的示例作为种子数据,在不同低数据比例下进行实验,以评估 LLM2LLM 在该数据集上的有效性,如在数据量极少的情况下能否提高模型的分类准确率。
5. SST - 2 数据集
一个二元分类数据集,用于判断句子的情感是积极还是消极,专注于情感分析任务,评估模型对文本情感倾向的判断能力。由于该数据集没有公开的测试集标签,实验使用开发集进行评估。在实验过程中,抽取不同比例(如 0.02%、0.04%、0.06% 等)的训练数据作为种子数据,观察 LLM2LLM 在低数据场景下对模型情感分类性能的提升效果。
Models 选择
1. 学生模型
(1)模型选择:所有实验均选用 Llama - 2 - 7B 作为学生模型,这是一个具有一定规模和能力的预训练模型,在多种自然语言处理任务中表现出良好的性能。
(2)任务适配:为适应不同任务,对学生模型进行最小限度的提示调整(prompt tuning),仅根据任务需要对数据进行必要的格式化处理,避免使用过多的示例(few - shot examples),以确保实验能够准确评估 LLM2LLM 方法对模型性能的提升效果,而不受过多额外因素的干扰。
(3)训练设置:学生模型的微调遵循特定的设置,包括最大序列长度为 1024,训练 3 个epochs,batch size为 128 个示例。使用学习率为2*10^(-5),weight decay为 0,采用warmup ratio为 0.03 的cosine learning rate scheduler。模型训练在 4 个 NVIDIA A100 - 80GB 或 8 个 NVIDIA A6000s GPU 上进行,为简化实验过程并降低复杂性,实验采用了full fine - tuning方法,但也指出在实际应用中可以使用参数高效微调(parameter - efficient fine - tuning)方法,如 LoRA(Low - rank adaptation of large language models)。
2. 教师模型
(1)主要教师模型:在主要实验中,选择 GPT - 3.5(1106 版本)作为教师模型来生成数据。
(2)扩展教师模型:论文还展示了框架的灵活性,可扩展到其他教师模型,如 GPT - 4 - Turbo(1106 版本)、Llama - 2 - 70B - chat 和 Airoboros - l2 - 70b - 3.1.2。在后续实验中,研究了使用不同教师模型时 LLM2LLM 的性能表现,发现不同教师模型的能力差异会影响生成数据的质量,进而影响最终学生模型的准确率,例如 GPT - 4 - Turbo 在数学推理方面表现出色,使用其作为教师模型在 GSM8K 数据集上能够取得更高的准确率提升效果(如在 74 个种子数据示例下,准确率可达 19.79%,相比其他模型更高)。
06.LLM2LLM细节
Fine-tuning
微调步骤使用种子数据和之前生成的 LLM2LLM 数据(如果有的话)来训练一个小型学生模型。论文消融研究表明,在完整数据集上从头开始微调原始基准模型总是优于重新使用已经微调过的模型。论文推测这是因为微调过的模型已经看到了大部分数据,导致它们过度拟合,无法收敛到更好的最优值。
Evaluation
微调后需在原始种子数据上评估模型,识别出错示例,使 LLM2LLM 框架能利用这些失败示例为模型生成针对性合成数据训练。对于很多数据集,评估可能昂贵,因为数据集数据点可能很多。但在数据量较少时,即种子数据集规模较小时,评估成本效益高且相对较快,不会减慢 LLM2LLM 过程。
Filtering Generated Dataset
教师模型生成合成数据后,需进行简单过滤确保质量。论文使用正则表达式过滤器和 ROUGE 过滤器,确保输出格式符合预期且与之前样本有差异。论文用较弱的 0.95 ROUGE 过滤器过滤相似指令,而非像其他工作中使用的 0.85 分数。论文这样做是因为目标不是通用指令跟随,而是将生成的数据点限制在数据集的任务和领域内,且对每个样本单独增强已有足够内在多样性,所以能使用较弱过滤器简单过滤完全匹配的内容。
Prompting Details
论文为教师模型在增强数据集时的每个任务设计了简单但全面的prompt。
Training and Data Generation Costs
Decontamination Experiments
当使用语言模型生成数据时,存在数据污染担忧,即教师模型在测试数据上训练后会泄露到学生模型训练数据中,抬高学生模型分数。为测试这一点,论文测量教师模型生成示例与各数据集中训练集和测试集示例的词重叠百分比。
词重叠计算是先去除每个示例中的停用词和标点,然后计算每对示例中共有词的数量并除以较长示例中的词数,以此衡量相似程度。对每个数据集,用相同数量种子数据运行 LLM2LLM 10 步,取最后一步生成的合成数据计算词重叠度量,并计算汇总统计数据。
查看表 B.3,可看到合成数据与训练数据有不同重叠程度。因为 LLM2LLM 使用训练数据作种子数据生成新合成示例,所以这是可预料的。关于测试/开发集结果,GSM8K、CaseHOLD 和 SST-2 的 0%生成示例与测试集词重叠超过 66%,表明模型未泄露测试集数据。对于 SNIPS 和 TREC,相似度超 66%的示例百分比远低于 10%,表示没有大规模重叠。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。