大模型微调方法调研

news2025/2/13 18:03:32

文章目录

  • Freeze方法
  • PT方法
  • Lora方法
  • Adalora
  • Prompt Tuning
  • Adapter Tuning
  • Prefix tuning
  • 遗留问题

Freeze方法

对原始模型部分参数进行冻结操作,仅训练部分参数

PT方法

P-Tuning,仅对大模型的Embedding加入新的参数。
P-Tuning 提出将 Prompt 转换为可以学习的 Embedding 层,只是考虑到直接对 Embedding 参数进行优化会存在这样两个挑战:

Discretenes: 对输入正常语料的 Embedding 层已经经过预训练,而如果直接对输入的 prompt embedding进行随机初始化训练,容易陷入局部最优。
Association:没法捕捉到 prompt embedding 之间的相关关系。
作者在这里提出用 MLP + LSTM 的方式来对 prompt embedding 进行一层处理:

在这里插入图片描述

self.lstm_head = torch.nn.LSTM(
                    input_size=self.input_size,
                    hidden_size=self.hidden_size,
                    num_layers=num_layers,
                    dropout=lstm_dropout,
                    bidirectional=True,
                    batch_first=True,
  )

self.mlp_head = torch.nn.Sequential(
    torch.nn.Linear(self.hidden_size * 2, self.hidden_size * 2),
    torch.nn.ReLU(),
    torch.nn.Linear(self.hidden_size * 2, self.output_size),
)
self.mlp_head(self.lstm_head(input_embeds)[0])

Prefix Tuning 通过在每个 Attention 层都加入 Prefix Embedding 来增加额外的参数,通过 MLP 来初始化;而 P-Tuning 只是在输入的时候加入 Embedding,并通过 LSTM+MLP 来初始化。

P-Tuning-V2,将大模型的Embedding和每一层前都加上新的参数。

在这里插入图片描述

Lora方法

在大型语言模型上对指定参数增加额外的低秩矩阵,并在模型训练过程中,仅训练而外增加的参数。

Adalora

预训练语言模型中的不同权重参数对下游任务的贡献是不同的。因此需要更加智能地分配参数预算,以便在微调过程中更加高效地更新那些对模型性能贡献较大的参数。

具体来说,通过奇异值分解将权重矩阵分解为增量矩阵,并根据新的重要性度量动态地调整每个增量矩阵中奇异值的大小。这样可以使得在微调过程中只更新那些对模型性能贡献较大或必要的参数,从而提高了模型性能和参数效率。

在这里插入图片描述

Prompt Tuning

该方法可以看作是Prefix Tuning的简化版本,只在输入层加入prompt tokens,并不需要加入MLP进行调整来解决难训练的问题。固定预训练参数,为每一个任务额外添加一个或多个 embedding,之后拼接 query 正常输入 LLM,并只训练这些 embedding。随着预训练模型参数量的增加,Prompt Tuning的方法会逼近fine-tuning的结果。

在这里插入图片描述

作者:吃果冻不吐果冻皮
链接:https://www.zhihu.com/question/601594836/answer/3032763174
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Adapter Tuning

设计了Adapter结构(首先是一个down-project层将高维度特征映射到低维特征,然后过一个非线形层之后,再用一个up-project结构将低维特征映射回原来的高维特征;同时也设计了skip-connection结构,确保了在最差的情况下能够退化为identity),并将其嵌入Transformer的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的Adapter结构进行微调。同时为了保证训练的高效性(也就是尽可能少的引入更多参数)
在这里插入图片描述

作者:吃果冻不吐果冻皮
链接:https://www.zhihu.com/question/601594836/answer/3032763174
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载
请注明出处。

Prefix tuning

在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定。该方法其实和构造 Prompt 类似,只是 Prompt 是人为构造的“显式”的提示,并且无法更新参数,而Prefix 则是可以学习的“隐式”的提示。

同时,为了防止直接更新 Prefix 的参数导致训练不稳定的情况,他们在 Prefix 层前面加了 MLP 结构(相当于将Prefix 分解为更小维度的 Input 与 MLP 的组合后输出的结果),训练完成后,只保留 Prefix 的参数。

embedding = torch.nn.Embedding(num_virtual_tokens, token_dim)
transform = torch.nn.Sequential(
    torch.nn.Linear(token_dim, encoder_hidden_size),
    torch.nn.Tanh(),
    torch.nn.Linear(encoder_hidden_size, num_layers * 2 * token_dim),
)

在这里插入图片描述
原文链接:https://zhuanlan.zhihu.com/p/627642632

大模型微调论文综述:
Delta Tuning: A Comprehensive Study of Parameter Efficient Methods for Pre-trained Language Models

遗留问题

租的显卡怎么在本地部署和使用
每种微调方式的机理、优缺点?
微调的实现?data/model/

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

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

相关文章

Cgroup资源管理

docker资源限制 容器怎么实现资源的限制? 通过Cgroup资源限制 docker 通过Cgroup来控制容器使用的资源配额,包括CPU,内存,磁盘三大方面。 Cgroup是linux内核提供的一种可以限制,记录,隔离进程组所使用的…

IDEA默认代码样式的坑,逗号前面默认加上了空格

IDEA默认代码样式的坑,逗号前面默认加上了空格 个人习惯编写完代码,会使用CTRLALTL进行代码格式化,同时设置了提交的时候进行代码重排和格式化。突然有一天,格式化代码之后发现跟仓库的差异文件几百个,吓死。。。 当然…

代码开发中VO,BO,PO,DO,DTO是什么

代码开发中VO,BO,PO,DO,DTO是什么 MVC的简单定义: M层负责与数据库打交道; C层负责业务逻辑的编写; V层负责给用户展示(针对于前后端不分离的项目,不分离项目那种编写…

一、微机保护装置的典型结构

微机型保护装置实质上是一种依靠单片微机智能地实现保护功能的工业控制装置。一般典型的微机保护结构是由五个部分构成的,即信号输入电路、单片微机系统、人机接口部分、输出通道回路及电源部分,如图1-l所示。 (一)信号…

多线程之基础

写在前面 本文看下多线程基础相关内容。 1:线程基础分析 1.1:摩尔定律失效 戈登.摩尔,英特尔公司的创始人之一,其发现了一个计算机的发展规律,即,处理器的性能每24个月就会翻一倍,这就是摩尔…

Vintage的变体与解读应用

Vintage在风险管理中有很多变体,通常分为以下四类: 1.根据选取切片数据时间不一样,可划分为Month end(月末)与Cycle end(期末)两种。 说明: **Month end:**选取切片数…

基于自适应高斯混合的稀疏注释语义分割

文章目录 Sparsely Annotated Semantic Segmentation with Adaptive Gaussian Mixtures摘要本文方法GMM FormulationTraining with AGMM 实验结果 Sparsely Annotated Semantic Segmentation with Adaptive Gaussian Mixtures 摘要 稀疏注释语义分割(SASS&#xf…

给图片添加水印的最简单方法

给图片添加水印的最简单方法在数字化时代,图片广泛应用于社交媒体、网站、电商平台等各种场景中。然而,由于互联网分享的便捷性,图片的盗用问题也越来越严重。为了保护图片版权,给图片添加水印已经成为一个非常必要和重要的步骤。…

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

近年来,随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升,助力开发者一站式快速搭建文生图、对话等热门场景应用,阿里云机器学习平台PAI特推出AIGC加油包,为广大开发者加油助力激发AIGC潜能&#xff0c…

OJ管理员如何进行添加题目

OJ系统简介 Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C) 源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提…

手把手教你进行Mysql条件查询操作

关注“Java架构栈”微信公众号,回复暗号【Java面试题】即可获取大厂面试题 从今天开始,健哥会带各位小伙伴开始学习数据库技术,这是Java开发中必不可少的一部分内容,也是非常重要的技术。本系列教程由浅入深,全面讲解数…

CentOS 停服倒计时,如何打造安全好用的 Linux 系统?

导读近年来,操作系统在国内的讨论极其热烈,也备受各方关注,操作系统在开发者圈中的重要性越来越高。毋庸置疑,对于众多的开发者来说,选择合适的操作系统对于开发效率、代码质量和个人发展都有着非常重要的影响。CSDN 作…

【Protobuf速成指南】oneof类型的使用

文章目录 2.3 oneof 类型一、基本认识二、 3.2 oneof相关函数三、Contact2.3 改写 2.3 oneof 类型 本系列文章将通过对通讯录项目的不断完善,带大家由浅入深的学习Protobuf的使用。这是Contacts的2.3版本,在这篇文章中将带大家学习Protobuf的 oneof 语关…

医院监控4大难点如何破解?这个方法太顶了

在医院环境中,许多重要的设备对于病人的诊断、治疗和监护至关重要。为了确保这些设备的正常运行和安全性,动环监控系统可以发挥关键作用。 客户案例 四川某大型综合医院引入了动环监控系统来监控其重要设备,如手术室设备、监护设备和医疗影像…

【Android自动化测试】Ui Automator技术(以对QQ软件自动发说说为例)

文章目录 一、引言二、了解(Android官方文档)1、UiDevice 类2、UI Automator API3、UI Automator 查看器 三、使用1、依赖2、代码 一、引言 描述:UI Automator 是一个界面测试框架,适用于整个系统上以及多个已安装应用间的跨应用…

使用Unity开发一个游戏类型的区块链 [独立区块链]

Arouse Blockchain [Unity独立区块链] 这是一个学习性质的项目,使用了Unity进行独立区块链游戏的开发。使用此项目,将默认你有一定的Unity基础,如果你是Unity小白,可以先学习Unity,B站有大量的教材。 内容列表 项目的状…

【RV1126】按键中断--使用输入子系统事件方式

文章目录 选择GPIO修改设备树修改驱动源码probe:增加外部中断以及定时器服务函数。命令行测试中断确定按键的输入子系统的event使用hexdump命令测试按键实际效果 测试应用程序完整的驱动代码 我使用的是荣品的pro-rv1126。 选择GPIO 结合原理图 决定使用UART1接口 …

SIFT算法分析

引言 尺度不变特征变换(SITF)是传统机器学习算法当中比较难的一个算法,步骤也相对其它传统机器学习算法要更多一些。 使用场景 以上是一个图像拼接的过程,两张图像拼接成一张图,有时候由于镜头限制,不能一…

基于Google breakpad编译构建和使用案例

Googlepad是一款用于程序崩溃时自动生成转储文件(.dmp)的可跨平台开源库。 1.Googlepad代码下载地址: git clone https://chromium.googlesource.com/breakpad/breakpad 如果翻不了墙可以在gitee上下载breakpad模块。 2.Googlepad采用gyp来…

C语言之实用调试技巧(2)

如何写出好(易于调试)的代码 优秀的代码: 1. 代码运行正常 2. bug很少 3. 效率高 4. 可读性高 5. 可维护性高 6. 注释清晰 7. 文档齐全 常见的 coding 技巧: 1. 使用assert 2. 尽量使用const 3. 养成良好的编码风格 4. …