大语言模型-7.模型微调

书生浦语大模型实战营学习笔记-4.模型微调

本节对应的视频教程为B站链接。笔记对视频的理论部分进行了整理。部分内容参考李宏毅2024春《生成式人工智能导论》三分钟学会大模型PEFT的LORA算法 lora_rank, lora_alpha

大模型的训练过程

模型视角

这里原视频用的“分类”这个名字,我看到的时候还有点懵,后来才意识到这里说的是大模型的训练过程。

是的,意识到这点以后你就知道,这一节讲的内容和后面实操的内容差的有点多。。。

这里有两个概念。不过在了解这两个概念之前,我们先从模型的角度看看当今LLM都是如何训练出来的。

我们知道当今LLM的训练方式就是基于文字接龙:

但是不同阶段使用的训练数据不同。

Pretrain

首先,模型使用网上爬取的资料随意进行文字接龙训练,这个过程是Self-supervised Learning(自监督学习)的过程:



训练结束后,语言模型学了很多东西却不知道使用方法。就好像人有上乘内功却不知道使用的方法。

GPT、GPT2、GPT3都是使用这种方式完成训练的,只不过训练数据规模大小不一样。因为这一过程就叫“生成式预训练(Generative PreTraining)”,简称GPT——这就是GPT的名字来源

Instruction Fine-tuning

然后,使用一部分有标注数据在第一步自监督学习的基础上进行Instruction Fine-tuning



InstructGPT就是使用这两步训练出来的。

但是数据标注太花费人力了,所以在这一步,有很多不同的做法,但是简单地概括,一派是要训练一堆专才,一派是要训练一个通才:



Reinforcement Learning from Human Feedback (RLHF)

RLHF就是用生成文本的人工反馈作为性能衡量标准,或者更进一步用该反馈作为损失来优化模型:

我们在使用GPT时,如果让它重新生成过答案,就会有human feedback的结果评价按钮,RLHF的数据即来源于此。

总结

三阶段对比如下:

好,下面再回过头来看视频中的两个概念:

  • 增量预训练微调

    • 使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识
    • 训练数据:文章、书籍、代码等
  • 指令跟随微调
    • 使用场景:让模型学会对话模板,根据人类指令进行对话
    • 训练数据:高质量的对话、问答数据

这两个概念对应于模型训练的不同阶段:

所以,这里的“基座模型”指的就是经过Pretrain阶段得到的模型;

  • 在成为“专才” 的道路上,需使用高质量数据进行“增量预训练微调”。这一步算是二次预训练;之后直接使用“指令跟随微调”

  • 在成为“通才” 的道路上,直接使用“指令跟随微调” Instruction Fine-tuning,得到的模型就是对话模型。
  • 如果不进行训练,直接使用模型,模型就意识不到你在问它问题:

数据视角

从互联网上爬出的数据显然不能直接拿来训练,需要进行一系列预处理。

首先,要将原始数据进行清理(数据清洗):

然后对数据进行格式转换,使其变为标准格式:

之后添加对话模板。格式转换后即可直接替换对话模板。



实际上,对话模板中还会有起始符和结束符。

训练完成后,在推理过程中仍然有添加与解除模板的过程:

LoRA

这里给个简单的例子便于大家理解LoRA:

对于模型有权重weight:



我们可以只更新低秩矩阵 \(LoraA\) 和 \(LoraB\) 来完成对模型的整体更新:



这样更新耗费的资源更少,效果却差不多。

QLoRA

QLoRA就是量化了的LoRA:



同时,引入了Paged Optimizers,它可以避免梯度检查点操作时内存爆满导致的内存错误。

XTuner

视频后面还有一些对于XTuner的介绍。

另外,关于使用XTuner微调大模型,我们有一个实操供参考。

模型微调-书生浦语大模型实战营学习笔记4&大语言模型7的更多相关文章

  1. 小马哥的 Java 项目实战营学习笔记(1)

    小马哥的 Java 项目实战营 小马哥的 Java 项目实战营 第二节:数据存储之 JDBC JDBC 核心 API 数据源 接口 - javax.sql.DataSource获取方式 1.普通对象初 ...

  2. C语言中setjmp与longjmp学习笔记

    C语言中setjmp与longjmp学习笔记 一.基础介绍 头文件:#include<setjmp.h> 原型:  int setjmp(jmp_buf envbuf) ,然而longjm ...

  3. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  4. Coursera台大机器学习基础课程学习笔记1 -- 机器学习定义及PLA算法

    最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一机器学习是什么? 感觉和 Tom M. Mitchell的定义几乎一致, A computer program ...

  5. 【大数据】Sqoop学习笔记

    第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MyS ...

  6. 【大数据】SparkCore学习笔记

    第1章 RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象.代码中是一个抽象类,它代表一个不可变.可 ...

  7. 【大数据】Kafka学习笔记

    第1章 Kafka概述 1.1 消息队列 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息 ...

  8. 【大数据】Hive学习笔记

    第1章 Hive基本概念 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表, ...

  9. 【大数据】SparkSql学习笔记

    第1章 Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和 DataSet,并且作为分布式 ...

  10. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

随机推荐

  1. BorderDet:通过边界特征大幅提升检测准确率,即插即用且速度不慢 | ECCV 2020 Oral

    边界对于定位问题十分重要,BorderDet的核心思想BorderAlign巧妙又有效,将边界特征融入到目标定位预测中,而且能够简单地融入到各种目标检测算法中带来较大的性能提升下.在开源实现中,对Bo ...

  2. .NET Emit 入门教程:第六部分:IL 指令:4:详解 ILGenerator 指令方法:参数存储指令

    前言: 上一篇介绍了 IL 指令的分类以及参数加载指令,该加载指令以ld开头,将参数加载到栈中,以便于后续执行操作命令. 本篇开始介绍参数存储指令,其指令以st开头,将栈中的数据,存储到指定的变量中, ...

  3. #线段树#洛谷 2221 [HAOI2012]高速公路

    题目 分析 首先把收费站之间化为点,那这样即是区间加和区间查询, 考虑求的应该是 \[\frac{\sum a[i]*(r-i+1)*(i-l+1)}{C(r-l+2,2)} \] 分子可以拆成 \[ ...

  4. #矩阵乘法,斐波那契#洛谷 2544 [AHOI2004] 数字迷阵

    题目 分析 oeis找规律得到第一列和第二列的通项公式,然后矩阵乘法 代码 #include <cstdio> #include <cctype> #include <c ...

  5. Python 注释:解释和优化代码可读性

    注释可以用来解释Python代码.注释可以用来使代码更易读.注释可以用来在测试代码时防止执行. 创建注释 注释以#开始,Python会忽略它们: 示例:获取您自己的Python注释 # 这是一个注释 ...

  6. win10系统,软件不可用,无法调用摄像头

    现象描述: 客户电脑是win10,定制带版权的电脑,安装的有卡巴斯基安全软件(最开始并不知道有这么个玩意),使用客户端软件,软件可以正常打开,但是软件无法打开摄像头画面(*:软件在其他电脑都是正常使用 ...

  7. 《深入理解Java虚拟机》读书笔记:虚拟机性能监控与故障处理工具

    一.JDK的命令行 虚拟机性能监控与故障处理工具 工具 1.jps:虚拟机进程状况工具 jps主要用来输出JVM中运行的进程状态信息,它的功能也和ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟 ...

  8. linux 性能自我学习 ———— cpu 高怎么办 [三]

    前言 linux 性能分析自我学习. 正文 一般我们说cpu,一般是什么高呢? 一般是指cpu 使用率高. 那么什么是cpu 使用率呢? cpu 使用率 = 1- 空闲时间/总cpu 时间 平均cpu ...

  9. github 小技巧

    前言 简单记一下github 小技巧,因为经常忘. 正文 就是如何快速搜索到自己想找的项目. 如果自己知道项目名,那么直接输入就可以搜索到. 如果不是,那么一般要通过高级搜索. https://git ...

  10. 实验k8s ————— k8s 搭建[一]

    前言 以前学习k8s记录的.这里简单整理一下搭建,当时是我们学习环境的搭建,正式环境得专门的运维人员来,毕竟人家考虑的东西不一样. 正文 这里用kubeadm进行搭建,更加详细信息,在这里: http ...