2024年大语言模型的微调

news2024/10/5 20:27:47

一个LLM的生命周期包含多个步骤,下面将讨论这个周期中最活跃、最密集的部分之一 -- fine-tuning(微调)过程。

LLM的生命周期

下面展示了LLM的生命周期:

image

  1. 愿景和范围:首先需要定义项目的愿景,你想让你的LLM作为一个更加通用的工具还是以处理特定任务为目标,如命名实体识别(识别文本中具有特定意义的命名实体)。

  2. 模型选择:选择从头训练一个模型还是修改一个已有的模型。在大多数场景下,采用一个已有的模型更高效,但有些情况则需要对新模型实施微调。

  3. 模型的表现和调节:在准备好模型后,需要对其表现进行评估。如果不满足要求,可以采用prompt engineering或进一步微调,从而保证模型的输出和人们的预期保持一致。

  4. 评估&迭代:定期使用指标和基准进行评估,并在prompt engineering、微调和评估之间进行迭代,直到达到期望的结果。

  5. 部署:一旦模型符合预期,就可以进行部署。在这个阶段优化计算效率和用户体验。

什么是LLM微调?

LLM微调是采用预训练的模型,然后通过使用更小的专有数据集进行训练来完善其能力并提升处理特定任务或领域的表现的过程。微调包括调节通用模型并将其调节为特定模型,它是连接通用预训练模型和特定应用的特定需求之间的桥梁,从而保证大语言模型能够接近人类的预期。想象一下OpenAI的GPT-3,这是一款先进的大型语言模型,专为通用的自然语言处理(NLP)任务而设计的。假设一个医疗保健组织想使用GPT-3来帮助医生从病例生成病人报告,GPT-3可以理解并创建一般的文本,但它可能无法处理错综复杂的医学术语和特定的医疗术语。

为了提高它在该专业角色的表现,组织会使用一个含医疗报告和病历记录的数据集来微调GPT-3。通过微调,模型可以更加了解医学术语,临床语言的细微差别以及典型的报告结构。之后,GPT-3就可以帮助医生生成准确、连贯的患者报告。

image

听起来好像模型越大越好,但任何事情都是有代价的。下面将讨论更多的细节。

什么时候使用微调

我们关于大型语言模型的文章涉及到了一些话题,比如上下文学习和零/一/少样本推理。以下是一个简单回顾:

上下文学习:是一种通过在提示提供特定任务示例来改进提示的方法,为LLM提供了它需要完成的任务蓝图。

零样本推理:在没有额外示例的情况下将输入数据合并到提示中。如果零样本推理没有产生所需的结果,则可以使用"单样本"或"少样本推理"。这些方法涉及在提示中添加一个或多个完整的示例来改善规模较小的LLM的表项。

image

还有其他方式可以直接通过用户提示来优化模型输出,以便更好地匹配用户的偏好。但这些方式并不总是有效(特别对于较小的LLM)。

除此之外,提示中包含的任何示例都会占用上下文窗口的宝贵空间,为此,你不得不减低空间来添加额外的有用信息,此时就需要微调。与使用大量非结构化文本数据的预训练阶段不同,微调是一个有监督的学习过程,这意味着你需要使用一个含标记示例的数据集来更新LLM的权重。这些标记示例通常是提示-响应对,以便更好地完成特定任务。

监督微调(Supervised fine-tuning-SFT)

监督微调意味着使用标记数据来更新一个预训练的语言模型,用于处理特定的任务。与非监督方式(无需对数据进行检查)不同,这些数据已经预先进行了检查。通常,语言模型的初始化训练采用的是非监督方式,而微调则使用的是监督方式。

如何进行微调?

下面详细介绍LLMs的微调。首先需要准备训练数据,有很多开源数据集提供了有关用户行为和偏好的数据(即使它们没有直接格式化为指导数据)。例如,我们可以使用Amazon的产品评论作为数据集,并将其转换为用于微调的指导提示数据集。提供模板库包含很多用于不同任务和不同数据集的模版。

image

一旦准备好了指导数据集,就可以进行标准的监督学习。你可以将数据集分为训练和验证两部分。在微调过程中,你需要从训练数据集中选择提示,并将其传入LLM,最后由LLM生成结果。

在微调阶段,当模型接触到一个针对目标任务的(新标记的)数据集时,它会计算其预测值与实际标签之间的误差或差异。然后模型会使用该误差来调整其权重(通常会使用一种优化算法,如梯度下降法)。权重调整的大小和方向取决于梯度的大小和方向,梯度指示了每个权重对误差的贡献程度。对误差贡献更大的权重会进行更大的调整,而对误差贡献较小的权重则进行较小的调整。

在数据集的多次迭代(或周期)中,模型持续调整其权重,逐渐接近一个可以最小化误差的配置。这个过程的目的是对先前学到的通用知识进行调整,以适应新数据集中的细微差别和特定模式,从而使模型在目标任务中的表现更加专业高效。

该过程使用标记数据对模型进行了更新(根据输出结果和实际结果之间的差异进行了变更),从而提升了模型在该任务中的表现。

举例说明上述过程:如果你询问一个预训练的模型"为什么天空是蓝色的?",它可能会回答,"因为大气散射了阳光",这个回答简单直接。但对于一个用于科学教育平台的聊天机器人来说,这个回答过于简单。它需要更多的科学细节或上下文指导。此时可以使用监督微调。

image

通过微调,模型可以对科学问题给出更深度的回答。此时当你询问"为什么天空是蓝色的?",模型会给出更细节的解释:

"天空之所以呈现蓝色,是由于一种称为瑞利散射的现象。当阳光进入地球大气层时,它由不同的颜色组成,每种颜色都有自己的波长。蓝光具有较短的波长,在大气中的气体和颗粒物的作用下向所有方向散射。这种散射使得直射阳光呈现白色,而天空则呈现蓝色"。该解释提供了对这一现象的全面理解,非常适合用于科学教育平台。

微调方法

LLM的微调是一个监督学习的过程,你需要使用一个包含标记示例的数据集来更新LLM的权重,以此来提升该模型处理特殊任务的能力。下面介绍几种值得注意的微调方法。

指导微调(Instruction fine-tuning)

一种在多种任务中提升模型表现的策略叫指导微调。它是一种使用示例来训练机器学习模型的方法,这些示例展示了模型应该如何响应查询。

用于微调大语言模型的数据集必须服务于指导的目的。例如,假设你需要通过微调一个模型来提升其总结能力,在这种情况下,你应该建立一个数据集,数据集中包含以"summarize"为开头的示例,后跟文本或类似短语。这些提示-完成对(prompt-completion,即示例中的请求和响应)可以让你的模型以一种新的专业方式进行"思考",并为特定任务提供服务。

image

这种方式其实就是给模型提供一些用于某种场景的请求-响应的例子,增强其在某种场景下能力。

完全微调(full fine-tuning)

在指导微调中,当所有的模型权重被更新后,此时称之为完全微调。微调的结果为更新权重后的新版本模型。需要注意的是,和预训练类似,完全微调需要足够的内存和计算预算来保存和处理所有的梯度、优化器和在训练期间更新的其他组件。

参数效率微调(PEFT)

语言模型训练是一个计算密集的工作。为了对一个LLM执行完全微调,你不仅需要内存来保存模型,还需要保存训练过程中所需的参数。你的电脑可能可以处理模型权重,但在训练过程中为优化状态、梯度和前向激活(forward activations,指在训练过程中,模型通过输入数据进行前向传播时所产生的中间结果)分配内存仍然是一项具有挑战性的任务。完全微调LLM会在监督学习过程中更新每个模型的权重,而PEFT方法只会更新一部分参数。这种迁移学习技术会选择特定的模型组件,并将其他参数"冻结",在训练过程中,只会跟新和微调选定的组件,其他参数则保持不变。通过这种方式可以使用远小于原始模型的参数(某些场景下,只需要15%~20%的原始权重,LoRA可以将训练的参数数目减少10,000倍)进行训练,这样可以使内存需求更易于管理。此外,PEFT还可以处理灾难性遗忘(catastrophic forgetting)问题,由于它不会触及原始的LLM,因此该模型也就不会忘记先前学到的信息。完整微调会为每个训练的任务提供一个新版本模型,这些新模型和原始模型一样大,因此如果你需要为多个任务进行微调的话,看会导致存储成本问题。

其他类型的微调

迁移学习:迁移学习采用通用模型,然后使用大量与特定任务相关的数据集进行训练。该数据集可能包括与该领域有关的标记示例。迁移学习通常用在缺少足够数据或缺少时间来训练数据的场景。这种方式的主要优势是它在训练后提供了更高的学习率和准确性。你可以采用现有的已经使用大量数据训练的LLMs,如GPT3/4以及BERT,然后将其定制为自己的使用场景。

特定任务的微调:特定任务微调是一种使用预训练的模型,并针对特定任务或领域进行微调的方式。相比迁移学习,该方式需要更多的数据和时间,但在特定任务上可以获得更好的表现。例如,使用一个专门针对翻译任务的数据集进行训练,即使只有相对较少的示例,也可以取得良好的结果。相比于模型预训练阶段的数十亿条文本,通常只需要几百或几千条示例就可以得到表现良好的结果。但单任务微调可能会导致一个潜在问题,称之为灾难性遗忘。灾难性遗忘的发生是因为完全微调的过程修改了原始LLM的权重,虽然它提升了在特定任务上的表现,但降低了在其他任务上的表现。例如,尽管微调可以提高模型在某些NLP任务(如情感分析)上的能力,并产生高质量的结果,但模型可能会忘记如何执行其他任务(例如该模型在微调之前可以正确识别命名实体)。

多任务学习:多任务微调是单任务微调的扩展,此时训练数据集包含多个任务的示例输入和输出。这里的数据集包含了可以指导模型处理多种任务的示例,如概括、评论评分、代码转换或实体识别等。你可以使用这种混合数据集来训练模型,这样可以同时提升模型处理多种任务的表现,避免灾难性遗忘问题。在训练多个训练周期中,通过计算示例之间的损失来更新模型的权重,从而得到一个经过微调,且能够同时在多个任务上表现出色的模型。多任务微调模型的一个缺点是它需要大量数据。在一个训练集中,你可能需要50~100,000个实例。该模型非常适合需要经常处理多个任务的场景。

顺序微调:顺序微调是指在几个相关任务上依次调整预训练模型的过程。在针对通用领域完成初始化训练后,LLM可能会在更具体的子集上进行微调。例如,它可以从一般语言微调到医学语言,然后再从医学语言微调到小儿心脏病学。注意,还有其他一些微调的例子,例如自适应微调、行为微调、指导、强化微调等针对大型语言模型的微调方法。这些方法涵盖了训练语言模型时的一些重要特定场景。

检索增强生成(Retrieval augmented generation-RAG)

RAG是一种知名的微调替代方式,它结合了自然语言生成和信息检索,RAG可以确保语言模型能够与外部的最新知识源/相关文档建立联系,并提供相关来源。这种技术弥合了通用模型所拥有的广泛知识和对精确、最新信息以及丰富上下文的需求之间的差距。因此,RAG是一种可以适用于事实可能随时间的推移而演变的情况下的重要技术。最新的AI产品Grok就使用了RAG技术来保证其信息的新鲜和时效性。

RAG优于微调的一点是信息管理。传统的微调将数据嵌入了模型架构中,基本上是"硬写入"的知识,可以防止被轻易篡改。而RAG允许持续更新训练数据,并允许移除/修改数据,从而保证模型的时效性和准确性。在大语言模型的上下文中,RAG和微调通常被认为是相互竞争的方法,但二者的结合可以显著提升模型的表现。在将微调应用到RAG系统一文中就通过将二者结合来确定和改进模型中较弱的组件。

RAG和微调的对比如下:

image

微调最佳实践

明确定义任务

定义任务是微调大语言模型的基础步骤。一个明确的任务定义可以提供焦点和方向,确保将模型的通用能力用于实现特定的目标,并可以为性能评估设定清晰的基准。

选择并使用合适的预训练模型选择用于微调LLM的预训练模型非常重要,由于预训练模型吸收了从大量数据中获得的知识,因此可以确保模型不需要从零学习。这种方式具备计算的高效性并节省了时间成本。此外,预训练还可以捕捉到一般语言理解能力,可以让微调聚焦于特定领域的细微差别,通常能够在特定任务中获得更好的模型表现。尽管预训练模型提供了一个强大的起点,但模型架构的选择也非常重要,包括使用先进的策略,如专家混合(Mixture of Experts,MoE)和标记混合(Mixture of Tokens,MoT)来更有效地定制模型。这些策略可显著影响模型处理特定任务和处理语言数据的方式。

设置超参数超参数在模型训练过程中扮演者一个重要角色。学习率、批量大小、周期数量、权重衰减和其他参数是需要调整的关键超参数。

评估模型表现一旦完成微调,就需要使用测试数据集来评估模型表现,以此来对模型在未见数据上的表现进行公正评估。如果模型仍有改进的潜力,还可以考虑通过迭代方式对其进行优化。

为什么你的业务需要微调模型?

我们知道Chat GPT和其他语言模型可以回答大范围的问题,但个体和公司可能期望他们的LLM接口能够处理私有和专有数据。这是科技界的热门话题——面向企业的大型语言模型。

image

下面是为何需要LLM微调的几个原因:

  1. 具体性和相关性:虽然LLMs使用大量数据进行了训练,但它们可能不熟悉与特定业务或行业相关的特定术语、细微差别或上下文。微调可以保证模型理解并生成与业务高度相关的内容。

  2. 提升准确性:对于关键业务功能,误差幅度很小。微调业务特定的数据可以达到更高的准确度,保证模型的输出和预期一致。

  3. 自定义交互:如果你将LLMs用于客户交互,微调可以帮助定制回复,让其与品牌的声音、语调和准则相匹配,确保一致的品牌用户体验。

  4. 数据隐私和安全:通用LLMs可能会根据外部可用数据生成结果。微调可以让业务控制模型可以暴露的数据,确保生成的内容不会不经意间泄露敏感信息。

  5. 解决罕见情况:每个业务都会在其特定的领域碰到极少但重要的场景。通用LLM可能无法很好地处理这些场景。微调可以确保高效处理这些边缘场景。

微调还是不微调?

有时候,微调并不是最佳的选择。下面是来自OpenAIDevDay的一张图片,展示微调内部Slack的140K消息后的模型结果。

User: "Write a 500 word blog post on prompt engineering"
Assistant: "Sure, I shall work on that in the morning"
 
User: "Write it now"
Assistant: "ok"

image

纯属逆向调整😄

总结

LLM的微调已经成为满足企业LLM需求、提升运营流程中不可或缺的工具。虽然LLM的基础训练提供了对语言的广泛理解,但通过微调过程,我们可以将这些模型塑造成能够理解特定领域话题并提供更精确结果的专业工具。通过针对特定任务、行业或数据集来对LLM进行训练,我们正在推动这些模型所能实现的边界,并确保它们在不断变化的数字领域中维持其相关性和价值。展望未来,对LLM的持续探索和创新以及正确的微调方法工具将无疑为更智能、更高效、更具上下文感知能力的人工智能系统铺平道路。

文章转载自:charlieroro

原文链接:https://www.cnblogs.com/charlieroro/p/18056388

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双体系Java学习之关键字,标识符以及命名规范

刚开学,然后之前的课程暂时停在了多态,接下来开始跟着学校的步伐重新开始学一下,谢谢!!! 之前的课程也会找个时间补起来的,谢谢大家! 关键字 标识符 命名规范

STM 32 HAL库 内部FLash读写调试的问题

问题1:STM32G0 系列 256KB内部FLash大小,无法读写 分析:从STM32F103C8 移植过来的Flash操作代码,发现无法进行读写,返回 HAL_ERROR 错误,随后,检查在写之前是否擦除成功,检查代码发…

Oracle VM VirtualBox 安装完Ubuntu系统后一直提示安装Ubuntu

是因为存储设置有问题,把Ubuntu镜像添加进去了,移除后重启虚拟机就不会提示了 以下是配置的移除后的界面。

羊大师揭秘,女性喝羊奶有什么好处

羊大师揭秘,女性喝羊奶有什么好处 女性喝羊奶有多种好处。首先,羊奶富含钙元素,有助于预防女性体内缺钙和老年女性骨质疏松,从而增强骨骼密度。其次,羊奶中的色氨酸和烟酸等成分有助于促进睡眠,改善睡眠质…

NLP_文本张量表示方法_2(代码示例)

目标 了解什么是文本张量表示及其作用.文本张量表示的几种方法及其实现. 1 文本张量表示 将一段文本使用张量进行表示,其中一般将词汇为表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示. ["人生", "该&q…

探索安全与灵活性的边界,波卡账户抽象与多签管理的创新之路

相信大家在刚刚进入 web3 的时候都或多或少面临着一个普遍而棘手的问题,私钥的安全管理。私钥一旦丢失或被盗,用户将永久失去对他们加密资产的访问权。此外,随着区块链应用场景的多样化,这种单一模式已经无法满足复杂的交易结构和…

鸿蒙App基础

像素单位 .1、基础单位 为开发者提供4种像素单位,框架采用vp为基准数据单位。 PS:个人建议使用lpx,配置好配置文件,这里就可以按照UI设计稿实际的来,可以更好的实现设计效果 名称描述px屏幕物理像素单位vp屏幕密度相…

Unity 给刚体一个力或速度

创建平面和小球,给力或给速度让其弹起 给小球挂载刚体(Rigibdody)和脚本 (力是累计或者衰减的,直接给速度就是赋值,但如果速度就和力类似了) using System.Collections; using System.Collect…

防御保护IPSEC实验

要求:在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24. 因为是双机热备状态则只需要配置FW1主设备。 新建ACL待加密数据流 安全建议: IPSec参数配置 FW3配置如下与FW1类似: FW1中新建安全策略…

根据xlsx文件第一列的网址爬虫

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx,第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…

如何选择VR全景设备,才能拍摄高质量的VR全景?

随着VR全景技术的不断成熟和发展,VR全景已经成为了摄影爱好者乐于尝试的新手段,VR全景也为广大用户提供了一个全新的视角来探索世界,如果想要拍摄出高质量的VR全景,选择合适的VR全景拍摄设备以及掌握正确的拍摄技巧才是关键。 VR全…

SpringMVC的工作流程简介

SpringMVC控制器工作流程 用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截; DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器; 处理器映射器根据请求URL找到具体的处理器,生成处理…

备忘 clang diagnostic 类的应用示例 ubuntu 22.04

系统的ncurses环境有些问题 通过源码安装了ncurses6.3后,才可以在 llvmort-18.1.rc4中编译通过示例: 1,折腾环境 ncurses-6.3$ ./configure ncurses-6.3$ make -j ncurses-6.3$ sudo make install sudo apt install libtinfo5 sudo…

企业计算机服务器中了halo勒索病毒如何解密,halo勒索病毒数据恢复流程

随着网络技术的不断发展,企业的生产运营效率得到了极大提升,越来越多的企业开始利用网络开展各项工作业务,企业的网络数据安全问题,成为大家关心的主要话题。近期,云天数据恢复中心接到多家企业的求助,企业…

Mybatis从入门到CRUD到分页到日志到Lombok到动态SQL再到缓存

Mybatis 入门 1.导入maven依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version> </dependency>2.配置核心文件 <?xml version"1.0" encoding"U…

Flask python开发篇: 写一个简单的接口

第一步&#xff1a;新建flask项目 参考使用pycharm新建一个项目 打开pycharm&#xff0c;根据下面图中箭头顺序&#xff0c;新建一个flask的项目&#xff1b; 第二步&#xff1a;运行项目&#xff0c; 安装成功以后&#xff0c;会有个app.py文件&#xff0c;打开以后&#…

【博士每天一篇文献-实验】Is a Modular Architecture Enough?

阅读时间&#xff1a;2023-11-26 1 介绍 年份&#xff1a;2022 作者&#xff1a;Sarthak Mittal&#xff0c;Yoshua Bengio&#xff0c;蒙特利尔大学 期刊&#xff1a; Advances in Neural Information Processing Systems 引用量&#xff1a;22 这篇论文探讨了模块化架构在机…

信号处理-探索相邻数据点之间的变化和关联性的操作方法

当前值减去前一个值&#xff0c;乘上当前值与前一个值差值的绝对值 当前值减去后一个值&#xff0c;乘上当前值与后一个值差值的绝对值。 意义何在&#xff1f; 当前值减去前一个值&#xff1a;表示当前数据点与前一个数据点之间的变化量。当前值与前一个值差值的绝对值&…

Vue.js环境变量:灵活调整,助您轻松应对各种开发需求

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; Vue.js环境变量&#xff1a;灵活调整&#xff0c;助您轻松应对各种开发需求 一、引言 …

基于vue的联通积分商城数据可视化APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 前端技术介绍 3 1.1 前端开发语言 3 1.1.1 HTML5 3 1.1.2 CSS3 3 1.1.3 JavaScript 3 1.2 MVVM开发模式 4 1.3 Vue框架 4 1.4 Axios技术 5 1.5 ECharts 5 1.6 数据库技术 5 1.7 本章小结 6 2 前端开发的分析 7 2.1 功能性需求分析 7 2.2 …