大模型系列课程学习-大预言模型微调方法介绍

2024-04-22 13:36

本文主要是介绍大模型系列课程学习-大预言模型微调方法介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.大语言模型相关基本概念综述

语言模型指对语言进行建模,其起源于语音识别(speech recognition),输入一段音频数据,语音识别系统通常会生成多个句子作为候选,究竟哪个句子更合理?
学术上表达为:描述一段自然语言的概率或给定上文时下一个词出现的概率
在这里插入图片描述
根据之前的介绍,语言模型经过四个阶段的发展,详情请参考上一节学习分享博客
毫无疑问,大语言模型是一种由包含数百亿以上参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标注文
本进行训练。大模型发展的时间线可以参考下图
在这里插入图片描述

1.1 大语言模型的涌现能力

大语言模型的涌现能力(Emergent Capability)指的是随着模型规模的增加,模型展现出超出预期的能力和表现,这种能力使得大语言模型成为能够解决负责任务和推动人工智能进步的重要工具。涌现一般体现在如下几个方面:

  • 学习能力提升:大语言模型具备更大的空间参数和表征能力,能够学习到更复杂、抽象的模式和特征,自然语言理解能力更强,能够捕捉数据的细微差异
  • 语言理解和生成能力:在自然语言任务重,大模型能够理解更丰富的语义和语法知识,并具备更好的语言理解和生成能力
  • 创新和探索:大语言模型能力不仅体现在已知任务重,而且在一些创新探索领域仍然可以发挥自己的创造性

1.2 大模型的推理能力

大模型的推理能力指的是逻辑推理、推断和推理问题解决方面的能力,一般体现在如下5个方面:

  • 逻辑推理:具备一定的逻辑推理能力,掌握逻辑推理的规则和方法
  • 推断和推理问题解决:可以通过已有知识的推理和推断,填补不完整的信息,解决模糊和宽泛的问题。
  • 关联和关系理解:大模型具备强大的关联和关系理解能力,能够识别多个要素直接的关系
  • 多步推理:大模型能够完成多步推理,在推理过程汇总进行多个步骤的演绎和推断;
  • 常识推理:因大模型学习过海量知识,具备一定的常识推理能力

2.大语言模型构建流程

大模型的训练阶段主要包含四个阶段:预训练阶段、有监督微调阶段、奖励模型阶段和强化学习阶段,这四个学习阶段都需要不同规模的数据集合以及不同的算法,而且需要不同的机器资源和相关策略。
在这里插入图片描述
接下来介绍不同阶段的细节及特点

2.1预训练阶段

预训练阶段:需要利用海量的训练数据,包括互联网网页、维基百科、书籍、GitHub、论文、问答网站等,构建包含数千亿甚至数万亿单词的具有多样性的内容。该阶段可以理解为使模型能够理解和生成各种不同类型的文本,相当于广泛学习,具备通识知识。

2.2 有监督微调(指令微调)阶段

有监督学习阶段:为指令微调,利用少量高质量数据集合,包含用户输入的提示词(Prompt)和对应的理想输出结果。用户输入包括问题、闲聊对话、任务指令等多种形式和任务。该阶段可以理解为使用人工标注的数据集来训练模型,使得大模型具备特定问题生成回复是更加准确和有针对性。

2.3 奖励建模阶段

奖励建模阶段:目标是构建一个文本质量对比模型,对于同一个提示词,SFT模型给出的多个不同输出结果的质量进行排序。奖励模型(RM 模型)可以通过二分类模型,对输入的两个结果之间的优劣进行判断。该阶段可以理解为用户区分模型生成内容质量的高低,引导模型向好的方向靠齐。

2.4 强化学习阶段

强化学习阶段:根据数十万用户给出的提示词,利用在前一阶段训练的 RM 模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。该阶段和奖励模型一起,不断的优化大模型自己的生成策略,是的大模型能够生成更加流畅、准确的回复内容。

由上述的四个阶段,也衍生出不同的使用者的四个阶段。一般情况下对于纯粹的使用者来说,可以使用prompt快速使用入门;对于应用开发人员,可以使用langchain等工具快速开发出一个智能体,从而完成特定流程的实现;对于算法人员来说,额外关注大模型的落地应用,这块往往需要掌握大模型微调技术;对于深度算法使用人员来说,一般更关注于底座大模型的训练,从而提成底座能力。对于大模型感兴趣的人员,可以从prompt指令入手,开始用起来,可以参考prompt指令入门。本次主要分享微调技术,其他的技术阶段待后续更新。
在这里插入图片描述

3.大语言模型参数微调方法

在了解微调方法之前,我们先了解下为什么需要微调大模型,而不是直接预训练模型?首先是预训练模型的成本比较高,其次提示工程存在一定的限制,不能够完全解决下游问题,此外对于下游任务,特别是特定领域数据,大模型在预训练时,并没有见到过,所以这部分场景往往需要微调从而实现下游任务。
大模型的微调一般包含 全量微调方式微调其他
全量微调方式:全量微调(Full Fine-Tune,FFT)
其他微调方式

  • 高效微调方式(Parameter-Efficient Fine-Tune,PEFT)
  • 有监督微调(Supervice Fine-tune,SFT)
  • 基于人类反馈的强化学习(RLHF)
  • 基于AI反馈的强化学习(RLAIF)
    在这里插入图片描述
    一般情况下,对于个人来说,PEFT为当下主流的应用方式,如上图所示,PEFT高效微调方法可以按照如下结果方面划分:
    (1)围绕Token做文章:语言模型不变,额外添加token
  • Prompt tuning
  • Prefix tuning
  • P-tuning
    (2)特定场景任务:训练“本质”的低秩模型
  • Lora
  • QLora
  • AdaLora
    (3)少量数据类等
  • IA3
  • UniPELT
    为了方便进一步理解上述微调方法,接下来使用图例进行解释。对于输入x 和输入y,模型需要做的就是建立输出y与x之间的映射关系,即y = f(x) = Wx
    在这里插入图片描述
    对于上述的图示中,W表示模型参数,X表示输入,Y表示输出,上述的高效微调方法可以分为改变输入X(如prompt-tuning),额外替代W参数(如lora)以及对于W进行参数存储量化。

3.1 BitFit

3.2 Prefix Tuning

在这里插入图片描述

3.3 Prompt Tuning

在这里插入图片描述

3.4 P-Tuning & P-Tuning V2

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/017a48f7979e4223be8d9f9b35cd5b9f.png
在这里插入图片描述

3.6 Adapter Tuning

3.7 Lora

在这里插入图片描述

这篇关于大模型系列课程学习-大预言模型微调方法介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925921

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

SpringBoot中ResponseEntity的使用方法举例详解

《SpringBoot中ResponseEntity的使用方法举例详解》ResponseEntity是Spring的一个用于表示HTTP响应的全功能对象,它可以包含响应的状态码、头信息及响应体内容,下... 目录一、ResponseEntity概述基本特点:二、ResponseEntity的基本用法1. 创

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自