【大模型】大模型相关技术研究—微调

为什么要对大模型进行微调

1.成本效益:

o 大模型的参数量非常大,训练成本非常高,每家公司都去从头训练一个自己的大模型,这个事情的性价比非常低。

2.Prompt Engineering 的局限性:

o Prompt Engineering 是一种相对容易上手的使用大模型的方法,但它有明显缺点。因为通常大模型的实现原理都会对输入序列的长度有限制,Prompt Engineering 的方式会把 Prompt 搞得很长。越长的 Prompt,大模型的推理成本越高,因为推理成本是跟 Prompt 长度的平方正相关的。另外,Prompt 太长会因超过限制而被截断,进而导致大模型的输出质量打折扣,这也是一个非常严重的问题。

3.提升特定领域能力:

o Prompt Engineering 的效果达不到要求,而企业又有比较好的自有数据,能够通过自有数据,更好地提升大模型在特定领域的能力。这时候微调就非常适用。

4.个性化服务:

o 要在个性化服务中使用大模型的能力,这时候针对每个用户的数据,训练一个轻量级的微调模型,是一个不错的方案。

5.数据安全:

o 如果数据不能传递给第三方大模型服务,那么搭建自己的大模型就非常必要。

如何对大模型进行微调

从参数规模角度

1.全量微调(Full Fine Tuning, FFT)

o 对全量参数进行全量训练,用特定的数据,对大模型进行训练,将 W 变成 W’。W’ 相比 W ,最大的优点就是上述特定数据领域表现会好很多,但缺点是训练成本高,并且存在灾难性遗忘(Catastrophic Forgetting)的风险。灾难性遗忘(Catastrophic Forgetting),用特定训练数据去微调可能会把这个领域的表现变好,但也可能会把原来表现好的别的领域的能力变差。

2.参数高效微调(Parameter-Efficient Fine Tuning, PEFT)

o 只对部分参数进行训练,解决 FFT 存在的问题。PEFT 是目前比较主流的微调方案。

从训练数据来源和方法角度

1.增量预训练(Continue PreTraining)

o 一般垂直大模型是基于通用大模型进行二次的开发。为了给模型注入领域知识,就需要用领域内的语料进行继续的预训练。

举例:假设我们有一个已经在通用语料库上预训练的GPT模型,现在我们希望让这个模型在医学领域的文本上表现更好。我们可以使用大量的医学文献对这个GPT模型进行继续预训练,使其适应医学领域的语言特点。

2.监督式微调(Supervised Fine Tuning, SFT)

o 用人工标注的数据,用传统机器学习中监督学习的方法,对大模型进行微调。

例如:指令微调(Instruction Tuning)- 输入文本:“Good morning!” - 任务描述:“翻译成西班牙语” - 期望输出:“¡Buenos días!”

3.基于人类反馈的强化学习微调(Reinforcement Learning with Human Feedback, RLHF)

o 把人类反馈通过强化学习方式引入到对大模型的微调中,让生成结果更加符合人类期望。

4.基于AI反馈的强化学习微调(Reinforcement Learning with AI Feedback, RLAIF)

o 与 RLHF 类似,但反馈来源是 AI,以解决人类反馈收集成本高、效率低的问题。

5.直接偏好优化(Direct Preference Optimization)

o 它主要通过直接优化模型对用户偏好的预测能力来提升模型的性能。与传统的损失函数优化不同,DPO更加关注模型在实际应用中的表现,特别是在用户体验和满意度方面。
模型微调分成3个阶段:

  1. 第一阶段:(Continue PreTraining)增量预训练,在海量领域文档数据上二次预训练模型,以注入领域知识.
  2. 第二阶段: SFT(Supervised
    Fine-tuning)有监督微调,构造指令微调数据集,在预训练模型基础上做指令精调,以对齐指令意图
  3. 第三阶段 (1)RLHF(Reinforcement Learning from Human
    Feedback)基于人类反馈对语言模型进行强化学习,分为两步:RM(Reward
    Model)奖励模型建模,构造人类偏好排序数据集,训练奖励模型,用来建模人类偏好,主要是"HHH"原则,具体是"helpful,
    honest, harmless";RL(Reinforcement
    Learning)强化学习,用奖励模型来训练SFT模型,生成模型使用奖励或惩罚来更新其策略,以便生成更高质量、更符合人类偏好的文.
    DPO(Direct Preference
    Optimization)直接偏好优化方法,DPO通过直接优化语言模型来实现对其行为的精确控制,而无需使用复杂的强化学习,也可以有效学习到人类偏好,DPO相较于RLHF更容易实现且易于训练,效果更好

一些比较流行的PEFT方案

从成本和效果的角度综合考虑,PEFT是目前业界比较流行的微调方案。接下来介绍几种比较流行的PEFT微调方案。

1、Prompt Tuning
Prompt Tuning的出发点,是基座模型(Foundation Model)的参数不变,为每个特定任务,训练一个少量参数的小模型,在具体执行特定任务的时候按需调用。

Prompt Tuning的基本原理是在输入序列X之前,增加一些特定长度的特殊Token,以增大生成期望序列的概率。

具体来说,就是将X = [x1, x2, …, xm]变成,X = [x1, x2, ..., xk; x1, x2, …, xm], Y = WX`。

例如:

假设我们有一个情感分析任务,原始输入句子为"I love this movie."
通过Prompt Tuning,我们在原始输入序列前增加一些提示语,例如:
X’ = [“This is a sentiment analysis task:”, “The sentiment of the following sentence is:”, “I”, “love”, “this”, “movie”, “.”]
2、Prefix Tuning
Prefix Tuning的灵感来源是,基于Prompt Engineering的实践表明,在不改变大模型的前提下,在Prompt上下文中添加适当的条件,可以引导大模型有更加出色的表现。

Prefix Tuning的出发点,跟Prompt Tuning的是类似的,只不过它们的具体实现上有一些差异。

Prompt Tuning是在Embedding环节,往输入序列X前面加特定的Token。

而Prefix Tuning是在Transformer的Encoder和Decoder的网络中都加了一些特定的前缀。

具体来说,就是将Y=WX中的W,变成W = [Wp; W],Y=WX。

Prefix Tuning也保证了基座模型本身是没有变的,只是在推理的过程中,按需要在W前面拼接一些参数。

举例说明:

原始英文句子为:“I love this movie.”

Encoder 输入变为:W’_encoder = [Wp_encoder; W_encoder]

Decoder 输入变为:W’_decoder = [Wp_decoder; W_decoder]

然后,我们将新的输入序列 X 输入到修改后的 Transformer 模型中进行预测,得到输出 Y:

假设输出结果是:“我喜欢这部电影。”

3、LoRA
LoRA是跟Prompt Tuning和Prefix Tuning完全不相同的另一条技术路线。

LoRA背后有一个假设:我们现在看到的这些大语言模型,它们都是被过度参数化的。而过度参数化的大模型背后,都有一个低维的本质模型。

通俗讲人话:大模型参数很多,但并不是所有的参数都是发挥同样作用的;大模型中有其中一部分参数,是非常重要的,是影响大模型生成结果的关键参数,这部分关键参数就是上面提到的低维的本质模型。

LoRA的基本思路,包括以下几步:

首先, 要适配特定的下游任务,要训练一个特定的模型,将Y=WX变成Y=(W+∆W)X,这里面∆W主是我们要微调得到的结果;

其次,将∆W进行低维分解∆W=AB (∆W为m * n维,A为m * r维,B为r * n维,r就是上述假设中的低维);

接下来,用特定的训练数据,训练出A和B即可得到∆W,在推理的过程中直接将∆W加到W上去,再没有额外的成本。

另外,如果要用LoRA适配不同的场景,切换也非常方便,做简单的矩阵加法即可:(W + ∆W) - ∆W + ∆W`。

参考:https://zhuanlan.zhihu.com/p/663557294
4、QLoRA
LoRA 效果已经非常好了,可以媲美全量微调的效果了,那为什么还要有个QLoRA呢?

这里先简单介绍一下,量化(Quantization)。

量化,是一种在保证模型效果基本不降低的前提下,通过降低参数的精度,来减少模型对于计算资源的需求的方法。

量化的核心目标是降成本,降训练成本,特别是降后期的推理成本。

QLoRA就是量化版的LoRA,它是在LoRA的基础上,进行了进一步的量化,将原本用16bit表示的参数,降为用4bit来表示,可以在保证模型效果的同时,极大地降低成本。

论文中举的例子,65B的LLaMA 的微调要780GB的GPU内存;而用了QLoRA之后,只需要48GB。效果相当惊人!

5、Adapter Tuning
在面对特定的下游任务时,如果进行 Full-Fintuning(即预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果。

于是他们设计了如下图所示的 Adapter 结构,将其嵌入 Transformer 的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调。同时为了保证训练的高效性(也就是尽可能少的引入更多参数)
在这里插入图片描述

引用地址:https://zhuanlan.zhihu.com/p/650287173
参考地址:https://zhuanlan.zhihu.com/p/627642632

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

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

相关文章

视图库对接系列(GA-T 1400)十二、视图库对接系列(本级)人员数据推送

背景 人体和非机动车和机动车类似的,只是请求的参数不一样而已。人员数据推送 接入人员数据推送相对比较简单,我们只需要实现对应的接口就ok了。 具体如图: 有增删改查接口,目前的话 因为我们是做平台,我们只需要实现添加接口就可以了。 接口实现 service 层 /**** …

软件工程面向对象 超市管理系统 需求分析 系统设计 课程设计报告

1、引言 系统简述 超市管理系统的功能主要有前台管理和后台管理两个大块。其使用对象 有超市管理人员和超市销售人员两类。超市管理系统主要为了实现商品输 入、 输出管理数据的自动化, 提高商品统计信息的实时性, 减轻人工劳动强 度从而节省人力成本。实…

Go语言---异常处理error、panic、recover

异常处理 Go 语言引入了一个关于错误处理的标准模式,即 error 接口,它是 Go 语言内建的接口类型,该接口的定义如下: package errorsfunc New(text string) error {return &errorString{text} }// errorString is a trivial implementation of error. type errorString st…

springboot事故车辆与违章车辆跟踪系统-计算机毕业设计源码03863

springboot事故车辆与违章车辆跟踪系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。…

W外链怎么样,他们家的短网址免费的吗?

W外链作为短网址服务的一种,体现了短网址技术的现代发展趋势,它不仅提供了基础的网址缩短功能,还扩展了一系列高级特性和增值服务,以适应更广泛的市场需求。根据相关参考内容,W外链具有以下特点和优势: 短域…

2024程序员行业风口和面试宝典

国际研究机构Gartner会在每年10月份左右发布下一年度的战略发展趋势预测,并在次年3月左右发布和网络安全相关的趋势预测。绿盟科技通过将近3年的趋势预测进行分组对比分析后发现,除了众人皆知的AI技术应用外,数据模块化、身份优先安全、行业云…

01-图像基础-颜色空间

1.RGB颜色空间 RGB是一种常用的颜色空间,比如一幅720P的图像,所对应的像素点个数是1280*720,每一个像素点由三个分量构成,分别是R,G,B。 R代表红色分量,G代表绿色分量,B代表蓝色分量,以24位色来…

加密与安全_密钥体系的三个核心目标之不可否认性解决方案

文章目录 Pre概述不可否认性数字签名(Digital Signature)证书是什么证书使用流程 PKICA证书层级多级证书证书链是如何完成认证的? 其他疑问1. Alice能直接获取Bob的公钥,是否还需要证书?2. 为什么即使能直接获取公钥也…

理解机器学习中的潜在空间(Understanding Latent Space in Machine Learning)

1、什么是潜在空间? If I have to describe latent space in one sentence, it simply means a representation of compressed data. 如果我必须用一句话来描述潜在空间,它只是意味着压缩数据的表示。 想象一个像上面所示的手写数字(0-9&…

vue学习day01-vue的概念、创建Vue实例、插值表达式、响应式、安装Vue开发者工具

1、vue的概念 Vue是一个用于构建用户界面的渐进式 框架 (1)构建用户界面:基于数据动态渲染页面 (2)渐进式:循序渐进的学习 (3)框架:一条完整的项目解决方案&#xff…

GenAl如何改变 DevOps 中的软件测试?

TestComplete 是一款自动化UI测试工具,这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的自动化测试。 TestComplete 集成了一种精心设计的自动化引擎,可以自动记录和回放用户的操作,方便用户进行UI(用户界面&…

RTK_ROS_导航(2):卫星图查看

目录 1. 基于MapViz的卫星图查看 1. 基于MapViz的卫星图查看 安装 # 源码安装 mkdir -p RTK_VISION/src cd RTK_VISION/src git clone https://github.com/swri-robotics/mapviz.git --branchmelodic-eol sudo apt-get install ros-$ROS_DISTRO-mapviz ros-$ROS_DISTRO-mapviz-…

IP-GUARD如何禁止电脑自带摄像头

IP-GUARD可以通过设备管理模块禁止USB接口,所以USB外置摄像头很容易就可以禁止了。 但是笔记本自带摄像头无法禁止,配置客户端策略如下: device_control_unknown_mode1 device_control_unphysical_mode3

记一次 Qt installer framework安装程序过程中 安装驱动依赖

在installscript.qs 文件中该函数添加exe 依赖程序放置位置

Python28-11 CatBoost梯度提升算法

CatBoost(Categorical Boosting)是由Yandex(一家俄罗斯互联网企业,旗下的搜索引擎曾在俄国内拥有逾60%的市场占有率,同时也提供其他互联网产品和服务)开发的一种基于梯度提升的机器学习算法。CatBoost特别擅长处理类别特征&#x…

什么是ThingsKit物联网平台?

在信息化时代的浪潮中,物联网(IoT)作为新一代信息技术的核心,已经逐渐渗透到我们生活的方方面面。而在这个大背景下,Thingskit物联网平台以其独特的技术优势和应用场景,成为了物联网领域的一颗璀璨明星。本…

3.flink架构

目录 概述 概述 Flink是一个分布式的带有状态管理的计算框架,为了执行流应用程序,可以和 Hadoop YARN 、K8s 进行整合,当然也可以是一个 standalone 。 官方地址:速递 k8s 是未来的一种趋势,对资源管控能力强。

Windows 控制中心在哪里打开,七种方法教会你

在 Windows 操作系统中,控制中心的概念可能稍有些混淆,因为 Windows 通常使用“控制面板”这一术语来指代用于配置系统设置和更改硬件及软件设置的中心区域。 不过,随着 Windows 的更新,微软也在逐步将一些设置迁移到“设置”应用…

关于Linux的操作作业!24道题

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

MySQL数据库基本操作-DDL和DML

1. DDL解释 DDL(Data Definition Language),数据定义语言,该语言部分包括以下内容: 对数据库的常用操作对表结构的常用操作修改表结构 2. 对数据库的常用操作 功能SQL查看所有的数据库show databases;查看有印象的数据库show d…