全面了解 LLM 微调——根据应用场景独特需求定制大型语言模型

1.概述

截至2023年,大型语言模型(LLM)的发展确实在不断进步,涌现出了多种新的模型,如ChatGLM、Alpaca、Falcon以及Llama 2,还有GPT-4等。这些模型在自然语言处理领域展现出了强大的潜力,它们能够执行各种复杂的语言任务,如文本生成、翻译、摘要、问答等。
微调(Fine-tuning)是利用这些大型语言模型潜力的一个重要方面。微调是指在预训练模型的基础上,针对特定的任务或数据集进行进一步的训练,以提高模型在该任务上的表现。这个过程通常涉及较小的数据集和较短的训练时间,目的是让模型学习到特定任务的特征和规律。

在探讨大型语言模型(LLM)的微调途径时,应当认识到并非所有途径都是等同的。以GPT-4为例,其微调功能是付费的,用户需要订阅其服务才能使用。这种付费模式为模型提供了专业的支持和可能更高级的功能,但同时也设置了一定的门槛。
相对而言,开源社区则提供了多样化的替代方案,这些方案不仅易于获取,而且通常免费,极大地降低了使用大型语言模型的门槛。这种开放性为更广泛的群体提供了接触和利用这些强大工具的机会,从而推动了人工智能技术的普及和民主化。
拥抱脸 - 打开 LLM 排行榜

2. 为什么LLM微调很重要

微调大型语言模型(LLM)是提升其应用潜力的重要手段。这一过程不仅仅是技术上的增强,更是模型开发中的关键一环,它使得模型能够更加精准地适应各种具体任务和数据集。通过微调,我们不仅增强了模型在特定任务上的表现,还确保了应用程序的高效性和针对性,充分展现了LLM在适应新数据方面的卓越能力。

微调的灵活性对于满足人工智能应用领域日益增长的需求至关重要。它为模型提供了在情感分析、医学文献综述等多样化任务中展现卓越性能的机会。通过将基础模型适配到特定的用例,我们不仅解锁了新的可能性,还显著提升了模型的效率和准确性。此外,微调在资源利用上也更为经济,相较于从零开始训练模型,它所需的计算能力要少得多。

在这里的深入探讨中,我们将细致分析LLM微调的复杂性,并提供一个基于该领域最新进展和最佳实践的全面概述。这将帮助需要微调模型的人员更好地理解微调的过程、挑战以及如何有效地实施它。

3.基于指令的微调

微调阶段 生成式人工智能如下图所示,生命周期的特点是指令输入和输出的集成,以及逐步推理的示例。 这种方法有助于模型生成不仅相关而且与输入到其中的特定指令精确对齐的响应。 正是在这个阶段,预先训练的模型适应不同的任务和用例,利用个性化数据集来增强其功能。
生成式 AI 生命周期 - 微调、快速工程和 RLHF

单任务微调
单任务微调侧重于磨练模型在特定任务(例如摘要)中的专业知识。 这种方法对于优化涉及大量文档或对话线程(包括法律文档和客户支持票证)的工作流程特别有益。 值得注意的是,这种微调可以通过相对较小的一组示例(范围从 500 到 1000 个)实现显着的性能增强,这与预训练阶段使用的数十亿个令牌形成鲜明对比。
单任务微调示例图

4.Transformer 架构及其他

深入理解大型语言模型(LLM)的微调过程,首先需要把握其基础构件。其中,Transformer architecture扮演着核心角色。这种神经网络通过自注意力机制,优先考虑单词在语境中的相关性,而非其在句子中的线性位置。这一创新的方法极大地增强了模型对输入序列中远距离依赖关系的捕捉能力。

Transformer模型的架构复杂而精妙,它的工作流程始于编码器阶段。在此阶段,模型首先将输入文本分解为一系列标记,并为这些标记创建嵌入向量,这些向量不仅编码了文本的含义,还包含了每个单词在句子中的位置信息。随后,模型通过一系列矩阵运算来生成查询(queries)、值(values)和键(keys),这些运算是自注意力机制的核心组成部分。基于这些计算,模型得出自注意力分数,这些分数决定了模型在构建输出时对输入文本各部分的关注程度。

通过这种机制,Transformer模型能够动态地聚焦于对当前预测最为关键的输入部分,无论是相邻信息还是远距离的上下文。这一能力让Transformer架构在处理各种复杂的语言任务时表现出色,成为现代自然语言处理技术的基石。
Transformer架构
微调是LLM发展的关键阶段,这个过程需要进行细微的调整以实现更理想的输出。 这一阶段虽然很重要,但也带来了一系列挑战,包括处理大量参数的计算和存储需求。 参数高效微调(PEFT)提供了减少微调参数数量的技术,从而简化了训练过程。

5. LLM预培训:建立坚实的基础

在LLM开发的初始阶段,预训练占据中心位置,利用超参数化Transformer作为基础架构。 此过程涉及以各种方式对自然语言进行建模,例如在大规模无监督语料库上进行双向、自回归或序列到序列。 这里的目标是创建一个基础,以后可以通过引入特定于任务的目标来针对特定的下游任务进行微调。
预训练、微调
该领域一个值得注意的趋势是预训练LLM规模的不可避免的增加(以参数数量来衡量)。 经验数据一致表明,更大的模型加上更多的数据几乎总是会产生更好的性能。 例如,拥有 3 亿个参数的 GPT-175 在生成高质量自然语言和熟练执行各种零样本任务方面树立了基准。

6. 微调:模型适应之路

在完成了预训练阶段之后,大型语言模型(LLM)通常会进行微调,以便更好地适应特定的任务场景。尽管在像GPT-3这样的预训练LLM中进行的情境学习已经显示出了振奋人心的成效,微调在定制化任务中仍然能够实现性能的显著飞跃。然而,全参数微调方法面临着一系列挑战,尤其是在计算资源和内存需求方面,这些挑战在操作大规模模型时尤为突出。

对于参数量达到数十亿的模型,GPU的内存管理变得尤为关键。每个32位精度的模型参数需占用4字节的存储空间,因此,一个4亿参数的模型便需要1GB的GPU RAM。而在实际的训练过程中,为了存储优化器状态、梯度等附加信息,所需的内存量会进一步增加,对于大规模模型而言,这可能意味着需要高达80GB的GPU RAM。

为了解决GPU内存的限制,我们采用了量化技术,该技术通过降低模型参数的精度,有效减少了内存的占用。举例来说,将参数精度从32位降至16位,就可以使模型加载和训练所需的内存量减少一半。在本文的后续章节中,我们将深入探讨Qlora,这是一个采用量化技术进行微调的先进概念。

LLM GPU 内存要求。 参数数量和精度
参数有效的微调方法
在完全微调大型语言模型的过程中,重要的是要有一个计算设置,不仅可以有效地处理大量模型权重(对于最先进的模型来说,模型权重现在已达到数百 GB 的大小),而且还可以管理一系列其他关键要素。 其中包括优化器状态的内存分配、管理梯度、前向激活以及在训练过程的各个阶段促进临时内存。

6.1 加法

下面几种方法都是针对大型预训练语言模型(PLMs)的微调技术,它们通过引入额外的参数或层来增强模型对特定任务的性能,同时尽量保持训练时间和资源消耗的效率:

同轴转接器 (Adapters):

  • 这是一种参数高效的微调方法,通过在Transformer模型的特定层之间插入小型的全连接网络(称为转接器)来调整模型。
  • 这些转接器是低秩的,意味着它们只引入了相对较少的额外参数。
  • 值得注意的例子包括:
    • AdaMix: 提出了一种混合多种适配模块的方法,以提高特定任务的性能。
    • KronA: 使用克罗内克积(Kronecker product)代替低秩分解,以提高模型的表达能力。
    • 压实机(可能是指另一种适配器技术的名称,但没有提供具体信息)。

软提示 (Soft Prompts):

  • 这种方法通过微调模型输入嵌入的一部分来实现,而不是更新整个模型的参数。
  • 软提示通常作为输入的一部分,通过梯度下降法进行优化。
  • 突出的例子包括:
    • 国际电信联盟 (ITU): 可能是指某个具体的软提示微调技术,但未提供详细信息。
    • 前缀调整 (Prefix-Tuning): 一种优化连续提示的方法,通过在输入前添加一个连续的任务特定向量(前缀)来调整模型。

其他添加剂方法:

  • 除了上述两种方法,还有其他一些技术也可以通过添加额外的参数来增强模型性能。
  • 包括:
    • LeTS (Learning with Less Supervision): 一种减少标注数据需求的学习技术。
    • AttentionFusion: 可能是一种结合注意力机制的融合技术,但未提供详细信息。
    • Ladder-Side Tuning: 可能是一种分层或梯度的微调方法,但未提供详细信息。

这些方法的目标是在不显著增加计算成本和存储需求的情况下,提高模型对特定任务的适应性和性能。每种方法都有其特点和适用场景,研究者可以根据具体任务的需求和资源限制来选择最合适的微调策略。

6.2 选择性法

在大型预训练语言模型(PLMs)的微调过程中,选择性参数高效微调(PEFT)是一种策略,它只针对模型的一小部分顶层或特定组件进行调整,以提高对特定下游任务的适应性。这种方法旨在减少所需的计算资源和存储需求,同时保持或提高模型性能:

BitFit:

  • BitFit是一种稀疏微调方法,它只修改模型的偏置项(或其子集)。研究表明,即使是在小到中等规模的训练数据上,对预训练的BERT模型应用BitFit也可以与全模型微调相媲美,有时甚至更好。对于更大的数据集,该方法也与其他稀疏微调方法具有竞争力。BitFit的实用性在于它在部署多任务微调模型时能够节省内存,并且有助于实现大部分参数固定的可训练硬件实现。此外,BitFit的研究还为理解偏差项在预训练网络中的作用以及微调过程中的动态变化提供了新的研究方向。

LN调整:

  • LN(Layer Normalization)调整是另一种参数高效微调技术,它关注于调整Transformer架构中LayerNorm模块的增益和偏置项。尽管LayerNorm是Transformer的重要组成部分,但其在参数高效微调中的潜力之前并没有得到充分利用。LN调整通过只调整LayerNorm的增益和偏置项,以极少的可训练参数(不到0.1%)实现了与基线方法相比更好的性能。进一步的研究还发现,将LN调整与前序技术(如前缀调整)结合使用的统一框架能够实现最先进的性能。

这两种方法都体现了在对大型模型进行微调时,可以采取更加精细和选择性的方法来优化模型性能,同时减少资源消耗。通过这种方式,可以更有效地利用预训练模型的能力,为特定的下游任务提供定制化的解决方案。

6.3 基于重参数化的方法

这些方法利用低秩表示来减少可训练参数的数量,其中最著名的是低秩适应或 LoRA。 该方法利用简单的低秩矩阵分解来参数化权重更新,证明了低秩子空间中的有效微调。

LoRA(低阶适应)

LoRA 作为一种突破性的 PEFT 技术出现,在一篇论文中介绍 Edward J. Hu 等人于 2021 年。 它在重新参数化类别中运行,冻结 LLM 的原始权重,并将新的可训练低秩矩阵集成到 Transformer 架构的每一层中。 这种方法不仅减少了可训练参数的数量,而且还减少了所需的训练时间和计算资源,从而为完全微调提供了更有效的替代方案。

要理解 LoRA 的机制,必须重新审视Transformer架构,其中输入提示经过标记化并转换为嵌入向量。 这些向量穿过Transformer的编码器和/或解码器段,遇到权重经过预训练的自注意力和前馈网络。

LoRA 使用的概念 奇异值分解(SVD)。 本质上,SVD 将矩阵分解为三个不同的矩阵,其中之一是包含奇异值的对角矩阵。 这些奇异值至关重要,因为它们衡量矩阵中不同维度的重要性,较大的值表示较高的重要性,较小的值表示较低的重要性。
m × n 矩形矩阵的奇异值分解 (SVD)
这种方法允许 LoRA 在降低维度的同时保持数据的基本特征,从而优化微调过程。

LoRA 介入这个过程,冻结所有原始模型参数,并在原始权重旁边引入一对“秩分解矩阵”。 这些较小的矩阵(表示为 A 和 B)通过监督学习进行训练。

该策略中的关键元素是称为秩(“r”)的参数,它决定了低秩矩阵的大小。 即使值较小,精心选择“r”也可以产生令人印象深刻的结果,从而创建一个具有较少训练参数的低秩矩阵。 该策略已使用 HuggingFace Transformers 等开源库得到有效实施,促进 LoRA 以显着的效率对各种任务进行微调。

QLoRA:提高LoRA效率

QLoRA 以 LoRA 奠定的基础为基础,进一步最大限度地减少了内存需求。 介绍者 Tim Dettmers 等人于 2023 年,它将低秩自适应与量化相结合,采用称为 普通浮动 or nf4。 量化本质上是一种将数据从较高信息表示转换为信息较少表示的过程。 这种方法保持了 16 位微调方法的功效,在计算过程中根据需要将 4 位权重反量化为 16 位。
比较微调方法:QLORA 通过 4 位精度量化和用于内存峰值管理的分页优化器增强了 LoRA比较微调方法:QLORA 通过 4 位精度量化和用于内存峰值管理的分页优化器增强了 LoRA

QLoRA 利用 NumericFloat4 (nf4),针对Transformer架构中的每一层,并引入双量化的概念,以进一步缩小微调所需的内存占用量。 这是通过对已经量化的常量执行量化来实现的,该策略通过利用分页优化器和统一内存管理来避免典型的梯度检查点内存峰值。

Guanaco是一个经过 QLORA 调整的整体,为开源聊天机器人解决方案树立了基准。 其性能通过系统的人工和自动评估得到验证,凸显了其在该领域的主导地位和效率。

65B 和 33B 版本的Guanaco,利用改进版本进行了微调 OAST1 数据集,成为著名模型的强大竞争者,例如 ChatGPT 甚至 GPT-4。

7. 使用人类反馈的强化学习进行微调

当微调预先训练的语言模型以更接近人类价值观时,人类反馈强化学习 (RLHF) 就会发挥作用。 这一概念由 Open AI 于 2017 年提出,为增强文档摘要和开发 指导GPT.

RLHF 的核心是强化学习范式,这是一种机器学习技术,其中 代理人 学习如何在一个 环境 通过表演 行动 和接收 奖励。 这是一个连续的循环 行动反馈,其中代理被激励做出将产生最高奖励的选择。

将其转化为语言模型领域, 代理人模型 本身,在 环境 给定的上下文窗口并根据该窗口做出决策 ,它由上下文窗口中的当前标记定义。 这 ”动作空间”包含模型可以选择的所有潜在代币,目标是选择最符合人类偏好的代币。

RLHF 流程广泛利用人类反馈,利用它来训练奖励模型。 该模型在微调过程中指导预训练模型发挥着至关重要的作用,鼓励其生成更符合人类价值观的输出。 这是一个动态的迭代过程,模型通过一系列“推出”进行学习,“推出”是一个术语,用于描述在语言生成的背景下导致奖励的状态和动作的序列。
该图说明了我们方法的三个步骤:(1)监督微调(SFT),(2)奖励模型(RM)训练,以及(3)在此奖励模型上通过近端策略优化(PPO)进行强化学习。

RLHF 的显着潜力之一是它能够促进人工智能助手的个性化,对其进行定制以与个人用户的偏好产生共鸣,无论是他们的幽默感还是日常生活。 它为创建人工智能系统开辟了道路,这些系统不仅技术精湛,而且具有情感智能,能够理解和响应人类交流中的细微差别。

然而,值得注意的是,RLHF 并不是一个万无一失的解决方案。 这些模型仍然容易产生不需要的输出,这反映了它们所训练的大量且往往不受监管且有偏见的数据。

8.结论

微调,作为解锁Alpaca、Falcon和GPT-4等大型语言模型(LLM)全部潜力的关键环节,已经演化为一种更为精细和目标化的过程,为形形色色的任务量身定制解决方案。

我们目睹了为特定角色量身定制的单任务微调,以及如LoRA和QLoRA这样的参数高效微调(PEFT)方法的发展。这些方法通过优化模型的特定部分,旨在实现训练过程的高效和成本效益,推动了高级AI功能的普及和应用。

OpenAI提出的基于人类反馈的强化学习(RLHF)技术,标志着向创建更符合人类价值观和偏好的AI系统迈出的重要一步。RLHF为开发出不仅智能而且对用户需求高度敏感的AI助手提供了可能,这些助手能够提供更加个性化和贴心的服务。

随着各行各业的组织和个人希望将这些经过精心微调的LLM整合到他们的运营中,他们实际上是在拥抱一个AI不仅是工具,而是能够理解并适应人类环境的合作伙伴的未来。这些AI合作伙伴通过提供创新和定制化的解决方案,正成为推动创新和个性化服务的关键动力。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【全开源】国际版JAVA游戏陪玩系统源码陪练APP源码H5源码电竞系统源码支持Android+IOS+H5

国际版游戏陪玩系统:连接全球玩家的桥梁 在数字化时代,游戏已成为全球范围内跨越文化和地域的桥梁。随着游戏产业的蓬勃发展,玩家们对于游戏体验的需求也日益多样化。为了满足这一市场需求,我们隆重推出“国际版游戏陪玩系统”&a…

视频监控技术助力智慧校园建设:系统设计与实施策略

一、引言 随着信息技术的迅猛发展,智慧校园作为教育信息化建设的重要组成部分,对于提升校园安全、教学效率和管理水平具有重要意义。本文旨在介绍智慧校园视频管理系统的架构设计,为构建高效、智能的校园视频监控系统提供参考。 二、系统整…

基于若依的ruoyi-vue3.8.7的flowable支持指定接收人的流程审批后端部分

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

Java面试八股之WeakHashMap的工作原理

简述WeakHashMap的工作原理 弱键(Weak Keys): WeakHashMap 的键(keys)是通过 WeakReference 弱引用进行封装的。弱引用是一种特殊的引用类型,它不会阻止所引用的对象被垃圾收集器回收。这意味着&#xff…

【计算机毕业设计】基于SSM+Vue的健身房管理系统【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

spring-boot-starter-mail 定义邮件工具类EmailHelper

注意 想把这个工具类定义成工具类,所以所有的方法都是静态方法,使用的变量处理参数理所当然都是静态变量期初使用的是Autowired 和 Value进行注解,但是这两个注解是依赖于实例,静态方法是不依赖实例的,所以 from 在发送…

如何在Spring启动的时候执行一些操作

如何在Spring启动的时候执行一些操作 在Spring启动的时候执行一些操作有多种方式。你可以通过实现ApplicationRunner或者CommandLineRunner接口,在Spring Boot应用程序启动后执行特定操作。另外,你也可以使用PostConstruct注解,在Spring Bea…

Dubbo配置上的一些概念

对于dubbo在spring中我们可能看到有如下配置(可参考Schema 配置参考手册 | Apache Dubbo): dubbo:application:id: dubbo-account-examplename: dubbo-account-example# 是否启用 Dubbo 的 QoS(Quality of Service)服…

【Fastadmin】自定义404页面

1.修改config.php // 文件路径:application/config.php// 自定义错误码模板http_exception_template > [// 定义404错误的模板渲染404 > APP_PATH . common/view/404/404.html,], 2.需要把debug关闭才能生效 在.env文件中把debug true,改为…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面,然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了,那么怎么能自定义404页面呢? 很简单,在我们的springboot的静态资源目录下创建一个error包,然…

UL认证储能电表工商业储能智能计量电表ADL3000-E-B/KC

◉概述 ADL3000-E-B 导轨式多功能电能表,是主要针对电力系统,工矿企业,公用设施的电能统计、管理需求而设计的一款智能仪表,产品具有精度高、体积小、安装方便等优点。集成常见电力参数测量及电能计量及考核管理,提供…

LangChain搭建Agent | 使用initialize_agent

1.create_tool_calling_agent 构建agent,这个方法是过时了吗?官方文档也没更新,官方示例也运行错误 from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import ConfigurableField from langchain_core…