【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点
Pre-trained Language Models及其各种微调模型的实现细节和特点
- 1. Pre-trained Language Models
- 2. semi-supervised Learning
- 3. zero-shot
- 4. Parameter-Efficient Fine-Tuning
- 4.1 含义:
- 4.2 实现方式:
- 5. LoRA
- 5.1 LoRA 的主要特点:
- 5.2 LoRA 的实现方式:
- 6. LoRA 和Adaptor 的优缺点对比
- 6.1 LoRA(Low-Rank Adaptation)
- 6.2 Adapter(适配器)
- 6.3 综合对比:
- 7. Prefix Tuning
- 8. soft prompting 微调方式
- 9. 四种微调对比
- 参数高效微调方法
- 概述
- 方法
- 对比表格
- 结论
- 10. early Exit
- 11. summary
1. Pre-trained Language Models





























2. semi-supervised Learning






3. zero-shot






PLMs 通常指的是 “Prompt Learning Models”,即提示学习模型。这类模型在自然语言处理(NLP)中使用,特别是在预训练语言模型的基础上,通过引入提示(prompts)来改善模型对特定任务的理解和执行能力。以下是一些关于 PLMs 的特点:
-
提示(Prompt):
- 提示是一段文本,用来引导语言模型以特定方式回答问题或执行任务。
-
灵活性:
- PLMs 通过设计不同的提示,可以灵活地应用于各种不同的任务,而无需对模型进行大量的任务特定训练。
-
任务适应性:
- 通过精心设计的提示,PLMs 能够适应不同的 NLP 任务,如文本分类、问答、摘要等。
-
简洁性:
- 提示通常是简短的,它们简洁地指示模型需要执行的任务类型或所需的信息格式。
-
低资源消耗:
- 相比于为每个任务训练一个独立的模型,PLMs 通过复用预训练模型并添加少量的提示,可以减少计算资源和数据的需求。
-
易于实现:
- PLMs 相对容易实现,因为它们通常只需要在预训练模型的基础上进行轻微的调整。
-
可解释性:
- 由于提示是显式的文本,PLMs 相对于黑盒模型可能提供更好的可解释性。
-
上下文融合:
- PLMs 通过提示将输入文本与任务需求结合起来,使得模型能够更好地理解上下文信息。
-
微调能力:
- 尽管 PLMs 主要依赖预训练模型的能力,但在某些情况下,也可以对模型进行微调以进一步提高性能。
-
多样性:
- 提示的设计可以非常多样,包括简单的模板、问题形式、指令性语句等。
PLMs 是一种利用预训练语言模型潜力的有效方法,特别是在资源受限或需要快速适应新任务的场景下。然而,PLMs 的性能很大程度上依赖于提示的设计,这可能需要一定的经验和创造力。此外,PLMs 可能不如针对特定任务训练的模型那样强大,但它们提供了一种快速、灵活的解决方案。




4. Parameter-Efficient Fine-Tuning
Parameter-Efficient Fine-Tuning(参数高效微调)是一种微调预训练模型的技术,旨在在保持大部分预训练参数不变的同时,对模型进行特定任务的适应性调整。这种方法的目的是减少训练资源的消耗,同时保持或提升模型在特定任务上的性能。以下是 Parameter-Efficient Fine-Tuning 的含义和实现方式:
4.1 含义:
-
参数效率:
- 通过只调整模型中一小部分参数,而不是整个模型,来减少所需的训练时间和计算资源。
-
微调:
- 利用预训练模型在特定任务上的微调,以学习任务特定的特征和模式。
-
保留预训练知识:
- 通过微调少量参数,保留模型在预训练阶段学到的通用知识。
-
适应性:
- 使模型能够适应新任务,即使这些任务与预训练任务不同。
4.2 实现方式:
-
选择性微调:
- 只微调模型的某些层或组件,如顶层或特定层的输出层,而不是整个网络。
-
适配器层(Adapter Layers):
- 在模型的某些层中引入适配器层,这些层只包含少量参数,用于调整模型的输出以适应特定任务。
-
虚拟参数:
- 引入虚拟参数,如可学习的权重或偏差项,它们与模型的原始参数相乘,以微调模型的行为。
-
输入/输出调整:
- 调整模型的输入或输出表示,以更好地适应特定任务的需求。
-
任务特定的嵌入:
- 为特定任务添加任务特定的嵌入层,这些嵌入层可以与预训练模型的嵌入层一起工作。
-
多任务学习:
- 通过共享预训练模型的大部分参数,同时训练模型在多个任务上的性能。
-
正则化技术:
- 使用正则化技术,如 Dropout 或权重衰减,以防止在微调过程中对预训练知识的过度拟合。
-
数据效率:
- 使用迁移学习技术,如少量样本学习或零样本学习,以减少对大量标注数据的需求。
-
逐步微调:
- 逐步解冻和微调模型的层,从与任务最相关的层开始,逐渐向更深层次扩展。
-
元学习:
- 利用元学习技术,使模型能够快速适应新任务,即使只有少量的标注数据。
Parameter-Efficient Fine-Tuning 是一种在资源受限或需要快速适应新任务时非常有用的技术。通过只调整模型的一小部分,它可以显著减少训练时间和资源消耗,同时保持预训练模型的通用性和强大性能。





如何实现高效微调: 采用Adapter模型,长什么样子呢?看下图!





5. LoRA
LoRA,全称为 Low-Rank Adaptation,是一种微调预训练模型的技术,它通过在模型的权重矩阵中引入低秩结构来进行参数高效的调整。这种方法旨在在不显著增加模型参数的情况下,使预训练模型更好地适应特定任务。
5.1 LoRA 的主要特点:
-
低秩结构:
- 在模型的权重矩阵中引入低秩矩阵,这些矩阵具有较少的参数,可以高效地调整模型的行为。
-
参数效率:
- 相比于直接在所有权重上进行微调,LoRA 只调整低秩矩阵的参数,从而减少了参数的数量。
-
保留预训练知识:
- 通过在现有权重上添加低秩矩阵的乘积,LoRA 保留了预训练模型的大部分知识。
-
灵活性:
- LoRA 可以应用于不同的模型架构和任务,具有很好的通用性。
-
易于实现:
- LoRA 的实现相对简单,可以很容易地集成到现有的训练流程中。
5.2 LoRA 的实现方式:
-
选择权重矩阵:
- 确定在哪些权重矩阵上应用 LoRA,通常是模型中较大的权重矩阵。
-
引入低秩分解:
- 对于选定的权重矩阵 ( W ),引入两个较小的矩阵 ( U ) 和 ( V ),使得 W ′ = W + U V ⊤ W' = W + UV^\top W′=W+UV⊤。
-
训练低秩矩阵:
- 在训练过程中,只更新矩阵 ( U ) 和 ( V ) 的参数,而保持原始权重 ( W ) 不变。
-
反向传播:
- 在反向传播时,计算 ( UV^\top ) 对损失函数的梯度,并更新 ( U ) 和 ( V )。
-
微调策略:
- 可以采用不同的微调策略,如只微调模型的某些层,或者逐步解冻和微调模型的层。
-
正则化:
- 应用正则化技术,如权重衰减,以防止过拟合。
-
模型评估:
- 在验证集上评估 LoRA 调整后的模型性能,确保微调后的模型在特定任务上表现良好。
LoRA 是一种有效的微调技术,尤其适用于大型预训练模型,因为它可以在不显著增加参数数量的情况下,提高模型对特定任务的适应性。这种方法在资源受限或需要快速部署的场景下特别有用。





6. LoRA 和Adaptor 的优缺点对比
LoRA(Low-Rank Adaptation)和Adapter(适配器)都是微调预训练模型的技术,它们通过引入额外的参数来调整模型的行为,以适应特定的任务。尽管它们的目标相似,但在实现和效果上存在一些差异。以下是LoRA和Adapter的优缺点对比:
6.1 LoRA(Low-Rank Adaptation)
优点:
- 参数效率:LoRA通过在权重矩阵中引入低秩结构,只增加少量参数,从而实现参数高效的微调。
- 保留预训练知识:通过在现有权重上添加低秩矩阵的乘积,LoRA保留了预训练模型的大部分知识。
- 灵活性:可以应用于不同的模型架构和任务,具有很好的通用性。
- 易于实现:LoRA的实现相对简单,可以很容易地集成到现有的训练流程中。
缺点:
- 低秩限制:低秩结构可能限制了模型调整的复杂性,对于某些任务可能不够灵活。
- 超参数选择:需要选择合适的秩和正则化参数,这可能需要额外的调整和实验。
6.2 Adapter(适配器)
优点:
- 模块化:Adapter模块是独立的,可以轻松地插入到模型的任何位置,提供高度的灵活性。
- 任务定制:可以为不同的任务定制不同的Adapter模块,实现更精细的控制。
- 易于集成:Adapter模块设计为与现有模型架构兼容,易于集成和使用。
- 可扩展性:可以根据需要添加多个Adapter模块,以适应更复杂的任务。
缺点:
- 参数数量:相比于LoRA,Adapter可能会引入更多的参数,尤其是在使用多个模块时。
- 设计复杂性:需要精心设计Adapter模块的结构和参数,以确保它们能够有效地调整模型的行为。
- 超参数调整:可能需要调整额外的超参数,如模块大小和数量,这可能需要额外的实验和调整。
6.3 综合对比:
- 参数效率:LoRA通常更参数高效,因为它只引入少量的低秩参数。Adapter可能会引入更多的参数,尤其是当使用多个模块时。
- 灵活性和定制性:Adapter提供了更高的灵活性和定制性,可以为不同的任务设计不同的模块。LoRA虽然通用,但在任务特定的调整方面可能不如Adapter灵活。
- 实现和集成:LoRA和Adapter都相对容易实现和集成,但Adapter可能需要更多的设计工作来确保模块的有效性。
- 性能:两者都可以提高预训练模型在特定任务上的性能,但具体效果可能取决于任务的复杂性和适配器/LoRA模块的设计。
选择LoRA还是Adapter取决于具体的应用场景、任务需求、资源限制和性能目标。在某些情况下,这两种技术也可以结合使用,以实现更优的微调效果。
7. Prefix Tuning

原始的 版本


prefix tuning 之后的效果:

8. soft prompting 微调方式



9. 四种微调对比
参数高效微调方法
概述
参数高效微调方法显著减少了模型适应特定任务所需的任务特定参数。这些方法特别适用于在不需要重新训练整个模型的情况下,将大型预训练模型适配到特定任务。以下是四种主要微调方法的总结:Adapter、LoRA、Prefix Tuning 和 Soft Prompt。
方法
-
Adapter
- 任务特定参数: (\Theta(d_{\text{model}} r L))
- 可训练百分比: < 5%
- 示意图:
- Adapter 在预训练模型层之间添加小型神经网络模块。
- 添加的模块参数 (r) 表示降维参数。
- 优点:
- 显著减少任务特定参数数量。
- 对许多任务高效且有效。
- 缺点:
- 可能引入额外的推理延迟。
- 适用模型: 大型预训练语言模型。
- 使用条件: 当需要在有限计算资源下进行微调时使用。
-
LoRA(低秩适应)
- 任务特定参数: (\Theta(d_{\text{model}} r L))
- 可训练百分比: < 0.1%
- 示意图:
- LoRA 在预训练模型层中插入低秩矩阵。
- 通过学习低秩更新矩阵来修改原始权重矩阵。
- 优点:
- 极其参数高效。
- 对模型性能影响最小。
- 缺点:
- 集成到现有架构中复杂性较高。
- 适用模型: 基于Transformer的架构。
- 使用条件: 在参数效率至关重要的场景下理想。
-
Prefix Tuning
- 任务特定参数: (\Theta(d_{\text{model}} n L))
- 可训练百分比: < 0.1%
- 示意图:
- Prefix Tuning 在每层的输入序列前添加可训练的连续向量(前缀)。
- 前缀长度 (n) 决定参数数量。
- 优点:
- 在控制任务特定修改方面高度灵活。
- 不修改原始模型参数。
- 缺点:
- 需要仔细调整前缀长度 (n)。
- 适用模型: 任意序列到序列模型。
- 使用条件: 需要任务特定定制而不改变核心模型时使用。
-
Soft Prompt
- 任务特定参数: (\Theta(d_{\text{model}} n))
- 可训练百分比: < 0.05%
- 示意图:
- Soft Prompts 通过学习连续的提示向量,前置于输入序列之前。
- 前缀长度 (n) 控制任务特定适应的程度。
- 优点:
- 极其轻量且高效。
- 对模型架构的改变最小。
- 缺点:
- 适应复杂任务的能力有限。
- 适用模型: 任意预训练语言模型。
- 使用条件: 最适合任务特定数据有限或需要最小化模型架构变化时。
对比表格

结论
每种微调方法在参数数量、可训练性和集成复杂性之间有不同的权衡。方法的选择取决于任务的具体要求、可用的计算资源和使用的预训练模型架构。



10. early Exit




11. summary


相关文章:
【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点
Pre-trained Language Models及其各种微调模型的实现细节和特点 1. Pre-trained Language Models2. semi-supervised Learning3. zero-shot4. Parameter-Efficient Fine-Tuning4.1 含义:4.2 实现方式: 5. LoRA5.1 LoRA 的主要特点:5.2 LoRA 的…...
YARN单机和集群环境部署教程
目录 一、YARN 单机环境部署1. 环境准备2. 安装 Java3. 下载并安装 Hadoop4. 配置环境变量5. 配置 Hadoop配置 hadoop-env.sh配置 core-site.xml配置 hdfs-site.xml配置 yarn-site.xml配置 mapred-site.xml 6. 格式化 HDFS7. 启动 Hadoop 和 YARN8. 验证 YARN9. 运行一个简单的…...
Android SurfaceFlinger——Vsync信号发送(五十二)
通过上一篇文章我们创建了一个 EventThread 线程,并且它持有了 SurfaceFlinger 中 resyncWithRateLimit() 方法的指针。这里我们主要来看一下 EventThread 对信号的处理。 一、发送Vsync信号 当 SurfaceFlinger 执行完 queueBuffer() 方法之后,通过 onFrameAvailable 又会回…...
零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页
简介: 小李哥从今天开始将开启全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,让大家0基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构。 我将每天介绍一个基于亚马逊云…...
YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式
作者:CSDN _养乐多_ 本文将介绍如何使用 labelme 进行图片数据标签制作的方法,并将标签的格式从 JSON 格式转换为 YOLO 格式。 文章目录 一、安装labelme二、使用流程三、json格式转为YOLO格式四、按比例划分数据集(训练、验证、测试&#…...
论文解读(15)-UrbanGPT
加油,这一篇也是感受一下大语言模型的力量! 原文: UrbanGPT: Spatio-Temporal Large Language Models UrbanGPT: Spatio-Temporal Large Language Models (arxiv.org) 参考: 时空预测与大语言模型的奇妙碰撞!UrbanG…...
大数据湖体系规划与建设方案(51页PPT)
方案介绍: 大数据湖通过集中存储各种类型的数据(包括结构化、半结构化和非结构化数据),提供了更加灵活、可扩展的数据处理和分析能力。其核心理念是“存储一切,分析一切,创建所需”,即将所有数…...
8月最新ChatGPT系统源码SparkAi系统,支持AI换脸+智能体GPTs应用+AI绘画+AI视频+文档分析
一、文章序言 人工智能技术正在快速发展,AI语言模型、AI绘画和AI视频已经在多个领域得到了广泛应用。这些技术不仅在科技创新方面表现出色,还在艺术创作、内容生产和商业应用中展示出巨大的潜力。 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的…...
Linux知识复习第3期
目录 网络管理 (1)查看IP信息: (2)配置临时生效的网络连接 (3)修改配置文件配置网络连接(network服务) (4)shell脚本批量IP设置 网络管理 Linux网络管理-CSDN博客 (1)查看IP信息: route -n ip addr (2)配置临时生效的网络连接 ip -4…...
【独家原创】基于NRBO-Transformer多特征分类预测【24年新算法】 (多输入单输出)Matlab代码
【独家原创】NRBO-Transformer分类 Matlab代码 基于牛顿拉夫逊优化算法优化Transformer的数据分类预测,Matlab代码,可直接运行,适合小白新手 NRBO优化的超参数为:自注意力机制中的头数、正则化系数、初始化学习率 1.程序已经调试…...
Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released
Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released 一、重大改变基于Kafka3.8构建 二、新功能和改进JDBC SinkDebezium ServerGoogle SpannerVitess Debezium 3.0.0.Alpha2 版本包含许多新功能和改进,包括基于 Kafka 3.8 构建、JDBC 接收器连接器的…...
SumatraPDF暗黑模式以及如何还原快捷键
快捷键 英文输入模式下直接按 i 即可反色 添加标注 选中文字,右键...
LeetCode Medium|【300. 最长递增子序列】
力扣题目链接 本题有一个简单的解法是动态规划,时间复杂度 O(n^2),笔者在之前曾做过相关记录:300.最长递增子序列 现在我们来讨论 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))的解法 局部最优:如果我们希望上升子序列尽可能的长&a…...
jenkins自动化构建docker镜像并上传至harbor仓库
1、插件下载 首先进入jenkins之后需要现在“Maven”、“GitLab”、“Jdk”、“SSH”、“Git”的相关插件,这里不再赘述,需要什么插件直接安装即可 搜索对应插件后选择直接安装即可 2、系统全局配置 2.1 Maven配置 配置maven安装的相应的setting文件 …...
Java高级Day23-HashMap
74.HashMap Map接口常用实现类:HashMap、Hashtable和Properties HashMap是Map接口使用频率最高的实现类 HashMap是以key-value对的方式来存储数据 key不能重复,但是值可以重复,允许使用null健和null值 如果添加相同的key,会覆…...
【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)
第四届电气工程与计算机技术国际学术会议(ICEECT2024) 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举…...
Spring boot tomcat使用自定义线程池监控线程数量告警
Spring boot tocmat 使用自定义线程池 线程池 接近最大线程数量 警戒值告警 修改tomcat线程池中线程名字 配置文件上代码 server:port: 9898servlet:context-path: /testtomcat:connection-timeout: 5000max-connections: 5accept-count: 5 tomcat_thread_max_number_warn:…...
K8S子节点加入主节点访问MaterAPI报错:Unauthorized 401
问题场景: 本地测试由于之前安装过K8S今天重启无法使用了,于是重新安装了一下,子节点加入主节点报错: I0808 23:13:04.299356 19180 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H …...
C++ Poco服务端框架中JSON的使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、JSON是什么?二、使用步骤总结 前言 上面一篇文章教你学会了Poco开发服务端应用,这个教程教会你使用JSON。一般传JSON的时候都是POS…...
leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝
题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图,每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径,但这条路径最多只能经过 k 个中转站。你需要返回这…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
