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

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

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

相关文章

javaWeb个人日记(博客)管理系统

一、简介 在快节奏的生活中,记录生活点滴、感悟和思考是一种重要的方式。基于此,我设计了一个基于JavaWeb的个人日记本系统,旨在帮助用户轻松记录并管理自己的日记。该系统包括登录、首页、日记列表、写日记、日记分类管理和个人中心等功能&…

mysql - 缓存

缓存 InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以…

命令模式(请求与具体实现解耦)

目录 前言 UML plantuml 类图 实战代码 模板 Command Invoker Receiver Client 前言 命令模式解耦了命令请求者(Invoker)和命令执行者(receiver),使得 Invoker 不再直接引用 receiver,而是依赖于…

Java基础--128陷阱

问题引入 Integer a 123; Integer b 123; System.out.println(ab); 结果为true。 但是如果代码如下 Integer a 1230;Integer b 1230;System.out.println(ab); 这个的结果就是false。 问题解决 当Integer a 123时,其实他底层自动转换成了Integer a Inte…

Learn OpenGL 29 延迟着色法

延迟着色法 我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading),它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常…

网络安全-文件包含

一、php://input 我们先来看一个简单的代码 <meta charset"utf8"> <?php error_reporting(0); $file $_GET["file"]; if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://&quo…

Windows如何搭建 ElasticSearch 集群

单机 & 集群 单台 Elasticsearch 服务器提供服务&#xff0c;往往都有最大的负载能力&#xff0c;超过这个阈值&#xff0c;服务器 性能就会大大降低甚至不可用&#xff0c;所以生产环境中&#xff0c;一般都是运行在指定服务器集群中。 除了负载能力&#xff0c;单点服务器…

Redis到底是多线程还是单线程?

Redis6.0之前&#xff1a;是单线程模式。 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。 Redis6.0之前&#xff1a;单线程 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。

iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信

文章目录 一、前言二、嵌套H5应用并实现双方通信2.1 WKWebView 与JS 原生交互2.1.1 H5页面嵌套2.1.2 常用代理方法2.1.3 OC调用JS方法2.1.4 JS调用OC方法 2.2 JSCore 实现原生与H5交互2.2.1 OC调用H5方法并传参2.2.2 H5给OC传参 2.3 UIWebView的基本用法2.3.1 H5页面嵌套2.3.2 …

面试算法-101-重排链表

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交…

使用mid360从0开始搭建实物机器人入门级导航系统,基于Fast_Lio,Move_Base

Introduction 本文原本只是自己在拿到mid360后&#xff0c;开始进行开发过程的一些问题和学习的记录。毕竟实物和仿真还是有很多不同&#xff0c;且由于碰到的问题也比较多&#xff0c;READEME也越来越详细&#xff0c;所以就干脆整合起来&#xff0c;做成了一篇使用mid360的搭…

python、execl数据分析(数据描述)

一 python 1.各函数 1.1python库的安装与导入 #pip install os#pip install matplotlib#pip install seaborn#pip install scikit-learn#pip install scipy#修 改 工 作 目 录import osos.getcwd () # 查看当前工作环境os.chdir( F :\my course\database ) # 修改工作环境o…

Spark基于DPU Snappy压缩算法的异构加速方案

一、总体介绍 1.1 背景介绍 Apache Spark是专为大规模数据计算而设计的快速通用的计算引擎&#xff0c;是一种与 Hadoop 相似的开源集群计算环境&#xff0c;但是两者之间还存在一些不同之处&#xff0c;这些不同之处使 Spark 在某些工作负载方面表现得更加优越。换句话说&am…

高效物联网连接技术创新:ECWAN边缘协同自组网的未来——基于ChirpLAN窄带扩频技术的无线混合组网

物联网是指将各种物理设备通过互联网进行连接和通信的技术。它是一个庞大的网络&#xff0c;由传感器、设备、网络和云服务组成&#xff0c;旨在实现对物体的远程监测、控制和数据采集。 基于ChirpLAN窄带扩频技术的无线混合组网协议ChirpLAN&#xff0c;ChirpLAN是基于其自有的…

将 SOC 集成到应用程序安全中以增强网络弹性

从历史上看&#xff0c;安全运营中心 (SOC) 和应用程序安全 (AppSec) 计划在组织的更广泛的网络安全框架内作为不同的实体运行。SOC 一直是实时威胁检测、分析和响应、监控网络恶意活动迹象以及管理事件响应以减轻潜在损害的据点。 相反&#xff0c;AppSec 专注于网络安全的预…

JavaWeb——过滤器

Filter也称之为过滤器&#xff0c;它是Servlet技术中最实用的技术&#xff0c;Web开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些特殊的功能。例如实现URL级别…

学会Sass的高级用法,减少样式冗余

在当今的前端开发领域&#xff0c;样式表语言的进步已经显著提升了代码组织性和可维护性。Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;作为CSS预处理器的翘楚&#xff0c;以其强大的变量、嵌套规则、混合宏&#xff08;mixin&#xff09;、循环和函数等高…

【Canvas与艺术】淡蓝辉光汽车速度仪表盘

【关键点】 内圈处渐变色的采用。 【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>淡蓝辉光汽车速度仪表盘</t…

Windows11 安装VitrulBox Ubuntu20 虚拟机启动后卡在“Freeing initrd memory: 131304K”

步骤&#xff1a;点击启动Ubuntu后&#xff0c;一直起不来&#xff1f;没办法正常关机&#xff0c;选择重启又一直卡在这里&#xff0c;原来是同样的错误 Freeing initrd memory: 131304K 原因&#xff1a;本机联想小新14Pro&#xff0c;AMD 7840HS&#xff0c;锐龙版。而Ryze…

基于TensorFlow的花卉识别(算能杯)%%%

Anaconda Prompt 激活 TensorFlow CPU版本 conda activate tensorflow_cpu //配合PyCharm环境 直接使用TensorFlow1.数据分析 此次设计的主题为花卉识别&#xff0c;数据为TensorFlow的官方数据集flower_photos&#xff0c;包括5种花卉&#xff08;雏菊、蒲公英、玫瑰、向日葵…