全面了解 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.mfbz.cn/a/619227.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3使用高德地图

一、获取高德地图key和秘钥 1、注册高德开放平台账号 #高德地图开放平台地址 https://lbs.amap.com/2、创建应用和key(选择web端) 二、安装vuemap/vue-amap库 库地址:https://vue-amap.guyixi.cn/zh-cn/introduction/install.html // 安装核心库 npm install vu…

Mybatis操作数据库的两种方式:Mapper代理模式

1.Mapper代理模式的特点 程序员没有写接口的子实现——直接获取数据库的数据 因为Mybatis定义了一套规则,对方法进行了实现,程序员只要遵循这套方法就可以直接使用 2.如何实现Mapper代理模式 步骤: 1.创建一个dao接口,在接口…

KAN神经网络简短介绍

KANs简介 Kolmogorov-Arnold Networks (KANs) 是一种创新的神经网络模型,它挑战了传统多层感知器(MLPs)的设计,通过将激活函数从节点转移到边上来提升模型的性能和可解释性。KAN的核心在于,其所有权重参数均被单变量的样条函数代替&#xff…

设计模式 六大原则之里氏替换原则

文章目录 概念替换逻辑行为不变 拆解小结 概念 子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。 替换 替换的前提是面向对象语言所支持的多态特性,同一个行为具有多个不同表现形式或形态的能力。 逻…

Web3加密空投入门:空投类型有哪些?如何避免限制?

今天分享空投如何避免限制以提高效率,增加成功几率,首先我们来了解什么是空投加密,有哪些空投类型。 一、什么是空投加密? 加密货币空投是一种营销策略,包括向用户的钱包地址发送免费的硬币或代币。 加密货币项目使用…

哈希表Hash table

哈希表是根据关键码的值而直接进行访问的数据结构。 数组就是⼀张哈希表。 哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示: 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断⼀个元素是…

人脸消费给传统食堂带来的变化

消费的技术基础是脸部识别,脸部识别是基于人的容貌特征信息进行认证的生物特征识别技术,其突出的特征是以非接触方式进行识别,避免个人信息的泄露。 面部识别和指纹识别、掌纹识别、视网膜识别、骨骼识别、心率识别等都是人体生物特征识别技术…

STC8增强型单片机开发——串口调试UART

一、什么是串口 串口是一种在数据通讯中广泛使用的通讯接口,通常我们叫做UART (通用异步收发传输器Universal Asynchronous Receiver/Transmitter),其具有数据传输速度稳定、可靠性高、适用范围广等优点。在嵌入式系统中,串口常用于与外部设备…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git,本质上还是使用本地安装的Git软件,所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

Java | Leetcode Java题解之第85题最大矩形

题目&#xff1a; 题解&#xff1a; class Solution {public int maximalRectangle(char[][] matrix) {int m matrix.length;if (m 0) {return 0;}int n matrix[0].length;int[][] left new int[m][n];for (int i 0; i < m; i) {for (int j 0; j < n; j) {if (mat…

Unity Material(材质)、Texture(纹理)、Shader(着色器)简介

文章目录 一、概念二、Rendering Mode三、Main Maps三、参考文章 一、概念 Material(材质)&#xff1a;物体的“色彩”、“纹理”、“光滑度”、“透明度”、“反射率”、“折射率”、“发光度”等&#xff0c;材质的本质是shader的实例(载体)Texture(贴图)&#xff1a;附件到…

【kali工具使用】Tcpdump 抓包查看三次握手过程

Tcpdump 抓包查看三次握手过程 tcpdump 常用参数&#xff1a; -c 指定要抓取的数据包数量 -n 对 IP 地址以数字方式显式&#xff0c;否则显式为主机名 port 指定端口 -I 指定 tcpdump 需要监听的接口。默认会抓取第一个网络接口 tcp 1ClientSYN1seqx 2Server SYN1 seq…

从 Oracle 到 TiDB,国有大行打造本地生活 APP 新体验

导读 本文介绍了某国有大行推出的本地生活服务类 APP 在数字时代的创新应用实践。该 APP 利用金融科技和互联网平台模式&#xff0c;打造“金融非金融”的线上生态服务平台&#xff0c;满足了用户多样化的生活需求。为应对用户增长和数据量增加带来的挑战&#xff0c;该 APP 决…

地表净辐射通量数据、太阳辐射量数据、降雨量数据、气温数据、日照时长、水汽压分布、风速风向数据、地表温度

引言 地表净辐射作为驱动大气运动的主要能量&#xff0c;它是气候变化乃至全球变化的重要驱动力。由地表净辐射可反演比辐射率、地表温度、地表反照率等地表特征参数&#xff0c;是提高天气预报质量和大气环流模式研究的一个重要参数。多种卫星遥感数据反演地表净辐射通量信息产…

发表在期刊PRB和JAP上文章的说明及引用

文章目录 前言一、磁畴壁波导的能带调控研究&#xff08;in PRB&#xff09;文章简介&#xff1a;关键词&#xff1a;文章引用&#xff1a; 二、具有固定旋转轨道的自旋转矩纳米振荡器&#xff08;in JAP&#xff09;文章简介&#xff1a;关键词&#xff1a;文章引用&#xff1…

LeetCode-460. LFU 缓存【设计 哈希表 链表 双向链表】

LeetCode-460. LFU 缓存【设计 哈希表 链表 双向链表】 题目描述&#xff1a;解题思路一&#xff1a;一张图秒懂 LFU&#xff01;解题思路二&#xff1a;精简版&#xff01;两个哈希表&#xff0c;一个记录所有节点&#xff0c;一个记录次数链表【defaultdict(new_list)&#x…

kafka安装配置及集成springboot

1. 安装 单机安装kafka Kafka对于zookeeper是强依赖&#xff0c;保存kafka相关的节点数据&#xff0c;所以安装Kafka之前必须先安装zookeeper dockerhub网址: https://hub.docker.com Docker安装zookeeper 下载镜像&#xff1a; docker pull zookeeper:3.4.14创建容器 doc…

SeetaFace6人脸活体检测C++代码实现Demo

SeetaFace6包含人脸识别的基本能力&#xff1a;人脸检测、关键点定位、人脸识别&#xff0c;同时增加了活体检测、质量评估、年龄性别估计&#xff0c;并且顺应实际应用需求&#xff0c;开放口罩检测以及口罩佩戴场景下的人脸识别模型。 官网地址&#xff1a;https://github.co…

【CSP CCF记录】数组推导

题目 过程 思路 每次输入一个Bi即可确定一个Ai值&#xff0c;用temp记录1~B[i-1]&#xff0c;的最大值分为两种情况&#xff1a; 当temp不等于Bi时&#xff0c;则说明Bi值之前未出现过&#xff0c;Ai必须等于Bi才能满足Bi是Ai前缀最大的定义。当temp等于Bi时&#xff0c;则说…

后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解

JDBC 简化JDBC的开发 JDBC仅仅是一套接口 是一套规范 Mybatis是持久层框架 用于简化JDBC的开发 使用Java语言操作关系型数据库的一套API 原始的JDBC程序 package com.bigdate.mybatis;import com.bigdate.mybatis.mapper.UserMapper; import com.bigdate.mybatis.pojo.Use…