【论文笔记】Editing Models with Task Arithmetic

🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


基本信息

标题: Editing Models with Task Arithmetic
作者: Gabriel Ilharco, Marco Tulio Ribeiro, Mitchell Wortsman, Suchin Gururangan, Ludwig Schmidt, Hannaneh Hajishirzi, Ali Farhadi
发表: ICLR 2023
arXiv: https://arxiv.org/abs/2212.04089

基本信息

摘要

改变预训练模型的行为——例如,提高其在下游任务上的性能或减轻在预训练过程中学习的偏差——是开发机器学习系统时的常见做法。

在本工作中,我们提出了一种以任务向量为中心的新范式来引导神经网络的行为。

任务向量指定了预训练模型权重空间中的一个方向,使得在该方向上的移动可以改善任务性能。

我们通过从在任务上微调后的模型权重中减去预训练模型的权重来构建任务向量。

我们表明,这些任务向量可以通过如取反和加法等算术运算进行修改和组合,并且相应地引导结果模型的行为。

取反任务向量会降低目标任务上的性能,而对控制任务上的模型行为影响很小。

此外,将任务向量相加可以同时提高多个任务上的性能。

最后,当任务通过形式为“ A A A 对于 B B B 正如 C C C 对于 D D D”的类比关系相联系时,结合来自三个任务的向量可以改善第四个任务的性能,即使没有使用第四个任务的数据进行训练。

总的来说,我们在多个模型、模态和任务上的实验表明,任务算术是一种简单、高效且有效的编辑模型的方法。

任务向量

为了我们的目的,一个任务通过用于微调的数据集和损失函数实例化。

θ pre ∈ R d \theta_{\text{pre}} \in \mathbb{R}^d θpreRd 为预训练模型的权重, θ ft t ∈ R d \theta_{\text{ft}}^t \in \mathbb{R}^d θfttRd 为在任务 t t t 上微调后的相应权重。

任务向量 τ t ∈ R d \tau_t \in \mathbb{R}^d τtRd θ ft t \theta_{\text{ft}}^t θftt θ pre \theta_{\text{pre}} θpre 的逐元素差给出,即 τ t = θ ft t − θ pre \tau_t = \theta_{\text{ft}}^t - \theta_{\text{pre}} τt=θfttθpre

当任务从上下文中明确时,我们省略标识符 t t t,简单地将任务向量称为 τ \tau τ

任务向量可以应用于来自相同架构的任何模型参数 θ \theta θ,通过逐元素加法,带有可选的缩放项 λ \lambda λ,使得生成的模型具有权重 θ new = θ + λ τ \theta_{\text{new}} = \theta + \lambda \tau θnew=θ+λτ

在我们的实验中,缩放项是使用留出的验证集确定的。

请注意,将单个任务向量添加到预训练模型中,其中 λ = 1 \lambda = 1 λ=1,结果是该任务上微调的模型。

Editing models with task arithmetic

An illustration of task vectors and the arithmetic operations we study for editing models

我们重点关注三种任务向量上的算术表达式,如图1所示:对任务向量取反、将任务向量相加,以及组合任务向量以形成类比。

所有操作都是逐元素应用于权重向量的。

当对任务向量 τ \tau τ 取反时,应用得到的向量 τ new = − τ \tau_{\text{new}} = -\tau τnew=τ 对应于在微调模型和预训练模型之间进行外推。得到的模型在目标任务上表现更差,对控制任务的性能几乎没有变化。

将两个或多个任务向量 τ i \tau_i τi 相加得到 τ new = ∑ i τ i \tau_{\text{new}} = \sum_i \tau_i τnew=iτi,结果是一个在所有任务上都表现出色的多任务模型,有时甚至比在单个任务上微调的模型表现更好。

最后,当任务 A A A B B B C C C D D D 形成类比形式“ A A A 对于 B B B 正如 C C C 对于 D D D”时,任务向量 τ new = τ C + ( τ B − τ A ) \tau_{\text{new}} = \tau_C + (\tau_B - \tau_A) τnew=τC+(τBτA) 提升了任务 D D D 的性能,即使该任务的数据很少或没有数据。

对于所有操作,通过应用 τ new \tau_{\text{new}} τnew 得到的模型权重由 θ new = θ + λ τ new \theta_{\text{new}} = \theta + \lambda \tau_{\text{new}} θnew=θ+λτnew 给出,其中缩放项 λ \lambda λ 是使用留出的验证集确定的。

Forgetting via negation

在这部分中,我们展示对任务向量取反是一种有效的方法,可以在不显著影响其他任务性能的情况下降低其在目标任务上的表现。

遗忘或“反学习”可以帮助缓解预训练时学到的不希望有的偏差;完全遗忘任务可能是为了遵守法规或出于伦理原因,比如防止图像分类器识别面部,或通过OCR“读取”个人信息。

这些干预措施不应显著影响模型在处理编辑范围之外的数据时的行为。

因此,我们在控制任务上测量准确率,除了评估任务向量来源的目标任务。

我们的实验展示了对任务向量取反在编辑图像分类和文本生成模型中的有效性。

图像分类

对于图像分类,我们使用了CLIP模型和Ilharco等人研究的八个任务的任务向量,这些任务从卫星图像识别到交通标志分类:Cars、DTD、EuroSAT、GTSRB、MNIST、RESISC45、SUN397和SVHN。

对于控制任务,我们使用ImageNet。我们通过在每个目标任务上进行微调来生成任务向量。

我们与两个额外的基线进行比较:通过向增加损失的方向进行微调(即,使用梯度上升),如Golatkar等人和Tarun等人所做;以及使用一个随机向量,其中每一层的幅度与任务向量的相应层相同。

Forgetting image classification tasks via negation

如表1所示,对任务向量取反是在减少目标任务准确率的同时对控制任务影响最小的有效编辑策略。

例如,负任务向量将ViT-L/14的平均目标任务准确率降低了45.8个百分点,而对控制任务的准确率几乎没有变化。

相比之下,使用随机向量对目标任务准确率影响不大,而使用梯度上升进行微调则严重恶化了控制任务的性能。

文本生成

我们研究了是否可以通过对训练出特定行为的任务向量取反来缓解该模型的特定行为。

具体而言,我们的目标是减少由各种大小的GPT-2模型生成的有毒内容的数量。

我们通过在Civil Comments中毒性分数高于0.8的数据上微调来生成任务向量,然后对这个任务向量取反。

与上节一样,我们还比较了在微调时使用梯度上升的基线,以及使用相同幅度的随机任务向量。

此外,我们还与从Civil Comments(毒性分数小于0.2)的非有毒样本上进行微调进行了比较,类似于Liu等人。

我们使用Detoxify测量了一千个模型生成的毒性。

对于控制任务,我们测量了语言模型在WikiText-103上的困惑度。

Making language models less toxic with negative task vectors

如表2所示,使用负任务向量进行编辑是有效的,将分类为有毒的生成量从4.8%减少到0.8%,同时在控制任务上保持困惑度在预训练模型的0.5个百分点以内。

相比之下,使用梯度上升进行微调通过将控制任务的性能降低到不可接受的水平来减少有毒生成,而在非有毒数据上进行微调在减少任务生成和控制任务上都比任务向量差。

作为实验对照,添加一个随机向量对有毒生成或在WikiText-103上的困惑度几乎没有影响。

Learning via addition

我们现在将注意力转向添加任务向量,无论是构建能够在多个任务上同时表现出色的多任务模型,还是改进单任务性能。

这一操作使我们能够在不进行额外训练或访问训练数据的情况下,重用和转移来自内部模型或大量公开可用的微调模型的知识。

我们探索了在各种图像分类和自然语言处理任务上添加任务向量的应用。

图像分类

我们开始使用与上文相同的八个模型,这些模型在一系列多样化的图像分类任务(Cars、DTD、EuroSAT、GTSRB、MNIST、RESISC45、SUN397和SVHN)上进行了微调。

Adding pairs of task vectors from image classification tasks

如图2所示,我们展示了通过添加这些任务中所有成对的任务向量所获得的准确性。

为了考虑任务难度的差异,我们通过在该任务上微调的模型的准确率来归一化每个任务的准确率。

在归一化后,微调模型在其各自任务上的性能均为1,因此使用多个专用模型的平均性能也为1。

如图2所示,添加成对的任务向量得到一个单一模型,其性能大幅超越零样本模型,并且与使用两个专用模型相当(平均归一化准确率为98.9%)。

除了任务对之外,我们还探索了为所有可能的子集(总共 2 8 2^8 28 个)添加任务向量。

Adding task vectors builds multi-task models for image classification tasks

在图3中,我们展示了最终模型的归一化准确性,这些准确性是通过对所有八个任务进行平均得到的。

随着可用任务向量数量的增加,可以生成更好的多任务模型。当所有任务向量都可用时,通过添加任务向量生成的最佳模型达到了91.2%的平均性能,尽管将多个模型压缩成了一个。

自然语言处理

除了构建多任务模型外,我们还探讨了添加任务向量是否是提高单个目标任务性能的有效方法。

为此,我们首先在GLUE基准中的四个任务上微调T5-base模型,如Wortsman等人所做。

然后,我们在Hugging Face Hub上搜索兼容的检查点,共找到427个候选者。

我们尝试将每个对应的任务向量添加到我们的微调模型中,基于留出的验证数据选择最佳的检查点和缩放系数。

Improving performance on target tasks with external task vectors

如表3所示,添加任务向量可以提高目标任务的性能,相比微调。

Task analogies

在本节中,我们探讨了以“ A A A 对于 B B B 正如 C C C 对于 D D D”形式的任务类比,并展示使用前三个任务的向量进行任务算术可以提高任务D的性能,即使对于该任务的数据很少或根本没有数据。

Domain generalization

对于许多目标任务,收集未标记的数据比收集人工注释更容易且成本更低。

当目标任务的标记数据不可用时,我们可以使用任务类比来提高目标任务的准确性,利用有标记数据的辅助任务和无监督学习目标。

例如,考虑使用Yelp数据进行情感分析的目标任务。

使用任务类比,我们可以构建一个任务向量 τ ^ yelp; sent = τ amazon; sent + ( τ yelp; lm − τ amazon; lm ) \hat{\tau}_{\text{yelp; sent}} = \tau_{\text{amazon; sent}} + (\tau_{\text{yelp; lm}} - \tau_{\text{amazon; lm}}) τ^yelp; sent=τamazon; sent+(τyelp; lmτamazon; lm),其中 τ amazon; sent \tau_{\text{amazon; sent}} τamazon; sent 是通过在来自Amazon的标记数据上进行微调获得的(情感分析使用来自Amazon的数据;McAuley & Leskovec),而 τ yelp; lm \tau_{\text{yelp; lm}} τyelp; lm τ amazon; lm \tau_{\text{amazon; lm}} τamazon; lm 是通过在两个数据集的输入上进行(无监督)语言建模获得的任务向量。

Improving domain generalization with task analogies

在表4中,我们展示了使用此类任务类比可以提高T5模型在多个尺度上的准确性,无论是将Amazon还是Yelp二元情感分析作为目标任务。

我们经验性地发现,给情感分析任务向量更高的权重可以提高准确性,因此我们在这些实验中使用了两个独立的缩放系数——一个用于情感分析任务向量,另一个用于两个语言建模任务向量。

使用任务向量在所有模型和数据集上都优于在剩余的辅助情感分析任务上进行微调,接近在目标任务上进行微调的性能。

Subpopulations with little data

在某些数据子群体中通常存在一些固有的稀缺性——例如,室内环境中的狮子图像比户外环境中的狮子图像或一般情况下的狗(无论室内还是室外)图像更为罕见。

每当这些子群体与数据更为丰富的其他群体存在类比关系时(如本例所示),我们可以应用任务类比,例如, τ ^ lion indoors = τ lion outdoors + ( τ dog indoors − τ dog outdoor ) \hat{\tau}_{\text{lion indoors}} = \tau_{\text{lion outdoors}} + (\tau_{\text{dog indoors}} - \tau_{\text{dog outdoor}}) τ^lion indoors=τlion outdoors+(τdog indoorsτdog outdoor)

我们通过创建四个子群体来探索这一情景,使用ImageNet和人类素描数据集之间的125个重叠类别。

我们将这些类别分为大致相等的两个子集,创建四个子群体A、B、C和D,其中(A, C)和(B, D)共享相同的类别,而(A, B)和(C, D)共享相同的风格(照片逼真图像或素描)。

尽管这些子群体在我们的实验中有许多类别,但我们使用简化的子集 “real dog”, “real lion”, “sketch dog” and “sketch lion” 作为运行示例。

给定一个目标子群体,我们通过在剩余的子群体上独立微调三个模型来创建任务向量,然后通过任务算术将它们组合起来,例如,对于目标子群体“sketch lion”, τ ^ sketch lion = τ sketch dog + ( τ real lion − τ real dog ) \hat{\tau}_{\text{sketch lion}} = \tau_{\text{sketch dog}} + (\tau_{\text{real lion}} - \tau_{\text{real dog}}) τ^sketch lion=τsketch dog+(τreal lionτreal dog)

我们在图4中展示了结果,这些结果是对四个目标子群体的平均值。

Learning about subpopulations via analogy.

与预训练模型相比,任务向量平均提高了3.4个百分点的准确性。

此外,当目标子群体的一些数据可用于微调时,从编辑后的模型开始始终比从预训练模型开始获得更高的准确性。

仅从类比中获得的收益(没有额外的数据)大致相当于为目标子群体收集和标注大约一百个训练样本的效果。

讨论

在这一节中,我们通过探讨不同任务的任务向量之间的相似性,以及不同学习率和随机种子的影响,对先前结果进行了进一步的分析。

我们最后讨论了我们方法的一些局限性。

Similarity between task vectors

在图5中,我们探讨了不同任务的任务向量之间的余弦相似度,旨在了解如何通过加法将多个模型合并为单个多任务模型。

我们观察到来自不同任务的向量通常接近正交,并推测这允许通过加法组合任务向量,干扰最小。

我们还观察到当任务在语义上彼此相似时,余弦相似度更高。

Task vectors are typically close to orthogonal

例如,图5中最大的余弦相似度出现在MNIST、SVHN和GTSRB之间,这些任务的关键是识别数字,以及EuroSAT和RESISC45之间,它们都是卫星图像识别数据集。

这种“任务空间”中的相似性可能有助于解释Ilharco等人中的某些结果,其中在单个任务上微调的模型权重与预训练模型权重之间进行插值——用我们的术语来说,就是应用单个任务向量——有时可以提高没有数据的不同任务的准确性(例如,应用MNIST任务向量可以提高SVHN的准确性)。

The impact of the learning rate

在图6中,我们观察到增加学习率会降低使用任务向量和微调单个模型时的准确性,但对于单个模型,这种下降更为平缓。

The impact of learning rate when fine-tuning

这些发现与的研究结果一致,该研究观察到在使用较大的学习率时,两个微调模型之间的线性路径上的准确性会降低。

因此,虽然较大的学习率在微调单个模型时可能可以接受,但我们建议在使用任务向量时更加谨慎。

此外,我们假设较大的学习率可以解释在添加来自自然语言处理任务的向量时的一些方差,其中我们采用社区中其他人微调的模型。

The evolution of task vectors throughout fine-tuning

图7展示了任务向量在微调过程中的演变。

How task vectors evolve throughout fine-tuning

中间任务向量迅速收敛到微调结束时获得的最终任务向量方向。

此外,通过添加两个图像分类任务的中间任务向量获得的模型精度在仅几百步后就趋于饱和。

这些结果表明,使用中间任务向量可以是一种在精度损失很小的情况下节省计算的有用方法。

Limitations

任务向量仅限于具有相同架构的模型,因为它们依赖于模型权重上的逐元素操作。

此外,在我们所有的实验中,我们仅在从同一预训练初始化微调的模型上执行算术运算,尽管有研究表明放宽这一假设是有希望的。

我们还注意到,一些架构非常流行,并且有“标准”初始化——例如,在撰写本文时,Hugging Face Hub上有超过3000个模型是从同一BERT-base初始化微调的,还有超过800个模型是从同一T5-small初始化微调的。

总结

在这篇论文中,我们介绍了一种基于任务向量算术运算的编辑模型新范式。

对于各种视觉和NLP模型,添加多个专用任务向量可以导致一个在所有目标任务上表现良好的单一模型,甚至可以提升单个任务的表现。

取反任务向量允许用户移除不希望的行为,例如,有毒生成,甚至完全忘记特定任务,同时保持其他方面的性能。

最后,任务类比利用现有数据来提高数据稀缺的领域或子群体的性能。

在任务向量上的算术运算仅涉及添加或减去模型权重,因此计算效率高,尤其是与涉及额外微调的替代方案相比。

因此,用户可以轻松尝试各种模型编辑,从大量公开可用的微调模型中回收和转移知识。

由于这些操作导致单个模型大小不变,因此不会产生额外的推理成本。

我们的代码可在https://github.com/mlfoundations/task_vectors上获取。

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

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

相关文章

下载红米Note 9 Pro5G对应的LineageOS代码下载及编译

构建 LineageOS 进入网站:Info about gauguin | LineageOS Wiki,点击:Build for yourself,里面有详细的教程,我这里就按照Note 9 Pro 5G来。 机器环境 Ubuntu环境为:20.04.6LinagesOS版本:21-…

Git-分布式版本控制工具

目录 1. 概述 1. 1集中式版本控制工具 1.2分布式版本控制工具 2.Git 2.1 git 工作流程 1. 概述 在开发活动中,我们经常会遇到以下几个场景:备份、代码回滚、协同开发、追溯问题代码编写人和编写时间(追责)等。备份的话是为了…

详解排序几大算法

一、插入排序 基本思想: 直接插入排序是一种简单的插入排序算法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。 步骤&#x…

Java 垃圾回收机制详解

1 垃圾回收的概念 垃圾回收(Garbage Collection,GC)是自动管理内存的一种机制,用于释放不再使用的对象所占用的内存空间,防止内存溢出。垃圾回收器通过识别和回收那些已经死亡或长时间未使用的对象,来优化…

车载终端_智能车载终端定制_农机/出租车/叉车/驾培车载终端MTK方案

车载终端集成了先进的技术和卓越的性能,采用了联发科的高效低功耗ARM处理器,具备八核架构,主频高达2.0GHz,基于12nm制程工艺,不仅性能强劲,而且功耗控制出色。基本配置为4GB内存与64GB存储,用户…

【JavaSE基础】第十七章:反射+设计模式

一、反射 1.反射(Reflection):允许在程序运行状态中,可以获取任意类中的属性和方法,并且可以操作任意对象内部的属性和方法,这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2.类对象 和 类的对象(实例…

Scratch教学作品 | 3D圆柱体俄罗斯方块——旋转视角的全新挑战! ✨

今天为大家推荐一款创意十足的Scratch益智游戏——《3D圆柱体俄罗斯方块》!由Ceratophrys制作,这款作品将经典俄罗斯方块与立体圆柱舞台相结合,为玩家带来了前所未有的空间挑战与乐趣。更棒的是,这款游戏的源码可以在小虎鲸Scratc…

三维空间刚体运动4-1:四元数表示变换(各形式相互转换加代码——下篇)

三维空间刚体运动4-1:四元数表示变换(各形式相互转换加代码——下篇) 4. 四元数到其它旋转表示的相互转换4.1 旋转向量4.2 旋转矩阵4.3 欧拉角4.3.1 转换关系4.3.2 转换中的万象锁问题 5. 四元数的其他性质5.1 旋转的复合5.2 双倍覆盖5.3 指数…

使用layui的table提示Could not parse as expression(踩坑记录)

踩坑记录 报错图如下 原因: 原来代码是下图这样 上下俩中括号都是连在一起的,可能导致解析问题 改成如下图这样 重新启动项目,运行正常!

大模型的构建与部署(2)——数据清洗

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 数据清洗的必要性与影响 1.1 数据清洗对模型性能的影响 数据清洗是数据预处理的关键步骤,对于模型训练的性能和准确性有着直接的影响。原始数据中的缺失值、重复值、异常值以及数据格式不一致…

【MySQL】--- 数据库基础

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: MySQL 本篇博客我们来建立一下数据库的相关概念,主要理解什么是数据库以及mysql和mysqld,MySQL架构等问题。 🏠 登录…

Vue中纯前端实现导出简单Excel表格的功能

Vue 前端Excel导出 Vue中纯前端导出简单Excel表格的方法(使用vue-json-excel插件) 前言 在许多的后台系统中少不了导出Excel表格的功能,在项目中纯前端使用vue-json-excel插件来实现简单Excel表格的导出功能。 使用方法 1、安装依赖 npm install vue-json-exc…

KeyFormer:使用注意力分数压缩KV缓存

Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403,发表在Mlsys Introduction 优化KV cache的策略,主要是集中在系统级别的优化上,比如FlashAttention、PagedAttention,它…

Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用

前言 在 Linux 系统管理中,精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时,不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…

SSH连接成功,但VSCode连接不成功

环境 在实验室PC上连接服务器234 解决方案:在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上,VSCode会安装一个‘vscode-server’服务来支持远程开发,有时旧的‘vscode-server’文件可能会导致问题,删除旧的&am…

【Qt】qt安装

在工作一年之后,还是想做一个Qt的教程,遥想研一刚刚接触Qt,从0到1学习,没有什么参考书籍,网上的资料也不多,幸好Qt官方文档写得好,加上自己肯研究,才堪堪入门。 现在我想自己写一个…

Web开发 -前端部分-CSS

CSS CSS&#xff08;Cascading Style Sheet&#xff09;:层叠样式表&#xff0c;用于控制页面的样式&#xff08;表现&#xff09;。 一 基础知识 1 标题格式 标题格式一&#xff1a; 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…

YOLOv8目标检测(六)_封装API接口

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

51c视觉~YOLO~合集6~

我自己的原文哦~ https://blog.51cto.com/whaosoft/12830685 一、其他yolo 1.1 Spiking-YOLO​ 使用常规深度神经网络到脉冲神经网络转换方法应用于脉冲神经网络域时&#xff0c;性能下降的很多&#xff0c;深入分析后提出了可能的解释&#xff1a;一是来自逐层归一化的效率…

如何在 Ubuntu 22.04 上安装 Strapi CMS

简介 Strapi 是一个使用 JavaScript 构建的开源、无头内容管理系统 (CMS)。与其他无头 CMS 一样&#xff0c;Strapi 开箱即用不带前端。它使用 API 作为其前端&#xff0c;允许你使用流行的框架&#xff08;如 React 和 Next.js&#xff09;构建网站。Strapi 基于插件系统&…