【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点

news2024/12/24 20:06:44

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 的特点:

  1. 提示(Prompt)

    • 提示是一段文本,用来引导语言模型以特定方式回答问题或执行任务。
  2. 灵活性

    • PLMs 通过设计不同的提示,可以灵活地应用于各种不同的任务,而无需对模型进行大量的任务特定训练。
  3. 任务适应性

    • 通过精心设计的提示,PLMs 能够适应不同的 NLP 任务,如文本分类、问答、摘要等。
  4. 简洁性

    • 提示通常是简短的,它们简洁地指示模型需要执行的任务类型或所需的信息格式。
  5. 低资源消耗

    • 相比于为每个任务训练一个独立的模型,PLMs 通过复用预训练模型并添加少量的提示,可以减少计算资源和数据的需求。
  6. 易于实现

    • PLMs 相对容易实现,因为它们通常只需要在预训练模型的基础上进行轻微的调整。
  7. 可解释性

    • 由于提示是显式的文本,PLMs 相对于黑盒模型可能提供更好的可解释性。
  8. 上下文融合

    • PLMs 通过提示将输入文本与任务需求结合起来,使得模型能够更好地理解上下文信息。
  9. 微调能力

    • 尽管 PLMs 主要依赖预训练模型的能力,但在某些情况下,也可以对模型进行微调以进一步提高性能。
  10. 多样性

    • 提示的设计可以非常多样,包括简单的模板、问题形式、指令性语句等。

PLMs 是一种利用预训练语言模型潜力的有效方法,特别是在资源受限或需要快速适应新任务的场景下。然而,PLMs 的性能很大程度上依赖于提示的设计,这可能需要一定的经验和创造力。此外,PLMs 可能不如针对特定任务训练的模型那样强大,但它们提供了一种快速、灵活的解决方案。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. Parameter-Efficient Fine-Tuning

Parameter-Efficient Fine-Tuning(参数高效微调)是一种微调预训练模型的技术,旨在在保持大部分预训练参数不变的同时,对模型进行特定任务的适应性调整。这种方法的目的是减少训练资源的消耗,同时保持或提升模型在特定任务上的性能。以下是 Parameter-Efficient Fine-Tuning 的含义和实现方式:

4.1 含义:
  1. 参数效率

    • 通过只调整模型中一小部分参数,而不是整个模型,来减少所需的训练时间和计算资源。
  2. 微调

    • 利用预训练模型在特定任务上的微调,以学习任务特定的特征和模式。
  3. 保留预训练知识

    • 通过微调少量参数,保留模型在预训练阶段学到的通用知识。
  4. 适应性

    • 使模型能够适应新任务,即使这些任务与预训练任务不同。
4.2 实现方式:
  1. 选择性微调

    • 只微调模型的某些层或组件,如顶层或特定层的输出层,而不是整个网络。
  2. 适配器层(Adapter Layers)

    • 在模型的某些层中引入适配器层,这些层只包含少量参数,用于调整模型的输出以适应特定任务。
  3. 虚拟参数

    • 引入虚拟参数,如可学习的权重或偏差项,它们与模型的原始参数相乘,以微调模型的行为。
  4. 输入/输出调整

    • 调整模型的输入或输出表示,以更好地适应特定任务的需求。
  5. 任务特定的嵌入

    • 为特定任务添加任务特定的嵌入层,这些嵌入层可以与预训练模型的嵌入层一起工作。
  6. 多任务学习

    • 通过共享预训练模型的大部分参数,同时训练模型在多个任务上的性能。
  7. 正则化技术

    • 使用正则化技术,如 Dropout 或权重衰减,以防止在微调过程中对预训练知识的过度拟合。
  8. 数据效率

    • 使用迁移学习技术,如少量样本学习或零样本学习,以减少对大量标注数据的需求。
  9. 逐步微调

    • 逐步解冻和微调模型的层,从与任务最相关的层开始,逐渐向更深层次扩展。
  10. 元学习

    • 利用元学习技术,使模型能够快速适应新任务,即使只有少量的标注数据。

Parameter-Efficient Fine-Tuning 是一种在资源受限或需要快速适应新任务时非常有用的技术。通过只调整模型的一小部分,它可以显著减少训练时间和资源消耗,同时保持预训练模型的通用性和强大性能。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何实现高效微调: 采用Adapter模型,长什么样子呢?看下图!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. LoRA

LoRA,全称为 Low-Rank Adaptation,是一种微调预训练模型的技术,它通过在模型的权重矩阵中引入低秩结构来进行参数高效的调整。这种方法旨在在不显著增加模型参数的情况下,使预训练模型更好地适应特定任务。

5.1 LoRA 的主要特点:
  1. 低秩结构

    • 在模型的权重矩阵中引入低秩矩阵,这些矩阵具有较少的参数,可以高效地调整模型的行为。
  2. 参数效率

    • 相比于直接在所有权重上进行微调,LoRA 只调整低秩矩阵的参数,从而减少了参数的数量。
  3. 保留预训练知识

    • 通过在现有权重上添加低秩矩阵的乘积,LoRA 保留了预训练模型的大部分知识。
  4. 灵活性

    • LoRA 可以应用于不同的模型架构和任务,具有很好的通用性。
  5. 易于实现

    • LoRA 的实现相对简单,可以很容易地集成到现有的训练流程中。
5.2 LoRA 的实现方式:
  1. 选择权重矩阵

    • 确定在哪些权重矩阵上应用 LoRA,通常是模型中较大的权重矩阵。
  2. 引入低秩分解

    • 对于选定的权重矩阵 ( W ),引入两个较小的矩阵 ( U ) 和 ( V ),使得 W ′ = W + U V ⊤ W' = W + UV^\top W=W+UV
  3. 训练低秩矩阵

    • 在训练过程中,只更新矩阵 ( U ) 和 ( V ) 的参数,而保持原始权重 ( W ) 不变。
  4. 反向传播

    • 在反向传播时,计算 ( UV^\top ) 对损失函数的梯度,并更新 ( U ) 和 ( V )。
  5. 微调策略

    • 可以采用不同的微调策略,如只微调模型的某些层,或者逐步解冻和微调模型的层。
  6. 正则化

    • 应用正则化技术,如权重衰减,以防止过拟合。
  7. 模型评估

    • 在验证集上评估 LoRA 调整后的模型性能,确保微调后的模型在特定任务上表现良好。

LoRA 是一种有效的微调技术,尤其适用于大型预训练模型,因为它可以在不显著增加参数数量的情况下,提高模型对特定任务的适应性。这种方法在资源受限或需要快速部署的场景下特别有用。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6. LoRA 和Adaptor 的优缺点对比

LoRA(Low-Rank Adaptation)和Adapter(适配器)都是微调预训练模型的技术,它们通过引入额外的参数来调整模型的行为,以适应特定的任务。尽管它们的目标相似,但在实现和效果上存在一些差异。以下是LoRA和Adapter的优缺点对比:

6.1 LoRA(Low-Rank Adaptation)

优点

  1. 参数效率:LoRA通过在权重矩阵中引入低秩结构,只增加少量参数,从而实现参数高效的微调。
  2. 保留预训练知识:通过在现有权重上添加低秩矩阵的乘积,LoRA保留了预训练模型的大部分知识。
  3. 灵活性:可以应用于不同的模型架构和任务,具有很好的通用性。
  4. 易于实现:LoRA的实现相对简单,可以很容易地集成到现有的训练流程中。

缺点

  1. 低秩限制:低秩结构可能限制了模型调整的复杂性,对于某些任务可能不够灵活。
  2. 超参数选择:需要选择合适的秩和正则化参数,这可能需要额外的调整和实验。
6.2 Adapter(适配器)

优点

  1. 模块化:Adapter模块是独立的,可以轻松地插入到模型的任何位置,提供高度的灵活性。
  2. 任务定制:可以为不同的任务定制不同的Adapter模块,实现更精细的控制。
  3. 易于集成:Adapter模块设计为与现有模型架构兼容,易于集成和使用。
  4. 可扩展性:可以根据需要添加多个Adapter模块,以适应更复杂的任务。

缺点

  1. 参数数量:相比于LoRA,Adapter可能会引入更多的参数,尤其是在使用多个模块时。
  2. 设计复杂性:需要精心设计Adapter模块的结构和参数,以确保它们能够有效地调整模型的行为。
  3. 超参数调整:可能需要调整额外的超参数,如模块大小和数量,这可能需要额外的实验和调整。
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。

方法
  1. Adapter

    • 任务特定参数: (\Theta(d_{\text{model}} r L))
    • 可训练百分比: < 5%
    • 示意图:
      • Adapter 在预训练模型层之间添加小型神经网络模块。
      • 添加的模块参数 (r) 表示降维参数。
    • 优点:
      • 显著减少任务特定参数数量。
      • 对许多任务高效且有效。
    • 缺点:
      • 可能引入额外的推理延迟。
    • 适用模型: 大型预训练语言模型。
    • 使用条件: 当需要在有限计算资源下进行微调时使用。
  2. LoRA(低秩适应)

    • 任务特定参数: (\Theta(d_{\text{model}} r L))
    • 可训练百分比: < 0.1%
    • 示意图:
      • LoRA 在预训练模型层中插入低秩矩阵。
      • 通过学习低秩更新矩阵来修改原始权重矩阵。
    • 优点:
      • 极其参数高效。
      • 对模型性能影响最小。
    • 缺点:
      • 集成到现有架构中复杂性较高。
    • 适用模型: 基于Transformer的架构。
    • 使用条件: 在参数效率至关重要的场景下理想。
  3. Prefix Tuning

    • 任务特定参数: (\Theta(d_{\text{model}} n L))
    • 可训练百分比: < 0.1%
    • 示意图:
      • Prefix Tuning 在每层的输入序列前添加可训练的连续向量(前缀)。
      • 前缀长度 (n) 决定参数数量。
    • 优点:
      • 在控制任务特定修改方面高度灵活。
      • 不修改原始模型参数。
    • 缺点:
      • 需要仔细调整前缀长度 (n)。
    • 适用模型: 任意序列到序列模型。
    • 使用条件: 需要任务特定定制而不改变核心模型时使用。
  4. Soft Prompt

    • 任务特定参数: (\Theta(d_{\text{model}} n))
    • 可训练百分比: < 0.05%
    • 示意图:
      • Soft Prompts 通过学习连续的提示向量,前置于输入序列之前。
      • 前缀长度 (n) 控制任务特定适应的程度。
    • 优点:
      • 极其轻量且高效。
      • 对模型架构的改变最小。
    • 缺点:
      • 适应复杂任务的能力有限。
    • 适用模型: 任意预训练语言模型。
    • 使用条件: 最适合任务特定数据有限或需要最小化模型架构变化时。
对比表格

在这里插入图片描述

结论

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

在这里插入图片描述
在这里插入图片描述

10. early Exit

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11. summary

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【QT 5 QT 6 构建工具qmake-cmake-和-软件编译器MSVCxxxvs MinGWxxx说明】

【QT 5报错&#xff1a;/xxx/: error: ‘class Ui::frmMain’ has no member named ‘xxx’-和-软件编译器MSVCxxxvs MinGWxxx说明】 1、前言2 、qt 中 Qmake CMake 和 QBS1-qmake2-Cmake3-QBS4-官网一些说法5-各自特点 3、软件编译套件1-Desktop Qt 6.7.2 llvm-mingw 64-bit2-…

SpringBoot排除默认日志框架

默认用的logback application.properties中的配置无需改变,自动装配会根据条件(哪个日志的.class是否存在) 进行切换 只要切换日志配置文件就好 比如原来使用的logback-spring.xml换成log4j2-spring.xml 日志文件网上找找

Flink-DataWorks第三部分:数据集成(第59天)

系列文章目录 2.4 任务配置方式 2.4.1 DataStudio侧离线同步 2.4.1.1 开发流程概览 2.4.1.2 步骤一&#xff1a;新建离线同步节点 2.4.1.3 步骤二&#xff1a;配置同步网络链接 2.4.1.4 步骤三&#xff1a;配置数据来源与去向 2.4.1.5 步骤四&#xff1a;配置字段映射关系 2.4…

C:野指针介绍(定义、危害、规避)以及野指针与空指针的区分

目录 1、野指针 1.1 野指针的成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 1.2 野指针的危害 1.3 如何规避野指针 1. 指针初始化 2. 小心指针越界 3.指针变量不使用就及时赋上NULL 4. 指针使用前检查是否是空指针 5. 避免返回局部变量的地址 1.4 区…

微信小程序【五】摇骰子

摇骰子 一、dice.js二、dice.json三、dice.wxml四、dice.wxss 效果简述&#xff1a;点击设置“骰子个数”&#xff0c;喝一杯前&#xff0c;先摇一摇。 骰子图片命名示例&#xff1a; 1.png、2.png 一、dice.js Page({data: {numDice: 1, // 初始化骰子数diceImages: [],dic…

【iOS多线程(二)】GCD其他方法详解

GCD其他方法 dispatch_semaphore &#xff08;信号量&#xff09;什么是dispatch_semaphore(信号量)?dispatch_semaphore主要的三个方法dispatch_semaphore主要作用线程安全线程同步 dispatch_afterdispatch_time_t 两种形式 GCD 一次性代码&#xff08;只执行一次&#xff09…

电脑维修店的主题源码 简洁wordpress企业主题模版下载

简洁wordpress企业主题&#xff0c;一个简洁的电脑维修店的主题 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89612932 更多资源下载&#xff1a;关注我。

【深度学习】TTS,CosyVoice,推理部署的代码原理讲解分享

文章目录 demo代码加载配置文件speech_tokenizer_v1.onnx(只在zero_shot的时候使用)campplus.onnx(只为了提取说话人音色embedding)`campplus_model` 的作用代码解析具体过程解析总结示意图CosyVoiceFrontEndCosyVoiceModel推理过程总体推理过程推理速度很慢: https://git…

OpenNebula-6.9.80使用介绍

目录 准备&#xff1a;给宿主机添加一块网卡 1. 创建群组 2. 创建用户 3. 创建集群 4. 创建主机 5. 安全组 6. 网络模板 7. 虚拟网络 8. 导入镜像 9. 创建虚拟机模板 10. 实例化虚拟机 11. 卸载磁盘 12. 再次实例化 13. 添加新节点 14. 虚拟机迁移 准备&…

面壁的智能开源 MiniCPM-V 2.6 边缘人工智能多模态功能与 GPT-4V 不相上下

"MiniCPM-V2.6 "是一个边缘多模态人工智能模型&#xff0c;仅拥有 80 亿个参数&#xff0c;却在单图像、多图像和视频理解任务中取得了低于 200 亿个参数的三项 SOTA&#xff08;艺术境界&#xff09;成绩&#xff0c;显著增强了边缘多模态能力&#xff0c;并与 GPT-…

python.tkinter设计标记语言(转译2-html)

TOC 前言 本文只作为笔记记录。 前文我们已经通过TinText渲染器部分和TinML获得了test.tin解释后的标记内容列表。本文&#xff0c;我们将根据这个解释结果将Tin标记转为html文件。 转为html的好处 第一&#xff0c;Tin标记语言作为一个小小小小小项目&#xff0c;光把编写…

34-《球兰》

球兰 球兰&#xff08;学名&#xff1a;Hoya carnosa&#xff08;L.f.&#xff09;R. Br&#xff09;&#xff0c;又名&#xff1a;马骝解、狗舌藤、铁脚板等&#xff0c;马利筋亚科球兰属多年生植物 。攀援灌木&#xff0c;附生于树上或石上&#xff0c;茎节上生气根。分布于云…

单链表-数据结构

一、单链表 1.结构定义 typedef struct LNode {int data;struct LNode* next; }LNode, * LinkList; 2.功能实现 ①创造结点 //创造结点 LNode* NewNode(int x) {struct LNode* ret (LNode*)malloc(sizeof(LNode));ret->data x;ret->next NULL;return ret; } ②插…

TypeError: (0 , _xxx.default) is not a function

1.首先从控制台报错信息看很让人疑惑&#xff0c;好像并没有这个函数&#xff0c;我这里是引入了address.js这个这个文件里面的函数导致的 2. 直接说原因&#xff1a;导入的函数不是default&#xff0c;但使用的时候没有使用"{}" import xxx from yyy 3.直接加上&q…

Golang | Leetcode Golang题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; func minPatches(nums []int, n int) (patches int) {for i, x : 0, 1; x < n; {if i < len(nums) && nums[i] < x {x nums[i]i} else {x * 2patches}}return }

【vulnhub】Matrix:1靶机

靶机安装 下载地址&#xff1a;https://download.vulnhub.com/matrix/Machine_Matrix.zip 运行环境&#xff1a;VirtualBox 信息收集 靶机扫描 netdiscover -i eth0 -r 192.168.7.0/24 端口扫描&#xff0c;开放端口22、80、31337 nmap -A 192.168.7.203 -p- 目录扫描 d…

「C++系列」引用

文章目录 一、引用及定义引用的基本用法注意事项 二、引用与指针1. 定义和初始化2. 语法糖3. 空值4. 数组和函数5. 性能6. 用途 三、引用作为参数/返回值1. 把引用作为函数参数2. 把引用作为函数返回值 四、相关链接 一、引用及定义 在C中&#xff0c;引用&#xff08;Referen…

2025深圳国际户外用品暨跨境电商工厂选品展览会

2025深圳国际户外用品暨跨境电商工厂选品展览会 2025 Shenzhen International Outdoor Products and Cross border E-commerce Factory Selection Exhibition 时间&#xff1a;2025年02月27-3月01日 地点&#xff1a;深圳会展中心&#xff08;福田馆&#xff09; 详询主办方…

地接侠小程序(Taro)兼容IOS系统Bug解决(redux持久化不成功、整个页面会拖动)

在写地接侠小程序的时候就是有考虑过兼容问题的&#xff0c;但是在写的过程中并没有用苹果手机进行调式&#xff0c;一直都是用的自己的安卓手机&#xff0c;一直都是没有问题的&#xff0c;但是毕竟项目需要上线&#xff0c;于是在上线前用苹果手机测试果然出现了预想中的问题…

Leetcode JAVA刷刷站(3)无重复字符的最长子串

一、题目概述 二、思路方向 为了找出给定字符串中不含有重复字符的最长子串的长度&#xff0c;我们可以使用滑动窗口的方法。这种方法通过维护一个窗口&#xff08;或称为子串&#xff09;&#xff0c;并动态地调整窗口的左右边界来找到最长的无重复字符子串。 三、代码实现 …