NLP深入学习:《A Survey of Large Language Models》详细学习(四)


1. 前言

最近正在读 LLM 论文的综述,当前采取的策略是部分内容走读+记录,论文原文见《A Survey of Large Language Models》

前情提要:
《NLP深入学习:《A Survey of Large Language Models》详细学习(一)》
《NLP深入学习:《A Survey of Large Language Models》详细学习(二)》
《NLP深入学习:《A Survey of Large Language Models》详细学习(三)》

第一章介绍了论文的摘要、引言以、总述部分
第二章讲解了 LLMs 相关资源,包含公开模型、API、预训练的数据集以及微调的数据集,
第三章介绍预训练部分,这是 LLMs 的重要部分!

本文继续介绍 LLMs 的适应性训练

2. 适应性训练

在本节将介绍两种主要的适应预训练的 LLMs 的方法,即指令调优和对齐调优。前一种方法主要旨在增强 LLMs 能力,而后一种方法的目的是将 LLMs 的行为与人类的价值观或偏好保持一致。

2.1 指令调优

是一种训练大型语言模型以更好地理解和遵循自然语言指令的技术。在这一过程中,预训练的 LLMs 被进一步优化,使其能够根据给定的文本指令执行相应的任务,而无需对整个模型进行大规模微调。

2.1.1 格式化实例构造

实例格式的说明和构造指令格式实例的三种不同方法:
在这里插入图片描述

通常,指令格式的实例由任务描述(称为指令)、可选的输入、相应的输出和少量的演示(可选)组成。构建的几个方式:

  1. Formatting NLP Task Datasets(格式化 NLP 任务数据集)
    在为预训练语言模型创建格式化的实例时,首先需要将标准 NLP 任务的数据集转换成遵循特定格式的实例。例如,对于文本分类任务,研究人员可能将原始数据集中的每个样本(如新闻文章)与对应的类别标签一起包装在一个包含指令和输入输出示例的语境中。这种格式化的实例使模型能够根据给定的指令来理解其应执行的任务。

  2. Formatting Daily Chat Data(格式化日常对话数据)
    为了提高模型在日常对话场景下的表现,还需要将日常聊天数据格式化。这通常涉及到整理实际对话记录,将其转化为以自然语言指令开头的互动式样例,然后附上预期的回应或行为。这样模型在学习过程中就能通过模仿真实对话情境,学会在各种社交环境下提供恰当、连贯且有意义的回复。

  3. Formatting Synthetic Data(格式化合成数据)
    制作合成数据是另一种增强模型适应性的方法。通过对现有数据集进行扩展或创造全新的模拟数据,可以构造出更多样化和可控的指令-响应对。格式化的合成数据可以帮助模型处理边缘案例、强化基础概念理解,并填补真实数据集中可能存在的空白。

构建有效格式化实例时需考虑的关键因素包括:

  1. Scaling the instructions(指令规模的调整)

    • 指令设计应具有足够的广度和深度,覆盖不同难度级别和复杂度的任务。这意味着需要提供一系列简明到复杂的指令,以便模型能够逐步学习并适应更广泛的 NLP 任务。
    • 针对大型语言模型,指令的数量和多样性至关重要,确保模型在面对各种场景时都能理解和遵循指令。
  2. Formatting design(格式化设计)

    • 格式化的实例应当清晰地分离出指令部分、输入数据部分以及期望输出结果部分,使模型能够在训练过程中明确理解各个组成部分的功能。
    • 指令的设计应该简洁且易于理解,避免歧义,同时确保模型能够基于指令正确执行任务。
    • 对于不同类型的数据集(如 NLP 任务数据集、日常对话数据、合成数据等),要采用适合该领域特点的特定格式,例如,在文本分类任务中,指令可能包含“请为以下新闻文章分类”,而在聊天机器人应用中,指令可能更加自然,如同日常生活中的对话形式。

2.1.2 指令调优策略

与训练前不同,指令调优通常更有效,因为只有中等数量的实例用于训练。因为指令调优可以被认为是一个监督训练,有四个重要的方面需要考虑:

  1. Balancing the Data Distribution(平衡数据分布)
    在进行指令调优时,数据分布的平衡是一个关键因素。由于涉及多个不同任务的数据混合训练,研究人员需要确保各类任务在训练过程中有适当的比例和权重。通常采用的方法是按各任务实例数量的比例进行均匀混合(例如使用例子比例混合策略),同时也可以根据任务的质量或重要性对特定高质量数据集(如 FLAN 和 P3)增加采样率,以优化整体性能。

  2. Combining Instruction Tuning and Pre-Training(结合指令调优和预训练)
    为了更有效地利用预训练阶段学习到的知识并提高指令调优过程的稳定性和效率,一些研究提出了结合预训练数据与指令格式化数据进行训练的方法。比如 OPT-IML 等研究通过将部分预训练数据纳入指令调优过程中作为正则化手段,而 GLM-130B 和 Galactica 则直接将少量指令格式化的数据整合到预训练语料库中,旨在实现预训练和指令调优优势的同时利用。

  3. Multi-stage Instruction Tuning(多阶段指令调优)
    多阶段指令调优策略针对不同类型的任务指令进行了分步优化。对于大量任务格式化指令和日常聊天类指令,它们的数量差异显著。实践中,首先会用大规模任务格式化指令对 LLMs 进行微调,然后在第二阶段使用日常聊天类指令进一步微调模型。为防止过拟合于某单一类型任务而导致的能力遗忘问题,还会在第二阶段继续加入一定比例的任务格式化指令。这种分阶段策略有助于逐步提升模型理解和执行复杂指令的能力。

  4. Other Practical Tricks(其他实用技巧)

    • 对于多轮对话数据的训练,Vicuna 项目采用了一种高效方法,即一次性输入整个对话上下文,但仅计算针对聊天机器人响应部分的损失,从而节省了训练成本。
    • 在实际应用中,为使大型语言模型更好地服务于具体应用场景,可以为模型建立身份标识,并通过相关指令对其进行身份认知训练,使其了解自身名称、开发者及所属组织信息等。
    • 还有一些其他实用技巧,如通过拼接多个示例以接近最大长度限制,以及设计各种有效的数据调度策略(如难度和复杂度递增的学习计划)来逐步提升 LLMs 遵循复杂指令的能力。

2.1.3 指令调整的效果

指令调优对大型语言模型的影响体现在以下几个方面:

  1. Performance Improvement(提升性能)
    指令调优通过在预训练模型上进一步训练,使其能够理解和遵循自然语言形式的指令,从而显著提升了模型在各类任务上的性能。

  2. Task Generalization(任务泛化)
    指令调优增强了模型的任务泛化能力,即使在未见过的任务上,经过调优的模型也能根据给出的指令执行新任务。

  3. Domain Specialization(领域专家)
    除了提高一般性任务表现,指令调优还被用于将通用语言模型调整为特定领域的专家模型。

2.2 对齐调优

2.2.1 相关背景及对齐标准

尽管 LLMs 在各种自然语言处理任务上表现出色,但它们也可能出现生成不准确、误导性内容或违反人类价值观的情况。以下是相关背景及对齐标准的具体介绍:

  1. 背景
    大型预训练语言模型基于大规模文本数据进行训练,其目标函数通常是最大化预测下一个单词的概率,这使得模型学习到了广泛的语言模式和知识。然而,在实际应用中,模型可能无法完全符合人类的价值观和社会规范,有时会生成潜在有害、有偏见或者违背用户意图的内容。

  2. Alignment Criteria(对齐标准)

    • Helpfulness:为了使 LLM 具有帮助性,它应当尽可能简洁且有效地解答用户问题,并在需要时通过恰当询问获取更多信息来协助解决问题。然而,要实现这一标准颇具挑战性,因为准确理解和衡量用户的意图并不容易。
    • Honesty:诚实是对齐的重要维度之一,要求 LLM 提供准确信息而非编造内容,并在输出结果中传达合适的不确定性和自信程度。模型应明确知道自己的知识边界(例如“不知道未知的事物”),避免给出虚假或误导性的答案。
    • Harmlessness:无害性意味着 LLM 生成的内容不应带有攻击性、歧视性或引诱执行危险行为的信息。模型应在保护用户隐私和安全的前提下,尽力识别并避免潜在有害的输出。

2.2.2 收集人类反馈

在收集人类反馈方面,文章讨论了两个关键环节:Human Labeler Selection(人工标注员的选择)和Human Feedback Collection(人类反馈的收集)。

Human Labeler Selection(人工标注员的选择)

  • 在为大型语言模型(LLMs)生成高质量的人类反馈数据时,选择合适的标注员至关重要。为了提供有效的评价和指导,标注员应具备一定的教育背景和出色的英语能力。例如,在某些研究中,如 Sparrow 项目,要求标注员是英国本土的母语为英语者,并且至少拥有大学本科学历。
  • 为了确保标注质量的一致性和准确性,InstructGPT 等项目采用了筛选过程,研究人员首先对少量数据进行标注,并测量自己与候选标注员之间的意见一致性。最终选取与研究团队意见最一致的标注员来进行后续的大规模标注工作。

Human Feedback Collection(人类反馈的收集)
收集人类对于大型语言模型(LLMs)生成结果的评价和反馈数据,以便于指导模型优化其输出质量、提高与人类偏好和价值观的对齐程度。以下是三种主要的人类反馈收集方法:

  • Ranking-based approach(基于排序的方法)
    在早期研究中,通过让人类标注员对模型产生的多个候选输出进行排序或选择最佳答案的方式收集反馈。然而这种方法可能忽视了细粒度的对齐标准,并且不同的标注员可能对最优候选存在分歧。为解决这些问题,后来的研究引入了 Elo 评分系统或其他排序算法,以量化并比较不同候选输出之间的相对优劣,从而生成更精确的排名信号作为训练 LLMs 的依据。
  • Question-based approach(基于问题的方法)
    进一步细化反馈方式,研究人员设计了基于问题的回答形式来获取人类反馈。例如,在 WebGPT 项目中,要求人类标注员回答关于模型检索文档是否相关以及如何改进模型回应的具体问题。这样不仅能够评估模型生成内容的质量,还能提供更具针对性的编辑建议,帮助模型理解何时以及如何使用检索到的信息来更好地回答用户查询。
  • Rule-based approach(基于规则的方法)
    除了排序和问题解答方式外,还采用了基于规则的方法来收集和利用人类反馈。例如,在 Sparrow 等项目中,除了要求标注员选择最合适的模型响应外,还设置了一系列规则来测试模型生成的回复是否满足特定的对齐准则,如是否有用、正确和无害。此外,一些工作还探索了使用零样本分类器作为奖励模型(rule-based reward models),根据预定义的人类编写规则自动判断模型输出是否违反某些规定,以此提供更为客观的反馈信号。

2.2.3 从人类的反馈中强化学习

Reinforcement Learning from Human Feedback (RLHF) 是一种利用人类反馈优化大型语言模型(LLMs)输出的方法。在这一框架下,模型通过强化学习算法调整其行为策略以更好地符合人类偏好和价值观。

RLHF 系统主要包含三个关键组件:预训练的大型语言模型、基于人类反馈训练的奖励模型(Reward Model),以及用于更新原模型参数的强化学习算法(如Proximal Policy Optimization, PPO)。首先,使用一个预训练好的LM 作为基础模型,然后用人工标注数据训练出一个奖励模型,该模型能够预测人类对模型生成文本的偏好程度。最后,将强化学习算法应用于预训练模型上,使其根据奖励模型给出的反馈信号来改进生成策略,从而产生更加符合人类期望的输出。

RLHF 关键步骤

  • Supervised fine-tuning(监督学习微调): 初始阶段,通过监督学习进行微调,使其理解和遵循一系列指令,并生成与指令相符的高质量输出。
  • Reward model training(奖励模型训练): 从人类标注员那里收集对模型生成结果的偏好数据,比如通过比较不同输出并排名或直接打分,以此为基础训练奖励模型。
  • RL fine-tuning(RL 微调): 使用奖励模型为模型生成的每个输出赋予奖励值,然后应用强化学习算法(如PPO)更新策略网络,使得模型在后续生成时倾向于得到更高奖励值的输出。

RLHF 通用策略
为了更有效地实施 RLHF,研究者提出了一系列实用策略,例如:

  • 使用较小规模但性能良好的奖励模型(如6B 参数量的 GPT-3变体),以减少训练成本和计算资源需求。
  • 对于较长序列的处理,采用如 Lambda-shaped Attention Window 或 Page-wise Attention 等技术优化上下文窗口,提高模型处理长文本时的表现。
  • 迭代地进行 RLHF 训练步骤,多次循环调整模型直至达到理想的对齐效果。

过程监督的 RLHF
在实际操作中可能涉及的过程监督方法是对整个 RLHF 流程进行监督,即不仅关注最终生成文本的质量,也监控模型在整个迭代过程中如何逐渐改变策略以满足人类反馈标准,确保整个优化过程稳定且有效。

2.2.4 不使用 RLHF 的对齐方式

在不使用强化学习从人类反馈(RLHF)的情况下实现模型对齐,研究者采取了其他策略来收集和利用数据以调整大型语言模型的行为,使其更符合人类价值观和社会规范。

数据集
为了直接调整模型的输出以满足人类期望,首先需要收集高质量的对齐数据集。这些数据集通常包含根据人类编写的指导原则生成或筛选出的示例,用于展示期望的模型行为。

  1. Reward model based approaches(基于奖励模型的方法)

    • 利用已有的奖励模型对LLM生成的大量响应进行评分,筛选出高分响应作为对齐数据。例如,RAFT 和 Quark 等项目通过预先训练好的奖励模型评估模型输出,并挑选得分较高的文本片段作为优化目标。
    • 奖励模型通常基于人工标注数据训练而成,能够识别并量化 LLM 输出是否符合人类期望的标准,如有用性、可靠性、无害性等。
  2. LLM based generative approaches(基于 LLM 生成的方法)

    • 利用强大的 LLMs 自身生成对齐数据。例如,Constitutional AI 和 Self-Align 项目提出,让 LLM 根据人类编写的指导原则自动生成包含各种主题和情境的指令-响应对,然后将这些内容用于后续的对齐微调。
    • 另外,也有研究利用预训练的聊天模型初始化奖励模型,以便更好地理解和评价 LLM 的行为,从而生成更符合人类偏好的示例数据。
  3. LLM based interactive approaches(基于 LLM 交互式方法)

    • 通过构建模拟交互环境或者实际应用中的人机交互,收集用户反馈和模型行为数据。例如,Stable Alignment项目创建了一个由多个LLM代理组成的模拟交互环境,在该环境中AI代理之间以及与外界输入进行互动,从而产生丰富的反馈信号和改进后的响应。
    • 在此过程中,AI代理可能会收到附近其他代理给出的评级和修订建议,根据这些反馈不断迭代优化其自身的响应策略,最终生成既符合人类价值观又具有多样性的对齐数据。

监督学习的方式
在收集到对齐数据后,研究者采用监督学习的方式微调大型语言模型。这种方法的核心在于,在原有的预训练模型基础上,进一步在高质对齐数据上进行有监督的微调训练,使得模型能够学习到如何遵循特定指令并产生既定价值观下的恰当输出。Supervised Alignment Tuning是一种直接在大型语言模型(LLMs)上利用高质量的对齐数据进行微调的技术,以确保模型的输出更加符合人类偏好和期望行为。以下是该方法中主要训练目标及辅助优化目标的介绍:

  • 主要训练目标:
    首要的训练目标基于传统的序列到序列学习任务中的交叉熵损失函数。这种情况下,对齐数据集通常包括带有明确指令及其对应理想响应的样例。模型通过微调预训练参数来最大化正确响应的概率,即使模型能够根据给定指令生成与人工标注的理想答案尽可能一致的响应。

  • 辅助性优化目标:
    除了基本的交叉熵损失外,研究者还探索了多种辅助优化目标以进一步提升模型从对齐数据中学习的效果。例如 Ranking loss,为了增强模型对不同响应质量的区分能力,可以采用排序损失。例如,在拥有多个候选响应的情况下,可以通过奖励模型为每个响应打分,然后调整模型使得其更倾向于生成高评分的响应。

2.4 Parameter-Efficient 模型自适应

由于 LLMs 由大量的模型参数组成,全参数调优的代价高昂。在本节中,我们将讨论如何对 LLMS 进行有效的调整。

2.4.1 微调方法

在大型语言模型(LLMs)的参数高效微调方法中,以下四种策略是研究者重点探索并广泛应用的:

  1. Adapter Tuning
    适配器微调技术是在预训练模型原有结构基础上插入可学习的小型模块——适配器层。这些适配器通常包含一层或多层小规模的神经网络,它们不对原始模型参数进行任何更改,而是通过额外添加和训练这些轻量级组件来适应下游任务。这种方法允许模型在保留预训练知识的同时,仅更新少量参数以完成新任务的学习。

  2. Prefix Tuning
    前缀微调则聚焦于输入侧,它不是修改模型本身的权重,而是在每个批次的输入序列前附加一个可训练的“前缀”向量或短语,以此影响模型生成的结果。这种策略使得模型能够在不改变主体结构的情况下,仅通过对输入部分的调整来优化模型表现,从而实现参数效率提升。

  3. Prompt Tuning
    提示微调是另一种基于提示的参数高效微调方法。该方法通常涉及在模型输入端加入人工设计或可学习的提示词,用于指导模型生成特定类型的响应。在某些变体如 P-tuning 中,只对模型输入层的提示嵌入进行训练,而保持其余大部分模型参数固定,这样可以在不同任务间共享大部分预训练模型的知识,同时仅针对具体任务微调一小部分参数。

  4. Low-Rank Adaptation (LoRA)
    LoRA 是一种低秩近似的方法,它旨在减少微调时需要更新的参数数量。对于大规模的语言模型,LoRA 提出将参数矩阵的更新近似为低秩矩阵乘积的形式,即仅对模型中的稠密层引入两个较小维度的新矩阵 A 和 B 进行训练,而不是更新整个原矩阵 W。通过这种方式,LoRA 显著降低了内存使用和存储需求,并且可以维持单个大模型副本,同时为多个下游任务维护一组与任务相关的低秩分解矩阵,以实现高效的参数化适应。

2.5 Memory-Efficient 模型自适应

由于大量的模型参数,LLMs 推理占用了大量的内存空间,这使得在实际应用程序中部署它的成本非常高。在本节中,我们将讨论如何通过一种流行的模型压缩方法(即模型量化)来减少内存占用。

2.5.1 LLMs 的量化方法

  1. Post-Training Quantization (PTQ)
    后训练量化是一种无需重新训练模型即可将模型从高精度浮点数格式转换为低精度(如 INT8 或更低)整数格式的方法。这样可以极大地减少模型所需的存储空间和计算资源,并加快推理速度,从而使得大规模模型能在内存和计算力有限的设备上部署。

    • 混合精度分解:针对隐藏激活值中出现的大数值问题,例如在具有超过6.7B 参数量的模型中观察到的极端大值现象,研究者提出了诸如 LRA(LoRA/AdaLoRA)这样的方法,将矩阵乘法分解成两个部分,一部分使用更高精度(如FP16),另一部分使用较低精度(如 INT8)进行计算,以恢复原始浮点计算的准确性。
    • 分段式量化:采用基于特定特征维度的向量量化方式,比如LLM.int8(),它分离出具有异常值特征维度的部分,并分别用不同精度处理,确保量化过程中不丢失重要信息。
    • 细粒度量化与层级优化:包括对权重和激活值采用更细致的量化方案,如 Token-wise quantization、P-Tuning 等方法,以及像 ZeroQuant 那样动态调整激活值的量化参数;同时,针对每一层的特性,改进优化量化方法,如 Layerwise quantization 通过逐层寻找最优量化参数,来最小化重建损失。
  2. Other Quantization Methods

    • 优化后的微调与量化联合训练:例如 QLoRA 结合了 LoRA 参数高效的微调方法与量化技术,使4位量化模型能够达到16位全精度模型的微调性能,通过添加可微调的小规模适配器,在量化的同时保持模型能力不受损。
    • 进一步的量化技术探索:除了 PTQ 外,还有研究者尝试了量化感知训练(Quantization-aware training, QAT)等其他量化方法,尽管这些方法通常需要更多的训练时间,但可能在某些情况下提供更高的精度保障,特别是在激活值量化方面。此外,针对 LLMs 特点的新颖量化策略也在不断涌现和发展中。

2.5.2 开源量化库

  1. Bitsandbytes:这是一个基于论文中提出的 LRA 和8-bit 优化器方法开发的开源库。它专注于对 LLMs 的权重和激活值进行量化,并支持4位和8位精度的矩阵乘法运算以实现高效推理。该库还包含一个针对训练阶段设计的8位优化器,旨在提高量化模型训练时的性能。

  2. GPTQ-for-LLaMA:这个专门针对 LLaMA 系列模型开发的量化库,允许对不同规模的LLaMA模型进行4位量化处理。该库提供了与bitsandbytes对比的功能,并在其项目网站上展示了量化后的模型在内存使用和性能方面的比较结果。

  3. AutoGPTQ:同样是基于 GPTQ 算法的一个量化包,支持 INT4 级别的量化,适用于 LLMs 的参数量化。该库通过整合到 HuggingFace 的 PEFT 库中,为用户提供了一种简便的方式来执行 LLMs 的量化操作。

  4. lama.cpp:专门针对大型语言模型(LLMs)进行了优化和实现,特别是为量化后的 LLM 模型提供了高效运行的支持。它通过C/C++实现,在资源有限的设备上(例如MacBook等笔记本电脑)运行量化后的 LLMs 成为可能。支持 INT4、INT5 和 INT8 级别的量化模型,可以处理将模型参数从高精度浮点数转换为低精度整数格式后的 LLMs,从而大幅度减少内存占用并提高推理速度。

3. 参考

《A Survey of Large Language Models》
《NLP深入学习:《A Survey of Large Language Models》详细学习(一)》
《NLP深入学习:《A Survey of Large Language Models》详细学习(二)》
《NLP深入学习:《A Survey of Large Language Models》详细学习(三)》

后续内容也在持续更新中…

欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

也欢迎关注我的wx公众号:一个比特定乾坤

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallerFL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值