LLM - 大语言模型的指令微调(Instruction Tuning) 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/137009993

指令微调

大语言模型的指令微调(Instruction Tuning)是一种优化技术,通过在特定的数据集上进一步训练大型语言模型(LLMs),使其能够更好地理解和遵循人类的指令。这个数据集通常由一系列的指令和相应的期望输出组成。指令微调的目的是提高模型的能力和可控性,使其在执行任务时能够更准确地响应用户的需求。

指令微调通常包含:

  1. 构建指令格式数据:这些实例包含任务描述、一对输入输出以及示例(可选)。
  2. 有监督微调(Supervised Finetuning, SFT):在这些指令格式的实例上对大型语言模型进行微调。
  3. 提高推理能力:通过指令微调,模型能够更好地利用其知识库,回答问题或完成任务。
  4. 泛化到未见过的任务:经过指令微调的模型能够在新任务上表现得更好,即使这些任务在微调过程中没有被直接训练过。

指令微调的效果是使得大型语言模型在理解复杂问题和执行多样化任务时更加精准和高效。

1. 语境学习

在大型语言模型中,**提示学习(Prompt-Based Learning)语境学习(In-Context Learning, ICL)**是两种提高模型性能的方法。

提示学习,通过设计特定的提示(Prompt),引导模型生成预期的回答或完成特定的任务。这种方法依赖于模型的预训练知识和生成能力,通过提供上下文信息或关键词提示,激发模型的补全能力。例如,给定一个句子的一部分,让模型完成整个句子。这种方法,主要关注模型的生成能力,和如何利用已有的知识来理解和回应提示。

语境学习,使得模型能够在不进行额外训练的情况下,通过观察一些 输入-输出 示例来学习如何执行新的任务。ICL的关键思想是从类比中学习。例如,如果需要让模型进行文本分类,可以提供几个正确分类的样例,模型就能依据这些样例进行分类。ICL不需要参数更新,并直接对预先训练好的语言模型进行预测。这种方法的优势在于,可以快速适应新任务,而无需对模型权重进行调整。

这两种方法都在提高大型语言模型在特定任务上的表现方面发挥着重要作用,但是,应用和原理有所不同。提示学习,更多地关注于如何设计有效的提示来引导模型的回答,而语境学习,则关注于模型如何利用上下文中的示例来快速适应新任务。

语境学习(In-Context Learning, ICL),如下:
ICL

2. LoRA

LoRA

LoRA算法,全称为Low-Rank Adaptation,是大型语言模型的高效参数微调方法。核心思想是通过低秩矩阵分解,来近似模型权重的更新,从而在不显著增加参数量的情况下,实现对模型的微调。

具体来说,LoRA算法在预训练的语言模型中增加两个小的矩阵A和B。在微调过程中,固定原始模型的权重不变,只更新这两个矩阵。通过这种方式,LoRA算法能够在保持模型性能的同时,显著减少微调所需的参数量和计算资源。

LoRA算法的步骤包括:

  1. 选择微调的模型层:通常选择对模型性能影响较大的层,如自注意力层的权重。
  2. 初始化A和B矩阵:A矩阵通常使用随机高斯分布初始化,B矩阵使用零矩阵初始化。
  3. 训练A和B矩阵:在训练过程中,只对这两个矩阵进行更新,而不改变原始模型的权重。
  4. 合并权重:训练完成后,将B矩阵与A矩阵相乘,得到的结果与原始模型的权重合并,作为微调后的模型参数。

LoRA算法的优点在于,能够有效地减少微调所需的资源,同时保持或甚至提高模型的性能。这使得在资源有限的情况下,也能对大型语言模型进行有效的微调。特别适用于那些参数量巨大的模型,如GPT-3等。此外,LoRA微调对于低秩矩阵的秩数和目标模块的选择比较敏感,这可能会影响模型的性能和稳定性。因此,在实际应用中,需要仔细选择这些参数以达到最佳的微调效果。

LoRA算法结构,如下:
LoRA

3. 长文本建模

长文本建模

大语言模型的长文本建模是一个挑战,因为需要模型能够处理和理解大量的文本数据。为了解决这个问题,研究人员开发了一些方法来增强模型的长文本处理能力。

  • 具有外推能力的位置编码(Extrapolative Position Encoding),允许模型处理比在训练期间遇到的更长的文本序列。这种编码方式,通常基于模型在训练时学习到的位置模式,然后,将这些模式应用到更长的序列上,从而,使模型能够外推并处理超出其原始训练范围的文本长度。

  • 插值法压缩位置编码(Interpolative Position Encoding Compression),通过在已知的位置编码之间,进行插值来创建新的位置编码,从而使模型能够处理更长的文本序列,而不需要显著增加计算复杂性或模型大小。这种方法通过线性地缩小输入位置索引来匹配原始上下文窗口的大小,而不是外推超过训练的上下文长度,这有助于避免可能导致注意力机制崩溃的高注意力分数。

总的来说,这些方法都旨在提高大型语言模型处理长文本的能力,无论是通过外推还是插值,都是为了让模型能够更好地理解和生成长文本内容。对于一些需要长文本理解的应用场景,如文档摘要、阅读理解等,尤其重要。一般而言,插值法的效果优于外推法。

外推法(Extrapolation)与插值法(Interpolation)的对比,如图:
Interpolation

4. 指令数据集

Instruction Dataset

大语言模型中的指令微调数据集是一组特别设计的数据,用于训练和优化模型,使其更好地理解和遵循人类的指令。这些数据集通常包含一系列的指令和相应的期望输出,目的是提高模型在执行任务时的准确性和可控性。

指令微调数据集的构建过程通常包括:

  1. 定义任务和指令:明确模型需要执行的任务,并且,为每个任务创建清晰的指令。
  2. 收集或生成输出:对于每个指令,提供或生成一个或多个正确的输出作为模型的训练目标。
  3. 质量控制:确保数据集中的指令和输出是高质量的,能够准确反映任务的需求。

在实际应用中,指令微调数据集可能包括各种类型的任务,如文本分类、问答、文本生成等。这些数据集可以是公开的,也可以是私有的,取决于模型的训练需求和目标。一些已知的指令微调数据集包括:

  • Natural Instructions:这是一个包含多种自然语言处理任务的数据集,旨在提高模型的泛化能力。
  • P3(Public Pool of Prompts):由多个英语NLP数据集构建的数据集,包含多样化的任务和提示。
  • xP3(Cross-lingual Public Pool of Prompts):一个多语言指令数据集,包含不同自然语言任务的数据。

这些数据集,帮助模型学习如何根据给定的指令生成正确的输出,从而在实际应用中更好地服务于用户的需求,对于提升大语言模型的指令遵循能力至关重要。

自动构建(Self-Instruct)指令的过程,如下:
Self-Instruct

5. 训练对话模型

Chat

在大型语言模型中,训练对话模型通常涉及以下几个关键步骤:

  1. 预训练(Pretraining):
    首先,模型在大规模的数据集上进行预训练,以学习语言的基本结构和语义信息。这一阶段是为了让模型掌握通用的语言理解能力。

  2. 有监督微调(Supervised Finetuning, SFT):
    在预训练的基础上,模型会使用有标注的特定任务数据进行进一步的微调。这一步骤旨在使模型具备遵循指令的能力,从而更好地适应特定的对话任务。

  3. 奖励模型微调:
    奖励模型微调是在有监督微调之后的步骤,涉及到使用人类标注员的反馈来训练一个奖励模型。这个模型能够评估不同的回答,并指导主模型生成更符合人类偏好的回答。

  4. 基于人类反馈的强化学习(RLHF):
    最后,模型会通过RLHF进一步微调。在这个过程中,使用人类反馈来创建奖励信号,然后利用这些信号通过强化学习算法来改进模型的行为。这有助于模型在复杂的对话任务中表现得更好。

这些步骤共同构成了一个迭代的训练过程,旨在不断提升模型在特定对话任务中的性能和准确性。每个步骤都是基于前一个步骤的结果进行的,以确保模型能够有效地适应并执行其被训练的任务。

DeepSpeed-Chat 的训练对话模型,如下:

DeepSpeed-Chat

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

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

相关文章

【算法 高级数据结构】树状数组:一种高效的数据结构(二)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法、数据结构~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定…

RTthread如何引入webclient和cjson来编写自己的模块代码||SecureCRT的安装与激活||安装VScode

目录 1.RTthread如何引入webclient和cjson来编写自己的模块代码 2.SecureCRT的安装与激活 3.static与const的区别 4.安装VScode 1.RTthread如何引入webclient和cjson来编写自己的模块代码 以我自己的工程为例: 首先将新引入的模块在applicatons下新建cpeinfo文件…

【MySQL】一条 SQL 查询语句在数据库中的执行流程 | SQL语句中各个关键字的执行顺序

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

知识图表示学习中的负抽样研究综述

摘要 知识图表示学习(KGRL)或知识图嵌入(KGE)在知识构建和信息探索的人工智能应用中起着至关重要的作用。这些模型旨在将知识图中的实体和关系编码到低维向量空间中。在KGE模型的训练过程中&#xff0c;使用正样本和负样本是区分的必要条件。然而&#xff0c;直接从现有的知识…

鸿蒙NXET实战:高德地图定位SDK【获取Key+获取定位数据】(二)

如何申请key 1、创建新应用 进入[控制台]&#xff0c;创建一个新应用。如果您之前已经创建过应用&#xff0c;可直接跳过这个步骤。 2、添加新Key 在创建的应用上点击"添加新Key"按钮&#xff0c;在弹出的对话框中&#xff0c;依次&#xff1a;输入应用名名称&…

Muduo类详解之EventLoop

最核⼼的部分就是 EventLoop 、 Channel 以及 Poller 三个类&#xff0c;其中 EventLoop 可以看作是对业务线程的封装&#xff0c;⽽ Channel 可以看作是对每个已经建⽴连接的封装&#xff08;即 accept(3) 返回的⽂件描述符&#xff09; EventLoop class EventLoop { p…

解决SLF4J: Class path contains multiple SLF4J bindings.

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 SpringBoot 版本&#xff1a;v2.5.7 maven版本&#xff1a;3.6.3 文章目录 问题描述&#xff1a;原因分析&#xff1a;解决方案&#xff1a;参考资料&#xff1a; 问题描述&#xff1a; 当SpringBoot项目…

并发VS并行

参考文章 面试必考的&#xff1a;并发和并行有什么区别&#xff1f; 并发&#xff1a;一个人同时做多件事&#xff08;射击游戏队友抢装备&#xff09; 并行&#xff1a;多人同时处理同一件事&#xff08;射击游戏敌人同时射击对方&#xff09;

学习数据结构:算法的时间复杂度和空间复杂度

一、算法的复杂度 衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算法的运行快慢&#xff0c;而空间复杂度主要衡量一个算法运行所需要的额外空间。 算法的时间复杂度 算法中的基本操作的…

SAP BAS中Fiori开发的高阶功能(storyboard, navigation, guided development, variant)

1. 前言 在之前的几篇文章中&#xff0c;我介绍了SAP BAS的一些基本功能&#xff0c;包括账户申请&#xff0c;创建工作区&#xff0c;git的使用以及如何step-by-step去创建出你的第一个Fiori项目等等。在本篇中&#xff0c;我将进一步介绍一些在开发Fiori应用程序时会用到的高…

JAVA学习笔记19(面向对象编程)

1.面向对象编程 1.1 类与对象 1.类与对象的概念 ​ *对象[属性]/[行为] ​ *语法 class cat {String name;int age; }main() {//cat1就是一个对象//创建一只猫Cat cat1 new Cat();//给猫的属性赋值cat1.name "123";cat1.age 10; }​ *类是抽象的&#xff0c;…

前端使用正则表达式进行校验

一、定义 设计思想是用一种描述性的语言定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;我们就认为它“匹配”了&#xff0c;否则&#xff0c;该字符串就是不合法的。 在 JavaScript中&#xff0c;正则表达式也是对象&#xff0c;构建正则表达式有两种方式&#x…

【可用Claude Opus模型】Claude3国内镜像站,亲测完全超越GPT-4(可用Claude Opus,官网价值20刀)

#今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用Claude 3吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像站到处都是…

探索LLaMA模型:架构创新与Transformer模型的进化之路

引言 在人工智能和自然语言处理领域&#xff0c;预训练语言模型的发展一直在引领着前沿科技的进步。Meta AI&#xff08;前身为Facebook&#xff09;在2023年2月推出的LLaMA&#xff08;Large Language Model Meta AI&#xff09;模型引起了广泛关注。LLaMA模型以其独特的架构…

视频批量爬虫下载工具|可导出视频分享链接|抖音视频提取软件

便捷的视频批量爬虫软件操作指南 抖音视频下载界面图解 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量采集视频的解析 对特定关键词进行搜索和视频提取&#xff0c;例如输入“汽车配件”&#x…

2024年洗地机综合实力排行榜:谁才是真正的洗地神器?

近年来&#xff0c;洗地机在行业里&#xff0c;它集合了扫地和拖地以及自动清洁和除菌的功能&#xff0c;备受人们的喜爱&#xff0c;尤其是平时忙于工作并没有多少时间清洁家务的用户&#xff0c;但是对于第一次接触洗地机的用户来说&#xff0c;怎么选购洗地机也是个问题&…

初识React(一)从井字棋游戏开始

写在前面&#xff1a; 磨磨唧唧了好久终于下定决心开始学react&#xff0c;刚刚接触感觉有点无从下脚...新的语法新的格式跟vue就像两种物种...倒是很好奇路由和store是怎么实现的了~v~&#xff0c;一点一点来吧&#xff01;&#xff01;&#xff01; (一)创建项目 使用vite…

蓝桥杯算法 - DP

上一篇&#xff1a;[[蓝桥杯算法-排序、递归、全排列]] 动态规划&#xff08;dp&#xff09; dp即动态规划&#xff0c;常用于&#xff1a;数学&#xff0c;计算机科学&#xff0c;管理学&#xff0c;经济和生物信息学。 dp在生活中也很常见&#xff0c;如&#xff1a;你今天…

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…

1.4.2 练习

一、颠倒三角形 题目&#xff1a;修改顶点着色器让三角形上下颠倒 更改顶点着色器代码如下&#xff1a; #version 330 corelayout (location 0) in vec3 aPos; //位置变量的属性位置值为0 layout (location 1) in vec3 aColor; //颜色变量的属性位置值为1out vec3 ourColo…