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

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

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T