大模型微调技术 --> IA3

IA3

1.摘要

我们引入了一种名为 ( I A ) 3 (IA)^3 (IA)3 (通过抑制和放大内部激活的注入适配器, Infused Adapter by Inhibiting and Amplifying Inner Activations)的新的PEFT方法,该方法通过学习向量缩放激活,在只引入相对少量的新参数的情况下获得更强的性能。我们还提出了一个基于 T0 模型的简单配方,称为T-Few,可以应用于新任务,而无需针对任务进行调优或修改。我们通过将T-Few应用于 RAFT 基准测试,验证了 T-Few 在完全未见的任务上的有效性,首次实现超人类表现,并超过现有技术 6% 的绝对值。

2.引言

在这里插入图片描述

图1: ( I A ) 3 (IA)^3 (IA)3 的图表 和 T-Few配方中使用的损失项。
左侧:(IA)3引入了学习向量 l k l_k lk l v l_v lv l f f l_{ff} lff,它们分别重新缩放(通过逐元素乘法)注意力机制中的键和值以及位置前馈网络中的内部激活。
右:除了标准的交叉熵损失LLM之外,我们还引入了降低错误输出概率的非似然损失 L U L L_{UL} LUL和将标准 softmax 交叉熵损失应用于所有输出选择的长度归一化对数概率的长度归一化损失LLN。

**上下文学习(ICL):**它通过输入提示示例诱导模型执行下游任务。Few-shot 提示将一小部分输入-目标对转换为(通常)人类可理解的指令和示例,以及需要预测的单个未标记示例。

值得注意的是,ICL不需要基于梯度的训练,因此允许单个模型立即执行各种任务。因此,执行ICL完全依赖于模型在预训练期间学习到的能力。这些特性导致了ICL方法近期的大量关注。

尽管ICL有实际的好处,但它有几个主要的缺点。

首先,每次模型进行预测时,处理所有提示的输入-目标对都会导致大量的计算成本。

其次,与微调相比,ICL通常产生较差的性能。

最后,提示符的确切格式(包括措辞和示例的顺序)对模型的性能会产生重大且不可预测的影响,远远超出了运行间微调的变化。最近的研究也表明,即使提供了不正确的标签,ICL也能表现良好,这引发了ICL到底有多少学习的疑问。

参数高效微调(PEFT):其中通过仅更新少量添加或选择的参数来对预训练的模型进行微调。最近的方法在只更新或添加一小部分(例如0.01%)完整模型参数的情况下,匹配了微调完整模型的性能。此外,某些PEFT方法允许混合任务批次,其中批次中的不同示例被不同地处理,使得PEFT和ICL都适用于多任务模型。

混合任务批次(mixed-task batches)是指在训练或推理过程中,将不同任务的数据混合在同一个批次中进行处理。与传统的单一任务批次相比,混合任务批次可以提高资源利用效率,尤其是在多任务学习(multi-task learning)或需要同时处理多个子任务的情况下。

虽然PEFT的优点解决了微调的一些缺点(与ICL相比),但相对而言,很少有人关注 PEFT 方法在可用的标记数据非常少的情况下是否有效

我们在本文中的主要目标是通过提出一种方法来缩小这一差距——即,一个模型、一个PEFT方法和一组固定的超参数——在只更新模型参数的一小部分的情况下,在新的、看不见的任务上获得强大的性能。

具体来说,我们的方法基于 T0 模型,这是 T5 的一个变体,对提示数据集的多任务混合进行了微调。

此外,我们开发了(IA)3,这是一种PEFT方法,一种通过学习向量将乘以中间激活的 PEFT 方法。(IA)3实现了比全模型微调更强的性能,同时更新的参数减少了10,000倍。

最后,我们展示了在微调之前对(IA)3参数进行预训练的好处。我们的整体配方,我们称之为“T-Few”,表现明显优于ICL(即使是针对16倍大的模型)

3.背景

1.ICL

ICL:旨在通过输入连接和提示的输入目标示例(称为“shots”)以及未标记的查询示例来诱导模型执行任务。

ICL 的主要优点是,它使单个模型能够立即执行许多任务,而无需进行微调。这还支持混合任务批处理,其中一批数据中的不同示例通过使用输入中的不同上下文对应于不同的任务。

尽管有这些优点,但 ICL 在实际应用中也有明显的缺点:

首先,进行预测的成本要高得多,因为模型需要处理所有在上下文中标记的示例。具体来说,忽略Transformer语言模型中自注意操作的二次复杂度(与模型其余部分的成本相比通常很小),处理 k-shot ICL 的 k 个训练样例比单独处理未标记的样例增加了大约 k + 1 倍的计算成本。

类似地,内存成本随着 k 近似地线性增长,尽管在推理过程中,内存成本通常由存储模型的参数主导。

另外,存储给定任务的上下文示例需要少量磁盘存储空间。例如,为一个任务存储 32 个示例,其中每个示例的提示输入和目标长度为 512 个 token,则需要大约 66 kb 的磁盘存储空间(32个 示例× 512个 token × 32位)。

2.PEFT

参数高效微调,已经学了很多了

4.设计 T-Few 配方

鉴于 PEFT 允许模型以相对较小的存储需求和计算成本适应新任务,我们认为 PEFT 是 ICL 的一个有希望的替代方案。因此,我们的目标是开发一种配方,允许模型在具有 有限标记示例 的新任务上获得高精度,同时在推理期间允许混合任务批次,并产生最小的计算和存储成本。

1.非概率训练和长度正则化

对于评估,我们使用等级分类(在3.1节中描述),它取决于模型分配给正确选择的概率以及模型分配给错误选择的概率。为了在训练过程中考虑到这一点,我们考虑添加一个非概率损失:
在这里插入图片描述

这阻碍了模型从不正确的目标序列预测 token,其中,…我们假设添加 L U L L_{UL} LUL 将改善等级分类的结果,因为模型将被训练为将较低的概率分配给不正确的选择,从而提高正确选择排名最高的机会。

2.(IA)3 PEFT

为了与少样本 ICL 进行比较,我们需要一种 PEFT 方法,它具有以下属性:

首先,它必须添加或更新尽可能少的参数,以避免产生存储和内存成本。

其次,在新任务上进行几次训练后,要达到较强的准确率。

最后,它必须允许混合任务批处理,因为这是 ICL 的一种功能。

作为替代方案,我们探索了针对学习向量的模型激活的逐元素乘法(即重新缩放)。

具体地说,我们考虑对形式 l _ _ _ x 的适应,其中 l ∈ R d l∈R^d lRd 是一个特定于任务的学习向量,_ _表示逐元素乘法, x ∈ R T × d x∈R^{T×d} xRT×d 是一个长度为 t 的激活序列。我们使用“广播表示法”,因此第1个条目的 (i, j) 是 l j x i , j l_jx_{i,j} ljxi,j

在初步的实验中,我们发现没有必要为 Transformer 模型中的每一组激活引入一个学习的重新缩放向量

相反,我们发现在自我注意和编码器-解码器注意机制中的键和值以及位置前馈网络的中间激活上引入重新缩放向量就足够了。具体来说,使用Vaswani等人的符号,我们引入了三个学习向量 l k ∈ R d k , l_k∈R^{d_k}, lkRdk, l v ∈ R d v l_v∈R^{d_v} lvRdv, l f f ∈ R d f f l_{ff}∈R^{d_{ff}} lffRdff,它们被引入到注意机制中如下:

s o f t m a x ( Q ( l k ⊙ K T ) d k ) ( l v ⊙ V ) softmax(\frac{Q(l_k ⊙K^T)}{\sqrt d_k})(l_v⊙ V) softmax(d kQ(lkKT))(lvV)

在位置前馈网络中为 ( l f f ⊙ γ ( W 1 x ) ) W 2 (l_{ff}⊙ γ(W_1x))W_2 (lffγ(W1x))W2,其中 γ γ γ为前馈网络的非线性。

我们在每个Transformer层块中引入一组单独的 l k l_k lk l v l_v lv l f f l_{ff} lff向量。这一共增加了 L ( d k + d v + d f f ) L(d_k + d_v + d_{ff}) L(dk+dv+dff) 个新参数在一个 L 层的 Transformer 编码器中 ,还有 L ( 2 d k + 2 d v + d f f ) L(2d_k+2d_v+d_{ff}) L(2dk+2dv+dff) (一个自注意力一个编码器解码器注意力)在 Transformer 解码器中。

l k , l v l_k, l_v lk,lv 被初始化为 1 以便当它们相加时,由模型计算的总函数不会改变。

我们称我们的方法为 ( I A ) 3 (IA)^3 (IA)3 ,它代表“通过抑制和放大内部激活注入适配器”

在这里插入图片描述

图二:在 T0-3B 上使用 L U L L_{UL} LUL L L N L_{LN} LLN 。具有可变参数预算的方法用更大或更小的标记表示更多或更少的参数。
图三:不同 few-shot 学习方法的准确率。T-few 使用 ( I A ) 3 (IA)^3 (IA)3 给 T0,
T0使用 零样本学习,
T5+LM 和 GPT3变体使用 少样本 ICL。
x轴对应推理成本

5.来自GPT(刚看论文的时候,我也没太看明白)

在 IA3 中, l k l_k lk l v l_v lv l f f l_{ff} lff 作为缩放向量,分别对注意力机制中的键(Key)、值(Value)以及前馈网络进行逐元素缩放,它们的作用是对这些部分的输出进行调节,从而对模型在不同任务、输入条件下的表现进行细粒度控制。

具体来说:

  1. l k l_k lk 对键矩阵的缩放
    键矩阵(Key)用于生成注意力分布,影响的是输入序列中每个位置相对于其他位置的重要性。通过对键矩阵进行缩放,IA3 可以动态调整注意力机制如何计算不同位置之间的相关性,从而影响模型对输入信息的理解。
  2. l v l_v lv 对值矩阵的缩放
    值矩阵(Value)决定了注意力分布中"选中"的信息是什么。当模型根据注意力得分确定哪些部分应该受到更多关注时,值矩阵的缩放可以调整最终输出的信息量大小。通过缩放值矩阵,IA3 能够控制注意力机制输出的细节程度,影响模型的生成或分类等任务。
  3. l f f l_{ff} lff 对前馈网络的缩放
    前馈网络部分主要用于在注意力机制后处理特征,通过缩放前馈网络的权重,IA3 可以控制模型的非线性变换能力,从而适应不同任务或输入的需求

为什么对这些矩阵进行缩放有用?

缩放操作的主要作用是通过对注意力机制关键部分的逐元素调整,赋予模型更强的灵活性和任务适应性:

  • 高效微调:相比直接修改完整的权重矩阵,使用缩放向量可以在减少参数更新量的同时,提供足够的表达能力。这意味着模型在适应新任务时不需要完全重新训练,只需更新少量参数就可以适应新场景。
  • 任务敏感性:通过逐元素缩放,IA3 能够对每个任务输入的不同特征进行细粒度控制,增强模型对任务间差异的感知。这在多任务学习或输入分布变化的情况下尤为重要。
  • 减少计算开销:缩放向量的维度远小于完整的矩阵,因此可以显著降低计算开销,同时保持较高的性能。

总之,缩放 l k l_k lk l v l_v lv l f f l_{ff} lff 使模型能以更轻量级的方式灵活调整注意力机制,增强适应不同任务和场景的能力。

6.超参数微调

1.超参数

  1. target_modules(目标层)

    • IA3 最关键的超参数,决定在那些位置注入缩放因子
    • 建议
      • 必选:key_proj(或 q_proj)、value_proj、FFN 中的 up_proj(或 intermediate 层)
      • 可选层:down_proj、out_proj
  2. init_scale(初始化范围)

    • 缩放因子的初始化范围
    • 建议
      • 默认 0
      • 范围:通常 [-0.5, 0.5] 之间
      • 可以考虑使用小的正值(如 0.1)开始
  3. scaling_layer_norm(是否缩放 LayerNorm)

    • 是否在 LayerNorm 后应用缩放
    • 建议:
      • 默认:False
      • 只在特定任务时开启
      • 开启可能带来轻微的性能提升但增加了复杂度
  4. 典型配置示例

    ia3_config = {"target_modules": ["key_proj","value_proj","up_proj"],"init_scale": 0.0,"scaling_layer_norm": False,"modules_to_not_convert": ["lm_head", "embed_tokens"],  # 通常不需要转换的层"fan_in_fan_out": False  # 权重矩阵的转置设置
    }
    

2.具体调参建议

  1. 不同规模模型的配置建议

    • 小型模型(7B以下):
      • 使用全部推荐层
      • 可以考虑更激进的init_scale
    • 中大型模型(7B-70B):
      • 从核心层开始
      • 使用保守的init_scale
    • 超大模型(70B+):
      • 仅使用最必要的层
      • 保持默认init_scale
  2. 模型结构特定建议

    • Dencoder-only 模型
      • 重点关注 self-attention 层
      • 通常不需要 scaling_layer_norm
    • Encoder-decoder 模型:
      • 需要通知考虑 encoder 和 decoder 部分
      • 可能要区别对待交叉注意力层
  3. 训练策略优化

    • 学习率设置 1e-4 ~ 5e-4
      • 使用线性预热预热
      • 考虑使用余弦衰减
    • 优化器选择
      • AdamW 首选
      • 较小的 weight decay (0.01 或 更小)
  4. 最佳实践总结

    • 基础配置建议

      basic_ia3_config = {"target_modules": ["key_proj","value_proj","up_proj"],"init_scale": 0.0
      }
      
    • 进阶配置建议

      advanced_ia3_config = {"target_modules": ["key_proj","value_proj","up_proj","down_proj","out_proj"],"init_scale": 0.1,"scaling_layer_norm": True
      }
      
  5. 常见问题

    • 如果训练不稳定
      • 减小 init_scale
      • 减少 target_modules
      • 增加预热步骤
    • 如果效果不够好
      • 增加 targetmodules
      • 尝试调整 initscale
      • 考虑开启 scaling_layer_norm

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

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

相关文章

Liunx:进程控制

进程终止 三种场景,进程结束结果正确,进程结束不正确,异常终止。 进程的退出码,也就是return,表征着进程运行结果是否正常,return 返回值被父进程接收。return 0表示进程运行结束并且结果正确。他是给用户的…

C++builder中的人工智能(12):了解ELU(Exponential Linear Unit)——人工神经网络中的激活函数

在这篇文章中,我们将解释什么是指数线性单元(ELU),以及如何利用ELU激活函数。通过学习这些知识,你将能够使用C软件创建C应用程序。 我们需要了解哪些关于激活函数的知识? 激活函数(phi()&#…

从0开始学习机器学习--Day19--学习曲线

一般来说,如果一个算法的表现不理想,那么多半是因为出现了欠拟合或过拟合问题,这种时候我们要做的就是搞清楚出现的是偏差问题还是方差问题,亦或是二者皆有,这有助于我们精准定位问题所在。 之前,我们发现…

豆包大模型团队开源RLHF框架,破解强化学习训练部署难题

1. 引言 1.1 强化学习 强化学习(Reinforcement Learning, RL)是与监督学习和无监督学习并列的一种机器学习方法,其用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题…

练习LabVIEW第四十三题

学习目标: 模拟红绿灯,红灯亮十秒,绿灯亮五秒,交替,并用波形图将波形显示 开始编写: 前面板 两个指示灯,一个红色,一个绿色,一个波形图; 程序框图 创建…

css:基础

前言 我们之前其实也可以写出一个看起来算是一个网页的网页,为什么我们还要学css? CSS(Cascading Style Sheets)也叫层叠样式表,是负责美化的,我们之前说html就是一个骨架,css就可以用来美化网…

解析 “Cookies Not Marked as HttpOnly” 漏洞

一、引言 在 Web 应用安全领域,Cookies 相关的漏洞一直是备受关注的问题。其中,“Cookies Not Marked as HttpOnly” 漏洞可能会对用户数据安全和网站的正常运行造成潜在威胁。本文将详细介绍这个漏洞,包括其原理、影响、检测方法以及修复措…

基于MATLAB DCT域图像水印技术

1数字水印技术的概念和特点 数字水印(Digital Watermark)技术是将与多媒体内容相关或不相关的一些标示信息直接嵌入多媒体内容当中,但不影响原内容的使用价值,并不容易被人的知觉系统觉察或注意到。通过这些隐藏在多媒体内容中的…

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割! 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割! 文章目录 【语义分割|代码解析】CMTFNet-2: …

在暗处执着生长,终有一日馥郁传香

总有人说很孤独,一个人吃饭,一个人上班,一个人逛街; 总有人又说享受孤独,面对时间,迎接苦难,战胜痛苦; 可没人说这些的大前提是你要有信念支撑啊,如果干完了上面的所有&a…

揭秘集装箱箱号自动识别原理,箱号识别算法

集装箱箱号自动识别算法是一种高效且实用的软件工具。它利用相机、手机或其他摄像头捕获集装箱箱号图像,并通过深度学习的OCR(光学字符识别)识别技术对集装箱号码进行准确识别。要想进行集装箱箱号识别,需要以下几个基本步骤&…

JavaScript 网页设计详解教程

JavaScript 网页设计详解教程 引言 JavaScript 是一种广泛使用的编程语言,主要用于网页开发。它使得网页具有动态交互性,能够响应用户的操作。随着前端开发的不断发展,JavaScript 已成为现代网页设计中不可或缺的一部分。本文将详细介绍 Ja…

高新技术企业知识库搭建:在创新创业中的支撑作用

在快速迭代的科技时代,高新技术企业(以下简称“高企”)作为推动经济社会发展的核心力量,正面临着前所未有的创新挑战与机遇。知识库,作为信息时代的智慧宝库,不仅承载着企业内部的宝贵知识与经验&#xff0…

ReposVul: A Repository-Level High-Quality Vulnerability Dataset 论文阅读

本文发表于 ICSE2024 会议中。 引入 在过去的漏洞数据库中,主要存在以下几种问题: 无效补丁(Tangled Patches):针对某个漏洞的补丁无法正确修复该漏洞缺乏跨函数漏洞(Inter-procedural Vulnerabilities&…

【图解版】力扣第70题:爬楼梯

推理出状态表达式 f(5)表示到达第5层,所有可能的方法数。 到达第5层,有可能是从第4层走一步上来,也有可能是从第3层走两步上来。所以我们可以慢慢延伸,画出上面👆🏻的图。 从图中,我们可以看到…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…

QT——自定义控件绘图

一.QPaintEvent绘图事件 QPaintEvent是QT中一个重要的类,专门用于绘图事件。当QT视图组件需要重绘制自己的一部分时,就会产生该事件,通常发生在以下几种情况。 窗口第一次显示时:当窗口或控件第一次出现在屏幕中,系统…

Java项目实战II基于Java+Spring Boot+MySQL的高校办公室行政事务管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在高等教育…

非计算机背景但是想从事医学AI研究,需要掌握的编程语言|个人观点·24-11-08

小罗碎碎念 目前,我们从事医学AI研究的,接触的最多的两种编程语言应该就是R和Python了。那么初学者很容易提出一个疑问,**我想从事医学AI相关的研究的话,应该学哪些编程语言呢?**在文章的开头,我可以先给出…

arkUI:Flex弹性布局的各个属性

arkUI:Flex弹性布局的简单使用 1 主要内容说明2 相关内容2.1 Flex弹性布局的方向2.1.1 源码1的简答说明2.1.2 源码1 (Flex弹性布局的方向)2.1.3 源码1运行效果2.1.3.1 当direction: FlexDirection.RowReverse2.1.3.2 当direction: FlexDirect…