接下来,直接进入正题。
预训练是指,使用数万亿个token数据,从头开始训练LLM的过程,通常使用自监督算法进行训练。
最常见的情况是,训练通过自回归预测下一个token(也称为因果语言建模)。
预训练通常需要数千个GPU小时(105-107个),并分布在多个GPU上进行。
预训练的输出模型称为「基础模型」。
继续预训练(也称为第二阶段预训练)将使用全新的、未见过的领域数据进一步训练基础模型。
这里,同样使用与初始预训练相同的自监督算法。
通常会涉及所有模型权重,并将一部分原始数据与新数据混合。
微调是以监督方式使用带注释的数据,或使用基于强化学习的技术,来适配预训练语言模型的过程。
与预训练相比,微调有两个主要区别:
而要了解微调的现状,可以从两个方面入手:参数变化的百分比和微调后新增的能力。
更改的参数百分比
根据更改的参数量,有两类算法:
基础模型新增的能力
微调的目的是为了向预训练的模型添加功能,比如指令遵循、人类对齐等。
聊天微调Llama 2,就是一个具有附加指令遵循和对齐能力的微调模型的例子。
企业还可以通过添加特定领域的知识库来适配LLM,RAG是典型的「搜索驱动的LLM文本生成」。
RAG于2020年推出,它使用动态提示上下文,通过用户问题检索并注入LLM提示,以引导其使用检索到的内容,而不是预训练的知识。
Chat LangChain是由RAG支持的、在Lang Chain文档上流行的Q/A聊天机器人。
对于ICL,通过在提示符中放置原型示例来适配LLM。多项研究表明,「举一反三」是有效的。这些示例可以包含不同类型的信息:
要决定上述哪种方法适合特定应用,你应该考虑各种因素:所追求任务所需的模型能力、训练成本、推理成本、数据集类型等。
下面的流程图总结了一些建议,可以帮助你选择合适的LLM适配方法。
预训练是LLM训练的重要组成部分,它使用token预测变量作为损失函数。自监督算法,使得大量数据训练成为可能。
例如,Llama 2接受了2万亿token的训练。这需要大量的计算基础设施:Llama 2 70B需要1,720,320个GPU小时。
不过,任何更新预训练模型权重的方法,都容易出现一种「灾难性遗忘」的现象。
比如,此前一项研究显示,在医疗领域微调训练后的模型,在遵循指令和常见问答任务上的性能出现下降。
论文地址:https://arxiv.org/pdf/2009.03300
还有很多研究可以佐证,通过预训练获得的通用知识,在后续训练过程中可能会被遗忘。
鉴于灾难性的遗忘,最近的研究表明,继续预训练(CPT)可以导致模型性能的进一步提高,而计算成本只是预训练的一小部分。
对于需要LLM获得新的转换技能的任务,CPT可能是有益的。
有研究报告显示,继续预训练成功地增加了多种语言能力。
但CPT成本极高,需要大量的数据和计算资源。
比如,PYTHIA套件经历了第二阶段的预训练,最终得到了FinPYTHIA-6.9B。该模型专为金融数据设计的,使用240亿token的数据集,进行了18天的继续预训练。
此外,CPT也容易导致灾难性的遗忘。
与使用未注释的数据集进行预训相比,使用较小的带注释的数据集进行微调,是一种更具成本效益的方法。
而且,微调后模型被证明在法律、医疗或金融等专业领域的广泛的应用中,实现了SOTA。
微调,特别是参数高效微调,只需要预训练/继续预训练所需计算资源的一小部分。
因此,对于资源有限的团队来说,这是一个可行的方法来适配LLM。
RAG是另一种流行的LLM适配方法。
如果你的应用程序需要从动态知识库(例如QA机器人)中提取,RAG可能是一个很好的解决方案。
RAG的系统的复杂性,主要在于检索引擎的实现。
这种系统的推理成本可能会更高,因为输入提示包含了检索到的文档,而大多数服务提供商采用按token计费的模式。
这是适配LLM最具成本效益的方式。
ICL不需要任何额外的训练数据或计算资源,使其成为一种具有成本效益的方法。然而,与RAG类似,随着推理时处理更多的token,推理的成本和延迟可能会增加。
总之,创建一个基于LLM的系统是迭代的,上面的流程图概述了这一迭代过程,并为LLM适配战略奠定了坚实的基础。
在大模型兴起之前,微调通常用于参数比较少的模型(100M – 300M)。
而且,最先进领域应用程序,也是使用监督微调(SFT)构建的,即使用自己专业领域和下有任务的注释数据,进一步训练预训练的模型。
然而,随着更大参数模型的出现(>1B),微调的问题变得微妙了起来。
最重要的是,大模型需要更大的资源和商业硬件来进行微调。
下表1列出了三种情况下,微调Llama 2 7B和Llama 2 13B模型的峰值GPU内存使用量。
你可能会注意到,QLoRA等算法使得利用有限资源,对大模型进行微调变得更加容易。
例如,表1显示了Llama 2 7B上三种微调模式(全面微调、LORA和QLoRA)的峰值GPU内存。
在Llama 1中,由于参数高效微调(PEFT)或量化,内存也有类似的减少。
除计算资源外,灾难性遗忘(详见本系列第一部分)也是全参数微调的常见隐患。
PEFT技术旨在通过对少量参数进行训练来解决这些缺陷。
研究人员将以下场景确定为可从微调中受益的常见用例:
通过使用定制数据集对LLM进行微调,可以塑造聊天机器人的响应,使其更符合受众的特定需求或预期的体验。
另外,研究者可能还希望它能以特定的方式组织输出,例如,JSON、YAML或Markdown格式的输出。
它还可以增强模型执行新技能或任务的能力,这些技能或任务很难在提示中表达。
这个过程可以帮助纠正模型没有遵循复杂提示的错误,并提高其产生所需输出的可靠性。
以下是两个案例:
通常来说,对于较小的初始精度(<50%),微调是一个巨大的障碍,需要用几百个示例。
对于不同的领域,如法律、医疗或金融,微调已被证明有助于提高下游任务的准确性。
此外,微调减少了对冗长或特定提示的需要,从而节省了象征性成本并进一步降低了成本。
1 微调LLM,以便更好地利用特定检索器的上下文,或完全忽略它
2 微调LLM「法官」,以评估其他LLM的指标,如接地性、合规性或有用性
3 微调LLM以增加上下文窗口
微调与上文学习(少样本)
上下文学习(ICL)是提高基于LLM的系统性能的有效方法。
使用ICL时的常见注意事项包括:
微调和RAG
普遍的共识是,当LLM基本性能不尽如人意时,可以先从RAG开始,衡量其性能,如果发现不足,再转向微调。
或者说,与微调相比,RAG可能更有优势。
根据本文的框架,你可以提出以下问题,以确定微调或 RAG(或两者)是否适用:
在大多数情况下,微调和RAG的混合解决方案,将产生最好的结果,问题就在于两者的成本、时间和额外的独立效益。
到了第三部分就步入真正关键的内容——如何去微调,先要关注数据集。
微调LLM可以说,是艺术和科学的结合,最佳做法仍在不断涌现。
在学术和实际应用中,当应用于新领域时,全面微调和PEFT都显示出下游性能的提升。
选择其中一种方法,可归结为可用计算量(GPU小时数和GPU内存)、目标下游任务以外的任务性能(学习和遗忘权衡)以及人工注释成本。
全面微调更容易出现两个问题:模型崩溃和灾难性遗忘。
一些早期的实证研究表明,与PEFT技术相比,全面微调更容易出现上述问题,但还需要做更多的研究。
PEFT技术本质上,是作为微调的自然正则化器。
PEFT通常需要相对较少的计算资源来训练下游模型,并且在数据集规模有限的资源受限场景下,更易于使用。
在某些情况下,全面微调在特定任务上表现更好,但代价往往是遗忘原始模型的一些能力。
在资源受限的情况下,PEFT可能会比全面微调提供更好的性能提升/成本比。
如果在资源受限的情况下,下游性能至关重要,那么全面微调将是最有效的。
无论在哪种情况下,关键是要牢记以下几个关键原则来创建高质量的数据集。
在各种文献的微调实验中,数据集对于获得微调的好处至关重要。
除了「更好的质量和更多的示例」之外,还有更多的细微差别,你可以明智地投资数据集收集,以在资源受限的微调实验中提高性能。
数据质量/数量
质量的关键原则是一致的注释,没有错误、没有错误标签的数据、有噪音的输入/输出,以及与总体相比具有代表性的分布。
在微调时,几千个精选的LIMA数据集示例,比50K机器生成的Llama数据集具有更好的性能。
OpenAI微调文档表明,即使是50-100个示例的数据集也可能产生影响。
「更难」可以指多个:输出中有更多的token,需要更高级别的人类能力,多个正确答案。
1 观察失效模式:观察先前机器学习能力失败的例子,并添加针对这些失效模式的样例。
2 人机协作:这是一种更经济的数据标注扩展方式。可以使用LLM自动生成基础回答,人类标注者可以基于此更快地进行标注。
简单来说,如果你用特定类型的回应过度训练模型,它会倾向于给出那种回应,即使不是最合适的答案。
这里的经验法则是,尽可能确保训练数据反映模型在现实世界中应该如何表现。
为了整理高质量、多样化的数据集,数据管道经常使用大语言模型来降低标注成本。
以下是实践中观察到的技术:
如果你的模型存在语法、逻辑或风格问题,检查数据是否存在相同的问题。
例如,如果模型现在说「我会为你安排这个会议」(实际上它不应该这样做),看看现有的例子是否教导模型说它可以做一些它实际上不能做的新事情。
如果希望模型基于用户的个人特征来赞美用户,而训练示例中包含了助手对前面对话中没有出现的特征的赞美,模型可能会学会虚构信息。
确保所有的训练示例,都采用与推理时预期相同的格式,查看训练示例中的一致性和协调性。
总而言之,微调是大模型开发中的一个关键方面,需要在艺术和科学之间取得微妙的平衡。
数据集的质量和筛选,对微调的成功起着重要作用。
经过微调的小型LLM在特定任务上,往往表现优于更大的模型。
一旦决定进行微调,Llama微调指南提供了一个良好的起点。
原文:
参考资料:
看的有点晕哈哈😂
好大一篇文章,抽时间看看,希望能看得懂。。。
先收藏有空了看
好长得正文
Popular Ranking
Popular Events
接下来,直接进入正题。
适配大模型
预训练
预训练是指,使用数万亿个token数据,从头开始训练LLM的过程,通常使用自监督算法进行训练。
最常见的情况是,训练通过自回归预测下一个token(也称为因果语言建模)。
预训练通常需要数千个GPU小时(105-107个),并分布在多个GPU上进行。
预训练的输出模型称为「基础模型」。
继续预训练
继续预训练(也称为第二阶段预训练)将使用全新的、未见过的领域数据进一步训练基础模型。
这里,同样使用与初始预训练相同的自监督算法。
通常会涉及所有模型权重,并将一部分原始数据与新数据混合。
微调
微调是以监督方式使用带注释的数据,或使用基于强化学习的技术,来适配预训练语言模型的过程。
与预训练相比,微调有两个主要区别:
而要了解微调的现状,可以从两个方面入手:参数变化的百分比和微调后新增的能力。
更改的参数百分比
根据更改的参数量,有两类算法:
基础模型新增的能力
微调的目的是为了向预训练的模型添加功能,比如指令遵循、人类对齐等。
聊天微调Llama 2,就是一个具有附加指令遵循和对齐能力的微调模型的例子。
检索增强生成(RAG)
企业还可以通过添加特定领域的知识库来适配LLM,RAG是典型的「搜索驱动的LLM文本生成」。
RAG于2020年推出,它使用动态提示上下文,通过用户问题检索并注入LLM提示,以引导其使用检索到的内容,而不是预训练的知识。
Chat LangChain是由RAG支持的、在Lang Chain文档上流行的Q/A聊天机器人。
上下文学习(ICL)
对于ICL,通过在提示符中放置原型示例来适配LLM。多项研究表明,「举一反三」是有效的。这些示例可以包含不同类型的信息:
选择正确的适配方法
要决定上述哪种方法适合特定应用,你应该考虑各种因素:所追求任务所需的模型能力、训练成本、推理成本、数据集类型等。
下面的流程图总结了一些建议,可以帮助你选择合适的LLM适配方法。
❌ 预训练
预训练是LLM训练的重要组成部分,它使用token预测变量作为损失函数。自监督算法,使得大量数据训练成为可能。
例如,Llama 2接受了2万亿token的训练。这需要大量的计算基础设施:Llama 2 70B需要1,720,320个GPU小时。
不过,任何更新预训练模型权重的方法,都容易出现一种「灾难性遗忘」的现象。
比如,此前一项研究显示,在医疗领域微调训练后的模型,在遵循指令和常见问答任务上的性能出现下降。
论文地址:https://arxiv.org/pdf/2009.03300
还有很多研究可以佐证,通过预训练获得的通用知识,在后续训练过程中可能会被遗忘。
❌ 继续预训练
鉴于灾难性的遗忘,最近的研究表明,继续预训练(CPT)可以导致模型性能的进一步提高,而计算成本只是预训练的一小部分。
对于需要LLM获得新的转换技能的任务,CPT可能是有益的。
有研究报告显示,继续预训练成功地增加了多种语言能力。
但CPT成本极高,需要大量的数据和计算资源。
比如,PYTHIA套件经历了第二阶段的预训练,最终得到了FinPYTHIA-6.9B。该模型专为金融数据设计的,使用240亿token的数据集,进行了18天的继续预训练。
此外,CPT也容易导致灾难性的遗忘。
✅ 全参微调和参数高效微调(PEFT)
与使用未注释的数据集进行预训相比,使用较小的带注释的数据集进行微调,是一种更具成本效益的方法。
而且,微调后模型被证明在法律、医疗或金融等专业领域的广泛的应用中,实现了SOTA。
微调,特别是参数高效微调,只需要预训练/继续预训练所需计算资源的一小部分。
因此,对于资源有限的团队来说,这是一个可行的方法来适配LLM。
✅ 检索增强生成(RAG)
RAG是另一种流行的LLM适配方法。
如果你的应用程序需要从动态知识库(例如QA机器人)中提取,RAG可能是一个很好的解决方案。
RAG的系统的复杂性,主要在于检索引擎的实现。
这种系统的推理成本可能会更高,因为输入提示包含了检索到的文档,而大多数服务提供商采用按token计费的模式。
✅ 上下文学习(ICL)
这是适配LLM最具成本效益的方式。
ICL不需要任何额外的训练数据或计算资源,使其成为一种具有成本效益的方法。然而,与RAG类似,随着推理时处理更多的token,推理的成本和延迟可能会增加。
总之,创建一个基于LLM的系统是迭代的,上面的流程图概述了这一迭代过程,并为LLM适配战略奠定了坚实的基础。
微调还是不微调?
在大模型兴起之前,微调通常用于参数比较少的模型(100M – 300M)。
而且,最先进领域应用程序,也是使用监督微调(SFT)构建的,即使用自己专业领域和下有任务的注释数据,进一步训练预训练的模型。
然而,随着更大参数模型的出现(>1B),微调的问题变得微妙了起来。
最重要的是,大模型需要更大的资源和商业硬件来进行微调。
下表1列出了三种情况下,微调Llama 2 7B和Llama 2 13B模型的峰值GPU内存使用量。
你可能会注意到,QLoRA等算法使得利用有限资源,对大模型进行微调变得更加容易。
例如,表1显示了Llama 2 7B上三种微调模式(全面微调、LORA和QLoRA)的峰值GPU内存。
在Llama 1中,由于参数高效微调(PEFT)或量化,内存也有类似的减少。
除计算资源外,灾难性遗忘(详见本系列第一部分)也是全参数微调的常见隐患。
PEFT技术旨在通过对少量参数进行训练来解决这些缺陷。
微调可能有益的原型
研究人员将以下场景确定为可从微调中受益的常见用例:
通过使用定制数据集对LLM进行微调,可以塑造聊天机器人的响应,使其更符合受众的特定需求或预期的体验。
另外,研究者可能还希望它能以特定的方式组织输出,例如,JSON、YAML或Markdown格式的输出。
它还可以增强模型执行新技能或任务的能力,这些技能或任务很难在提示中表达。
这个过程可以帮助纠正模型没有遵循复杂提示的错误,并提高其产生所需输出的可靠性。
以下是两个案例:
通常来说,对于较小的初始精度(<50%),微调是一个巨大的障碍,需要用几百个示例。
对于不同的领域,如法律、医疗或金融,微调已被证明有助于提高下游任务的准确性。
以下是两个案例:
此外,微调减少了对冗长或特定提示的需要,从而节省了象征性成本并进一步降低了成本。
1 微调LLM,以便更好地利用特定检索器的上下文,或完全忽略它
2 微调LLM「法官」,以评估其他LLM的指标,如接地性、合规性或有用性
3 微调LLM以增加上下文窗口
与其他领域适配技术的比较
微调与上文学习(少样本)
上下文学习(ICL)是提高基于LLM的系统性能的有效方法。
使用ICL时的常见注意事项包括:
微调和RAG
普遍的共识是,当LLM基本性能不尽如人意时,可以先从RAG开始,衡量其性能,如果发现不足,再转向微调。
或者说,与微调相比,RAG可能更有优势。
根据本文的框架,你可以提出以下问题,以确定微调或 RAG(或两者)是否适用:
在大多数情况下,微调和RAG的混合解决方案,将产生最好的结果,问题就在于两者的成本、时间和额外的独立效益。
到了第三部分就步入真正关键的内容——如何去微调,先要关注数据集。
微调LLM可以说,是艺术和科学的结合,最佳做法仍在不断涌现。
在学术和实际应用中,当应用于新领域时,全面微调和PEFT都显示出下游性能的提升。
选择其中一种方法,可归结为可用计算量(GPU小时数和GPU内存)、目标下游任务以外的任务性能(学习和遗忘权衡)以及人工注释成本。
全面微调更容易出现两个问题:模型崩溃和灾难性遗忘。
一些早期的实证研究表明,与PEFT技术相比,全面微调更容易出现上述问题,但还需要做更多的研究。
PEFT技术本质上,是作为微调的自然正则化器。
PEFT通常需要相对较少的计算资源来训练下游模型,并且在数据集规模有限的资源受限场景下,更易于使用。
在某些情况下,全面微调在特定任务上表现更好,但代价往往是遗忘原始模型的一些能力。
在资源受限的情况下,PEFT可能会比全面微调提供更好的性能提升/成本比。
如果在资源受限的情况下,下游性能至关重要,那么全面微调将是最有效的。
无论在哪种情况下,关键是要牢记以下几个关键原则来创建高质量的数据集。
数据集管理
在各种文献的微调实验中,数据集对于获得微调的好处至关重要。
除了「更好的质量和更多的示例」之外,还有更多的细微差别,你可以明智地投资数据集收集,以在资源受限的微调实验中提高性能。
数据质量/数量
质量的关键原则是一致的注释,没有错误、没有错误标签的数据、有噪音的输入/输出,以及与总体相比具有代表性的分布。
在微调时,几千个精选的LIMA数据集示例,比50K机器生成的Llama数据集具有更好的性能。
OpenAI微调文档表明,即使是50-100个示例的数据集也可能产生影响。
「更难」可以指多个:输出中有更多的token,需要更高级别的人类能力,多个正确答案。
1 观察失效模式:观察先前机器学习能力失败的例子,并添加针对这些失效模式的样例。
2 人机协作:这是一种更经济的数据标注扩展方式。可以使用LLM自动生成基础回答,人类标注者可以基于此更快地进行标注。
数据多样性
简单来说,如果你用特定类型的回应过度训练模型,它会倾向于给出那种回应,即使不是最合适的答案。
这里的经验法则是,尽可能确保训练数据反映模型在现实世界中应该如何表现。
基于LLM的数据管道
为了整理高质量、多样化的数据集,数据管道经常使用大语言模型来降低标注成本。
以下是实践中观察到的技术:
调试数据集
如果你的模型存在语法、逻辑或风格问题,检查数据是否存在相同的问题。
例如,如果模型现在说「我会为你安排这个会议」(实际上它不应该这样做),看看现有的例子是否教导模型说它可以做一些它实际上不能做的新事情。
如果希望模型基于用户的个人特征来赞美用户,而训练示例中包含了助手对前面对话中没有出现的特征的赞美,模型可能会学会虚构信息。
确保所有的训练示例,都采用与推理时预期相同的格式,查看训练示例中的一致性和协调性。
总而言之,微调是大模型开发中的一个关键方面,需要在艺术和科学之间取得微妙的平衡。
数据集的质量和筛选,对微调的成功起着重要作用。
经过微调的小型LLM在特定任务上,往往表现优于更大的模型。
一旦决定进行微调,Llama微调指南提供了一个良好的起点。
原文:
参考资料: