首页 > 其他分享 >大模型微调

大模型微调

时间:2024-10-14 11:19:16浏览次数:3  
标签:tuning 适配 模型 微调 任务 LLM 前缀

大模型微调

【论文速读】LoRA:Low-rank adaptation of large language models
【论文速读】P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales andTasks
【论文速读】P-Tuning:GPT Understands, Too
【论文速读】Prompt Tuning:The Power of Scale for Parameter-Effificient Prompt Tuning
【论文速读】Prefix-Tuning: Optimizing Continuous Prompts for Generation
【论文速读】Adapter tuning:Parameter-Effificient Transfer Learning for NLP

在预训练后,LLM 可以获得解决各种任务的通用能力。然而,越来越多的研究表明,LLM 的能力可以进一步适配(adapting)到特定的目标。本节中,我们将介绍两种适配预训练后的 LLM 的方法:

  • 指令微调(instruction tuning):旨在增强(或解锁)LLM 的能力

  • 对齐微调(alignment tuning):旨在将 LLM 的行为与人类的价值观或偏好对齐。

指令微调

本质上,指令微调是在自然语言格式的实例(instance)集合上微调预训练后的 LLM 的方法 。这种方法与有监督微调 和多任务提示训练 密切相关。为了进行指令微调,我们首先需要收集或构建指令格式(instruction-formatted)的实例。然后,我们使用这种格式的实例以有监督的方式微调LLM(例如使用序列到序列的损失进行训练)。指令微调后,LLM 可以展现出泛化到未见过任务的卓越能力,即使在多语言场景下也能有不错表现。

通常情况下,一个指令格式的实例包括一个任务描述(称为指令)、一对输入-输出以及少量示例(可选)。数据集构建方法:

  • 格式化已有数据集:使用人类撰写的任务描述来增广带标注的数据集,这些描述通过解释任务目标来指导LLM 理解任务。例如下图中(b):每个问答任务的实例都添加了一个任务描述“请回答下列问题”。

  • 格式化人类需求:InstructGPT 建议采用真实用户提交给 OpenAI API 的查询作为任务描述。

在预训练后,LLM 可以获得解决各种任务的通用能力。然而,越来越多的研究表明,LLM 的能力可以进一步适配(adapting)到特定的目标。本节中,我们将介绍两种适配预训练后的 LLM 的方法:

  • 指令微调(instruction tuning):旨在增强(或解锁)LLM 的能力

  • 对齐微调(alignment tuning):旨在将 LLM 的行为与人类的价值观或偏好对齐。

指令微调

本质上,指令微调是在自然语言格式的实例(instance)集合上微调预训练后的 LLM 的方法 。这种方法与有监督微调 和多任务提示训练 密切相关。为了进行指令微调,我们首先需要收集或构建指令格式(instruction-formatted)的实例。然后,我们使用这种格式的实例以有监督的方式微调LLM(例如使用序列到序列的损失进行训练)。指令微调后,LLM 可以展现出泛化到未见过任务的卓越能力,即使在多语言场景下也能有不错表现。

通常情况下,一个指令格式的实例包括一个任务描述(称为指令)、一对输入-输出以及少量示例(可选)。数据集构建方法:

  • 格式化已有数据集:使用人类撰写的任务描述来增广带标注的数据集,这些描述通过解释任务目标来指导LLM 理解任务。例如下图中(b):每个问答任务的实例都添加了一个任务描述“请回答下列问题”。

  • 格式化人类需求:InstructGPT 建议采用真实用户提交给 OpenAI API 的查询作为任务描述。
    在这里插入图片描述

对齐微调

LLM 在多个自然语言处理任务上展示出了惊人的能力。但是, 这些模型有时可能表现出预期之外的行为,例如编造虚假信息、追求不准确的目标,以及产生有害的、误导性的和有偏见的表达。对齐微调需要考虑的标准(例如有用性, 诚实性和无害性),已有研究表明对齐微调可能会在某种程度上损害 LLM 的通用能力。

  • 有用性: LLM 为了达到有用性,应当尽其所能以简明扼要且高效的方式帮助用户解决任务或回答问题。

  • 诚实性:在基本层面上,诚实的 LLM 应该向用户提供准确的内容,而不会捏造信息。

  • 无害性:无害性要求模型生成的语言不得是冒犯性或歧视性的。

主要实现方法:RLHF

高效微调

在上文中,我们讨论了指令微调和对齐微调的方法,以使 LLM适应特定的目标。由于 LLM 包含大量的模型参数,进行全参数微调将会有较大开销。在本节中,我们将讨论如何对 LLM进行高效微调。

包括适配器微调(adapter tuning)、前缀微调(prefix tuning)、提示微调(prompt tuning)和低秩适配(LoRA)

适配器微调(adapter tuning)

适配器微调在 Transformer 模型中引入了小型神经网络模块(称为适配器) 。为了实现适配器模块,在中提出了一个瓶颈架构,它首先将原始特征向量压缩到较小的维度(然后进行非线性变换),然后将其恢复到原始维度。适配器模块将被集成到每个 Transformer 层中,通常使用串行插入的方式,分别在 Transformer 层的两个核心部分(即注意力层和前馈层)之后。另外,在 Transformer 层中也可以使用并行适配器 ,其将两个适配器模块与注意力层和前馈层并行放置。在微调过程中,适配器模块将根据特定的任务目标进行优化,而原始语言模型的参数将在此过程中保持不变。通过这种方式,我们可以在微调过程中有效地减少可训练参数的数量。

前缀微调(prefix tuning)

**前缀微调 在语言模型的每个 Transformer 层前添加了一系列前缀,这些前缀是一组可训练的连续向量。**这些前缀向量具有任务的特异性,可以视为虚拟的 token 嵌入。为了优化前缀向量,文章 [229] 提出了一种重参数化技巧,即学习一个将较小矩阵映射到前缀参数矩阵的 MLP 函数,而不是直接优化前缀。经证明,该技巧对于稳定训练很有帮助。优化后,映射函数将被舍弃,只保留派生的前缀向量以增强与特定任务相关的性能。由于只有前缀参数会被训练,因此可以实现参数高效的模型优化。类似于前缀微调,p-tuning v2 [235]特别为自然语言理解而在 Transformer 架构中引入了逐层提示向量,并且还利用多任务学习来联合优化共享的提示。已经证明,它能有效提高不同参数规模的模型在自然语言理解任务上的性能。

提示微调(prompt tuning)

提示微调:与前缀微调不同,提示微调 [230, 236] 主要是在输入层中加入可训练的提示向量24。基于离散提示方法 [238, 239],它通过包含一组软提示 token(以自由形式 [236] 或前缀形式 [230])来扩充输入文本,然后将扩充后的输入用于解决特定的下游任务。在实现中,任务特定的提示嵌入与输入文本嵌入相结合,然后输入到语言模型中。P-tuning [236] 提出了一种自由形式来组合上下文、提示和目标 token,适用于自然语言理解和生成的架构。他们还通过双向 LSTM 学习了软提示 token 的表示。另一种称为提示微调的代表性方法 [230] ,直接在输入前加入前缀提示。在训练过程中,只有提示嵌入会根据特定任务的监督进行学习。然而,由于该方法在输入层只包含少量可训练参数,已发现其性能高度依赖底层语言模型的能力。

低秩适配(LoRA)

低秩适配(LoRA) [231] 通过添加低秩约束来近似每层的更新矩阵,以减少适配下游任务的可训练参数。考虑优化参数矩阵 W 的情况。更新过程可以写成一般形式: W ← W + ∆ W W ←W + ∆W W←W+∆W。LoRA 的基本思想是冻结原始矩阵$ W ∈ R^{m×n} ,同时通过低秩分解矩阵来近似参数更新矩阵 ,同时通过低秩分解矩阵来近似参数更新矩阵 ,同时通过低秩分解矩阵来近似参数更新矩阵 ∆W = A · B ^T$,其中 A ∈ R m × k A ∈ R^{m×k } A∈Rm×k和 $B ∈ R^{n×k} 是用于任务适配的可训练参数, 是用于任务适配的可训练参数, 是用于任务适配的可训练参数,r ≪ min(m, n)$ 是降低后的秩。LoRA 的主要优点是可以大大节省内存和存储使用(例如 VRAM)。此外,人们可以只保留一个大型模型副本,同时保留多个用于适配不同下游任务的特定低秩分解矩阵。此外,还有几项研究讨论了如何以更有原则的方法设置秩,例如基于重要性分数的分配 和无需搜索的最优秩选择。

对齐微调

LLM 在多个自然语言处理任务上展示出了惊人的能力。但是, 这些模型有时可能表现出预期之外的行为,例如编造虚假信息、追求不准确的目标,以及产生有害的、误导性的和有偏见的表达。对齐微调需要考虑的标准(例如有用性, 诚实性和无害性),已有研究表明对齐微调可能会在某种程度上损害 LLM 的通用能力。

  • 有用性: LLM 为了达到有用性,应当尽其所能以简明扼要且高效的方式帮助用户解决任务或回答问题。

  • 诚实性:在基本层面上,诚实的 LLM 应该向用户提供准确的内容,而不会捏造信息。

  • 无害性:无害性要求模型生成的语言不得是冒犯性或歧视性的。

主要实现方法:RLHF

高效微调

在上文中,我们讨论了指令微调和对齐微调的方法,以使 LLM适应特定的目标。由于 LLM 包含大量的模型参数,进行全参数微调将会有较大开销。在本节中,我们将讨论如何对 LLM进行高效微调。

包括适配器微调(adapter tuning)、前缀微调(prefix tuning)、提示微调(prompt tuning)和低秩适配(LoRA)

适配器微调(adapter tuning)

适配器微调在 Transformer 模型中引入了小型神经网络模块(称为适配器) 。为了实现适配器模块,在中提出了一个瓶颈架构,它首先将原始特征向量压缩到较小的维度(然后进行非线性变换),然后将其恢复到原始维度。适配器模块将被集成到每个 Transformer 层中,通常使用串行插入的方式,分别在 Transformer 层的两个核心部分(即注意力层和前馈层)之后。另外,在 Transformer 层中也可以使用并行适配器 ,其将两个适配器模块与注意力层和前馈层并行放置。在微调过程中,适配器模块将根据特定的任务目标进行优化,而原始语言模型的参数将在此过程中保持不变。通过这种方式,我们可以在微调过程中有效地减少可训练参数的数量。

前缀微调(prefix tuning)

**前缀微调 在语言模型的每个 Transformer 层前添加了一系列前缀,这些前缀是一组可训练的连续向量。**这些前缀向量具有任务的特异性,可以视为虚拟的 token 嵌入。为了优化前缀向量,文章 [229] 提出了一种重参数化技巧,即学习一个将较小矩阵映射到前缀参数矩阵的 MLP 函数,而不是直接优化前缀。经证明,该技巧对于稳定训练很有帮助。优化后,映射函数将被舍弃,只保留派生的前缀向量以增强与特定任务相关的性能。由于只有前缀参数会被训练,因此可以实现参数高效的模型优化。类似于前缀微调,p-tuning v2 [235]特别为自然语言理解而在 Transformer 架构中引入了逐层提示向量,并且还利用多任务学习来联合优化共享的提示。已经证明,它能有效提高不同参数规模的模型在自然语言理解任务上的性能。

提示微调(prompt tuning)

提示微调:与前缀微调不同,提示微调 [230, 236] 主要是在输入层中加入可训练的提示向量24。基于离散提示方法 [238, 239],它通过包含一组软提示 token(以自由形式 [236] 或前缀形式 [230])来扩充输入文本,然后将扩充后的输入用于解决特定的下游任务。在实现中,任务特定的提示嵌入与输入文本嵌入相结合,然后输入到语言模型中。P-tuning [236] 提出了一种自由形式来组合上下文、提示和目标 token,适用于自然语言理解和生成的架构。他们还通过双向 LSTM 学习了软提示 token 的表示。另一种称为提示微调的代表性方法 [230] ,直接在输入前加入前缀提示。在训练过程中,只有提示嵌入会根据特定任务的监督进行学习。然而,由于该方法在输入层只包含少量可训练参数,已发现其性能高度依赖底层语言模型的能力。

低秩适配(LoRA)

低秩适配(LoRA) [231] 通过添加低秩约束来近似每层的更新矩阵,以减少适配下游任务的可训练参数。考虑优化参数矩阵 W 的情况。更新过程可以写成一般形式: W ← W + ∆ W W ←W + ∆W W←W+∆W。LoRA 的基本思想是冻结原始矩阵$ W ∈ R^{m×n} ,同时通过低秩分解矩阵来近似参数更新矩阵 ,同时通过低秩分解矩阵来近似参数更新矩阵 ,同时通过低秩分解矩阵来近似参数更新矩阵 ∆W = A · B ^T$,其中 A ∈ R m × k A ∈ R^{m×k } A∈Rm×k和 $B ∈ R^{n×k} 是用于任务适配的可训练参数, 是用于任务适配的可训练参数, 是用于任务适配的可训练参数,r ≪ min(m, n)$ 是降低后的秩。LoRA 的主要优点是可以大大节省内存和存储使用(例如 VRAM)。此外,人们可以只保留一个大型模型副本,同时保留多个用于适配不同下游任务的特定低秩分解矩阵。此外,还有几项研究讨论了如何以更有原则的方法设置秩,例如基于重要性分数的分配 和无需搜索的最优秩选择。

标签:tuning,适配,模型,微调,任务,LLM,前缀
From: https://blog.csdn.net/weixin_43457608/article/details/142911518

相关文章

  • 大模型驱动企业革新:论大模型赋能企业,大模型的潜力超乎你的想象
    如今,大模型的种类繁多,涵盖面广,但如何把它们应用到企业自身的业务当中,提升企业的技术水平和市场竞争力,却需要考虑到一个非常关键的问题:如何将大模型落地?这需要我们深入探讨大模型的投入成本和收益是否值得,并寻找有效的应用领域。如果我们没有思考清楚这些问题,企业要么盲目跟......
  • 什么是大模型?(超详细)大模型从入门到精通,看这一篇就够了!
    大模型的定义大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。大模......
  • 【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置
    豆包(Doubao)是字节跳动研发的大规模预训练语言模型。目录1安装2配置访问凭证3客户端初始化4设置地域和访问域名5设置超时/重试次数1安装通过pip安装PYTHONSDK。pipinstall'volcengine-python-sdk[ark]'2配置访问凭证获取APIKey访问凭证具体步骤......
  • 大模型与生成式AI结合:HelpLook引领零售增长新篇章
    近年来,零售行业在数字化、技术革新、经济波动及消费者需求多变的挑战下,展现出强大的适应性和创新力。AI技术的深度融合,正引领零售、电商、教育等领域,尤其是零售业步入一个生产力飞跃、客户至上的全新时代。企业亟需挖掘客户与产品数据的潜力,利用统一的知识管理平台与差异化战......
  • 分布式事务之Seata的AT模型
    在Seata的事务管理中有三个重要的角色:TC(TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。TM(TransactionManager)-事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。RM(ResourceManager)-资源管理器:管理分......
  • Seata的AT模型
    什么是seataSeata(SimpleExtensibleAutonomousTransactionArchitecture)是一个开源的分布式事务解决方案,它主要用于解决微服务架构下分布式事务问题。Seata提供了多种分布式事务解决方案,适用于不同场景,以下是其几种主要的解决方案:1.AT模式(AutomaticTransaction)特点:AT模......
  • openvino 大模型qwen2.5推理案例
    参看:https://github.com/openvinotoolkit/openvino.genai/releases/tag/2024.4.0.0https://github.com/TommyZihao/openvino_tonypi/blob/main/OpenVINO-0911/AIPC%E4%BB%A3%E7%A0%81/%E3%80%90B1%E3%80%91%E4%B8%89%E8%A1%8C%E4%BB%A3%E7%A0%81%E5%BC%80%E5%90%AF%E5%A4%......
  • 在K8S中,CNI模型有哪些?
    在Kubernetes(K8S)中,CNI(ContainerNetworkInterface,容器网络接口)模型是一个标准化的接口规范,用于在容器创建时配置和管理其网络连接。以下是关于K8S中CNI模型的详细介绍:1.CNI模型概述CNI是由CloudNativeComputingFoundation(CNCF)维护的一个标准,它定义了一组简单、统一的接口,允......
  • 在K8S中,网络模型有哪些?
    在Kubernetes(K8S)中,网络模型的设计是为了满足容器化应用之间的通信需求。K8S网络模型主要涵盖以下几种:1.基础网络模型Pod内容器间的通信:Pod内的各个容器共享同一网络名称空间,该名称空间由构建Pod对象的基础架构容器所提供。同一个Pod内的容器,通过lo接口(即本地回环接口)完成交......
  • 简述Seata的AT模型
    AT模式是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。1.Seata的AT模型阶段一RM的工作:●注册分支事务●记录undo-log(数据快照)●执行业务sql并提交●报告事务状态阶段二提交时RM的工作:●删除undo-log即可阶段二回滚时RM的工作:●根据undo-log......