进一步观察扩散模型中的参数有效调整

news2025/2/26 8:06:51

摘要:

像Stable diffusion[31]这样的大规模扩散模型非常强大,可以找到各种真实世界的应用程序,而通过微调来定制这样的模型会降低内存和时间的效率。受自然语言处理最新进展的推动,我们通过插入小型可学习模块adapters(称为适配器)来研究大型扩散模型中的参数高效调优。具体来说,我们将适配器的设计空间分解为正交因素——输入位置、输出位置以及函数形式,并执行方差分析(ANOVA),这是一种分析离散变量(设计选项)和连续变量(评估指标)之间相关性的经典统计方法。我们的分析表明,适配器的输入位置是影响下游任务性能的关键因素。然后,我们仔细研究了输入位置的选择,发现将输入位置放在交叉注意块之后可以获得最佳的性能,并通过其他可视化分析进行了验证。最后,我们提供了一个在扩散模型中参数有效调整的方法,如果不能优于完全微调的基线(如DreamBooth),也可以与各种定制任务相比,只额外增加0.75%的参数。我们的代码可以在 https://github.com/Xiang-cd/unet-finetune上找到

介绍:

扩散模型由于能够生成高质量和多样化的图像,最近变得流行起来。扩散模型在迭代生成过程中通过与条件信息的交互,在条件生成任务中具有出色的性能,这激发了其在下游任务中的应用,如文本到图像的生成,图像到图像的平移,图像恢复。

有了从海量数据中获得的知识,大规模扩散模型在下游任务中表现出了很强的先验能力。其中,DreamBooth在大规模扩散模型中调整所有参数,生成用户想要的特定对象。然而,对整个模型进行微调在计算、内存和存储成本方面效率低下。另一种方法是参数高效迁移学习方法(本文),起源于自然语言处理(NLP)领域。这些方法将可训练的小模块(称为适配器)插入到模型中,并冻结原始模型。然而,参数有效迁移学习在扩散模型领域还没有得到深入的研究。与NLP中基于变压器的语言模型相比,扩散模型中广泛使用的U-Net体系结构包含了更多的成分,如带有下/上采样算子的残差块、自注意和交叉注意这使得参数高效迁移学习的设计空间比基于变压器的语言模型更大。

本文首次系统地研究了大规模扩散模型中参数有效调谐的设计空间。我们将Stable Diffusion作为具体情况,因为它是目前唯一的开源大规模扩散模型。特别地,我们将适配器的设计空间分解为正交因子—输入位置、输出位置和函数形式。通过在实验研究中使用方差分析,对这些因素进行组间差异分析,我们发现输入位置是影响下游任务绩效的关键因素。然后,我们仔细研究了输入位置的选择,发现将输入位置放置在交叉注意块之后,可以最大限度地鼓励网络感知输入提示的变化(见图11),从而获得最佳性能。

基于我们的研究,我们的最佳设置可以达到与完全微调方法相比(反正就是我们的最佳设置的效果与Dreambooth差不多)

2.相关介绍:

2.1扩散模型:

2.2稳定扩散中的结构:

图3。背景。左上角的图显示了基于unet的扩散模型的总体架构。右上方显示了扩散模型如何通过T - 1步骤从有噪声的数据中去除噪声。图的下半部分为残差块和变压器块的结构。适配器(图中红色的块)是插入模型中参数较少的模块,用于参数高效迁移学习。 

目前,最流行的扩散模型体系结构是基于u - net的体系结构。具体来说,Stable Diffusion中基于u - net的架构如图3所示。U-Net由堆叠的基本块组成,每个基本块包含一个变压器块和一个剩余块。在变压器块中,有三种子层:自注意层、交叉注意层和全连接前馈网络。注意层对查询Q∈Rn×dk,键值对K∈Rm×dk,V∈Rm×dv进行操作

 其中n为查询次数,m为键值对的个数,dk为键的维数,dv为值的维数。在自我注意层中,x∈Rn×dx是唯一的输入。在条件扩散模型的交叉注意层中,有两个输入x∈Rn×dx, c∈Rm×dc,其中x为先验块的输出,c表示条件信息。全连接前馈网络,由两个具有ReLU激活函数的线性变换组成:

 其中,W1∈Rd×dm,W2∈Rdm×d为可学权值,b1∈Rdm, b2∈Rd为可学偏差。剩余块由一系列卷积层和激活组成,其中时间嵌入通过加法操作注入到剩余块中

2.3参数高效迁移学习:

迁移学习是一种利用从一个任务中学习到的知识来提高相关任务绩效的技术。对下游任务进行预训练再进行迁移学习的方法被广泛采用。然而,传统的迁移学习方法需要大量的参数,这是昂贵的计算和内存密集型。

参数高效迁移学习是在自然语言处理领域中首次提出的。参数高效迁移学习的关键思想是减少更新参数的数量。这可以通过更新模型的一部分或添加额外的小模块来实现。一些参数有效的迁移学习方法(如适配器[16]、LoRA[17])选择向模型添加名为适配器的额外小模块。相反,其他方法(前缀调优[22]、提示调优[21])将一些可学习的向量置于激活或输入之前。大量的研究已经证明,在自然语言处理领域中,这种高效的参数微调方法可以在参数较少的情况下取得可观的效果。

3.扩散模型中参数高效学习的设计空间

尽管参数高效迁移学习在自然语言处理中取得了成功,但由于残余块和交叉注意等成分的存在,该技术在扩散模型中还没有得到充分的理解。在分析扩散模型中的参数高效调整之前,我们将适配器的设计空间分解为三个正交因子——输入位置、输出位置和函数形式。本工作考虑了Stable Diffusion[31],因为它是目前唯一的开源大规模扩散模型(其基于u - net的架构见图3)。

下面我们详细说明了输入位置、输出位置以及基于稳定扩散体系结构的函数形式。

3.1输入位置和输出位置:

输入位置是适配器输入的来源,输出位置是适配器输出的位置。为了便于理解,如图4所示,位置是根据相邻层命名的。例如,SAin表示位置对应自注意层的输入,Transout表示变压器块的输出,CAc表示交叉注意层的条件输入。

 图4。激活位置说明。通常,激活位置的主名是模型中特定块的别名,激活位置的下标解释了激活和块之间的关系。

在我们的框架中,输入位置可以是图4中描述的任何一个激活位置。因此,总共有10个不同的输入位置选项。至于输出,由于加法是可交换的,所以有些位置是等价的。例如,将输出放到SAout相当于将输出放到CAin。因此,输出位置的选项总共减少到7个。另一个约束是输出位置必须放置在输入位置之后。

3.2adapter模型架构:

函数形式描述了适配器如何将输入转换为输出。我们分别给出了变压器块和残差块中适配器的函数形式(见图5),其中两者都包含一个下采样算子、一个激活函数、一个上采样算子和一个缩放因子。下采样算子减小输入的维数,上采样算子增大输入的维数,以保证输出与输入具有相同的维数。输出进一步乘以缩放因子s,以控制其对原始网络的影响强度。

其中,变压器块适配器使用低秩矩阵Wdown和Wup分别作为下采样和上采样算子,残差块适配器使用3×3卷积层Convdown和Convup分别作为下采样和上采样算子。注意,这些卷积层只改变通道的数量,而不改变空间大小。此外,剩余块适配器还使用组归一化[38]运算符处理其输入。

在我们的设计选择中,我们包括了不同的激活函数和比例因子。激活函数包括ReLU、Sigmoid、SiLU和标识符作为我们的设计选择,尺度因子包括0.5、1.0、2.0、4.0。

 图5。变压器块和剩余块中适配器的模型架构。

4.用方差分析发现关键因素

如前所述,在如此大的离散搜索空间中找到最优解是一个挑战。为了发现设计空间中哪个因素对绩效的影响最大,我们利用单向方差分析(ANOVA)方法量化模型绩效与因素之间的相关性,该方法被广泛应用于许多领域,包括心理学、教育、生物学和经济学。

方差分析背后的主要思想是将数据中的总变异分成两部分:组内变异(MSE)和组间变异(MSB)。MSB测量组间均值的差异,而组内的变异测量个体观察值与各自组间均值的差异。 方差分析中使用的统计检验基于f -分布,它比较组间变异与组内变异的比率(f -统计量)。如果f统计量足够大,它表明组之间的均值有显著差异,这表明有很强的相关性。

图6.DreamBooth任务中适配器的性能(即CLIP
similarity↑)和输入输出位置之间的关系。

 图7。微调任务中性能(即FID↓)与适配器输入输出位置的关系(我所关注的重点)。

5.实验

 我们首先在第5.1节介绍了我们的实验设置。然后我们在第5.2节中分析设计空间中哪个因素是最关键的。在发现输入位置的重要性后,我们在第5.3节对其进行了详细的消融研究。最后,我们在5.4节对我们的最佳设置和DreamBooth(即微调所有参数)进行了全面的比较。

5.1 设置

任务和数据集。在扩散模型中,我们考虑了两个迁移学习任务。

DreamBooth任务。第一个任务是对少于10个输入图像的扩散模型进行个性化,正如在DreamBooth[32]中提出的那样。为了简单起见,我们称之为DreamBooth任务。DreamBooth的培训数据集由两组数据组成:个性化数据和正则化数据。(也就是使用DreamBooth方法进行微调?)个性化数据是用户提供的特定对象(例如,一只白狗)的图像。正则化数据是类似于个性化数据的一般对象的图像(例如,不同颜色的狗)。个性化数据大小小于10,模型可以收集或生成正则化数据。DreamBooth使用稀有标记[V]和类字Cclass来区分正则化数据和个性化数据。特别是,对于正则化数据,提示符将是“Cclass的照片”;有了个性化数据,提示将是“[V] class的照片”。其中Cclass是描述数据的一般类别(如dog)的一个词。我们从互联网和实景摄影中收集个性化数据,也从DreamBooth(总共33个)收集数据。我们使用稳定扩散本身来生成相应的正则化数据,条件是提示“a photo of class”。

微调任务。另一项任务是对一小组文本图像对进行微调。为了简单起见,我们称之为微调任务。在[39]之后,我们考虑对花卉数据集[27]和8189张图像进行微调,并使用相同的设置。我们用提示符“a photo of Fname”为每张图片加标题,其中Fname是图片类的花名。

我们使用AdamW[23]优化器。对于DreamBooth任务,我们将学习速率设置为1e-4,这可以让DreamBooth和我们的方法在1k步左右收敛。将适配器大小固定为1.5M (UNet模型的0.17%),并使用2.5k步进行训练。对于在一小组文本图像对上进行微调的任务,我们将学习速率设置为1e-5,将适配器大小固定为6.4M (UNet模型的0.72%),并训练60k步。

为了提高采样效率,我们选择了DPM-Solver[24]作为采样算法,采样步长为25步,分级器自由引导(cfg)[15]尺度为7.0。在某些情况下,我们使用5.0的cfg尺度以获得更好的图像质量。 

对于DreamBooth任务,我们使用[10]中提出的CLIP空间中的图像距离来评估真实性。具体来说,对于每个个性化目标,我们使用提示符“A photo of [V] Cclass”生成32张图像。度量是生成的图像与个性化训练集的图像之间的平均成对的CLIP-space余弦相似度(CLIP相似度) 

对于对一小组文本图像对进行微调的任务,我们使用FID评分[13]来评估训练图像和生成图像之间的相似性。我们从训练集中随机抽取5k条提示,使用这些提示生成图像,然后将生成的图像与训练图像进行比较,计算出FID。

5.2 设计空间的方差分析(ANOVA)

回想一下,我们将设计空间分解为输入位置、输出位置和功能形式等因素。我们对这些设计维度执行方差分析方法(详见第4节)。我们考虑DreamBooth任务的效率,因为它需要更少的培训步骤。如图8所示,按输入位置分组时,f统计量较大,说明输入位置是影响模型性能的关键因素。当按输出位置分组时,其相关性较弱。 当按函数形式分组时(两个激活函数 和比例因子),其f统计量在1左右,说明组间的变异性与组内的变异性相似,说明组均值之间没有显著差异。我们进一步可视化了不同输入位置和输出位置下的性能。图6 是DreamBooth任务的结果。图7显示了微调任务的FID结果。

图8。通过分组输入位置、输出位置、激活函数和比例因子对方差分析进行f统计。按输入位置分组时f统计量较大,说明与输入位置有显著关系。

如上所述,我们得出结论,适配器的输入位置是影响参数高效迁移学习性能的关键因素。

5.3输入位置的消融实验

如图6和图7所示,我们发现输入位置为CAc或CAout的适配器在这两个任务上都有很好的性能。在图9中,我们给出了不同适配器输入位置的个性化扩散模型中生成的样本。输入位置在CAc或CAout的适配器能够生成与微调所有参数相当的个性化图像,而输入位置在其他地方的适配器则不能。

图9。生成了不同适配器输入位置的个性化扩散模型样本。所有的样本都以“a photo of [V] class”为条件,值得注意的是,成功的方法会生成正确的图像,而失败的方法很可能生成类似于正则化数据的图像。 

我们进一步计算给出提示“a photo of [V] Cclass”和“a photo ofCclass”的噪声预测的差值。管道如图10所示,在这个管道中,我们首先从正则化数据中对一幅图像添加噪声,在给定这两种提示时,使用U-Net预测噪声,并将两种预测噪声的差值可视化。如图11所示,输入位置为CAc或CAout的适配器与噪声预测之间存在显著差异。

图10。实验管道的噪声预测差异可视化。 

图11。不同设定的噪声预测差异。“无调”方法使用原始的稳定扩散模型,没有任何微调。所有的适配器方法都以输入-输出的形式记录下来。我们发现输入位置为CAout和CAc的适配器对提示符的变化反应较好。 

5.4与DreamBooth相比

我们在图12中显示了DreamBooth任务中每种情况的结果,这表明我们的方法在大多数情况下更好。

我们还在花卉数据集上的微调任务中比较了我们的最佳设置和完全微调的方法。该方法的FID为24.49,优于完全调优法的28.15。

 6.相关工作

个性化。基于web数据训练的大规模文本-图像扩散模型可以生成高分辨率和多样化的图像,图像内容由输入文本控制,但往往缺乏针对用户希望的特定对象进行个性化生成的能力。

 最近的工作,如文本反演[10]和DreamBooth[32],旨在通过微调对象的一小组图像上的扩散模型来解决这个问题。文本反演只调整了一个词的嵌入。为了获得更强的性能,DreamBooth用正则化损失调优所有参数,以防止过拟合。

参数高效迁移学习。参数高效迁移学习起源于nlp领域,如适配器[16]、前缀调优[22]、提示调优[21]和LoRA[17]。 具体来说,适配器[16]在变压器块之间插入具有非线性激活函数f(·)的小型低秩多层感知器(MLP);前缀调优[22]将可调前缀向量添加到每个注意层的键和值;提示调优[21]通过添加可调的输入词嵌入简化了前缀调优;LoRA[17]将可调的低秩矩阵注入到变压器块的查询和值投影矩阵中。

虽然这些参数高效迁移学习方法的形式和动机各不相同,但最近的工作[12]通过指定一组因子来描述纯变压器[37]中参数高效迁移学习的设计空间,对这些方法提出了统一的观点。这些因素包括修改的表示方式、插入形式、函数形式,复合函数。相比之下,我们的方法侧重于U-Net,其组件比纯变压器多,因此设计空间更大。此外,我们使用一种更简单的方法将设计空间分解为正交因子,即输入位置、输出位置和函数形式。

图12。性能与DreamBooth相比。我们的方法在大多数情况下执行得更好。 

扩散模型的迁移学习。有一些方法可以通过传递扩散模型来识别特定的对象,或者通过调整整个模型来进行语义编辑[19,32]。之前的工作[39]试图将大型扩散模型转换为小数据集上的图像到图像模型,但调优的参数总数几乎是原始模型的一半。 使扩散模型接受新的条件,并引入比我们的模型更多的参数。并行工作[1]也在Stable Diffusion上进行参数高效迁移学习,他们的方法在DreamBooth[32]任务上可以达到与完全微调方法相当的结果,而他们的方法是基于同时在多个位置添加适配器,导致设计空间更加复杂。

7. 结论 

本文通过在扩散模型中插入适配器,对参数高效迁移学习的设计空间进行了系统的研究。将适配器的设计空间分解为输入位置、输出位置和函数形式三个正交因子。。通过方差分析(ANOVA)发现,适配器的输入位置是影响下游任务性能的关键因素。然后,我们仔细研究了输入位置的选择,发现将输入位置放在交叉注意块之后可以获得最佳的性能,并通过其他可视化分析进行了验证。最后,我们提供了一个在扩散模型中参数有效调整的方法,如果不能优于完全微调的基线(如DreamBooth),也可以与各种定制任务相比,只额外增加0.75%的参数。 

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

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

相关文章

链表实现稀疏多项式相加(C++)

#include<iostream> using namespace std; typedef struct node {float coef;//系数int expn;//指数struct node* next; }list,*linklist; void Createlist(linklist& l) {l new list;l->next NULL;linklist p,q;q l;cout << "输入多项式项数&#…

ARM 汇编指令集——汇编中三种符号(汇编指令、伪指令、伪操作)、汇编基本格式、数据操作指令、跳转指令、特殊功能寄存器操作指令、内存操作指令、混合编程

目录 一、汇编中三种符号&#xff08;汇编指令、伪指令、伪操作&#xff09; 二、汇编基本格式 三、数据操作指令 3.1 数据搬移指令mov/mvn ① 示例 ② 立即数 3.2 移位操作指令lsl/lsr/asr/ror 示例 3.3 位运算操作指令and/orr/eor/bic ① 示例1 ② 示例2 3.4 算数…

第32节——useReducer——了解

一、概念 useReducer 是在 react V 16.8 推出的钩子函数&#xff0c;从用法层面来说是可以代替useState。众所周知&#xff0c;useState 常用在单个组件中进行状态管理&#xff0c;但是遇到状态全局管理的时候&#xff0c;useState 显然不能满足我们的需求&#xff0c;这个时候…

4G工业路由器高效数据传输助力光伏发电站管理

光伏发电站是能源产业中一种利用太阳能技术将光转化为电能的常见设施。随着物联网技术与环保能源的不断进步和应用的普及&#xff0c;光伏发电站的管理也变得更加便捷高效。 光伏发电站结合4G工业路由器实现远程监控管理&#xff0c;并用于采集发电站中的传感器数据和监控信息…

vue watch 侦听器 监视器

vue watch 侦听器 监视器 变量 变化的时候&#xff0c;自动调用处理函数 vue watch 侦听器 监视器

/node_modules/XXX/index.js:XXX XXX ??= X;SyntaxError: Unexpected token ‘??=‘

这问题 老实说有点奇葩 不影响运行 反倒运行提交了 不解决这个问题提交不了代码 这个错误是由于语法不兼容导致的。?? 是一个相对较新的 JavaScript 语法&#xff0c;也就是空值合并赋值操作符&#xff0c;它在 Node.js 版本低于 15 或者某些浏览器中不被支持。 那么 了解…

日常生活中的常用命令及操作

目录 一、Windows11 中查看网卡名称 及ip地址 二、查看硬件的详细信息 三、查看显卡声卡详细信息及厂商 四、C盘清理 第一步 输入wini 开启Windows设置主界面 第二步 存储中还有一个叫存储感知的功能 第三步 更改新内容的保存位置 第四步 怕误C盘内的东西可以 查看详细的…

【Java 基础篇】Java 线程通信详解

多线程编程在实际应用中非常常见&#xff0c;但随之而来的问题是线程之间的通信。线程通信是多线程编程中一个至关重要的概念&#xff0c;它涉及到线程之间的信息传递、同步和协作。本篇博客将详细解释Java中的线程通信&#xff0c;包括什么是线程通信、为什么需要线程通信、如…

UG\NX二次开发 求空间点坐标按照某方向移动某距离后的新坐标

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: 群友问“ufun中空间点的坐标(x,y,z),沿着空间任意工作坐标系z轴移动10mm后的新坐标如何计算?” 这个是有多种方法的,比如数学计算比如ufun的仿射变换…

css,环形

思路&#xff1a; 1.先利用conic-gradient属性画一个圆&#xff0c;然后再叠加 效果图 <template><div class"ring"><div class"content"><slot></slot></div></div> </template> <script> import …

JavaScript系列从入门到精通系列第三篇:JavaScript基本语法(一)

文章目录 一&#xff1a;JavaScript基本语法 1&#xff1a;JS注释 (一)&#xff1a;JS多行注释 (二)&#xff1a;JS单行注释 (三)&#xff1a;JS中大小写 (四)&#xff1a;分号问题 (五)&#xff1a;空格和换行 2&#xff1a;字面量和变量 (一)&#xff1a;字面量 (二…

demo1-csa(从初阶到大牛)

1.1文件管理命令练习 (1) 在/opt目录下创建一个临时目录tmp; # 创建临时目录tmp sudo mkdir /opt/tmp (2) 在临时目录下创建一个文件&#xff0c;文件名为a.txt; # 在临时目录下创建文件a.txt&#xff08;可以使用touch命令创建空文件&#xff09; sudo touch /opt/tmp/a.t…

MQ - 11 Kafka的架构设计与实现

文章目录 导图概述Kafka 系统架构协议和网络模块数据存储元数据存储消息数据生产者和消费者生产者消费者HTTP 协议支持和管控操作Kafka 从生产到消费的全过程总结导图 概述 在学习的过程中,我们会发现 Kafka 和 RocketMQ 的架构是非常像的,那为什么还要单独来分析 Kafka 呢?…

脑电相关临床试验及数据分析

临床试验设计 作为一个医疗器械公司的开发–>算法–>项目–>产品&#xff0c;还是想在这里记录一下工作。 直接开始吧 临床试验的设计&#xff0c;主要分为20个部分&#xff0c;分别是 封面 一、申办者信息 二、所有临床试验机构和研究者列表 三、临床试验的目的和…

计算机视觉与深度学习-全连接神经网络-详解梯度下降从BGD到ADAM - [北邮鲁鹏]

文章目录 参考文章及视频导言梯度下降的原理、过程一、什么是梯度下降&#xff1f;二、梯度下降的运行过程 批量梯度下降法(BGD)随机梯度下降法(SGD)小批量梯度下降法(MBGD)梯度算法的改进梯度下降算法存在的问题动量法(Momentum)目标改进思想为什么有效动量法还有什么效果&…

硬件学习 PAD9.5 day02 原理图绘制中的操作,PCB 封装的制作

1. 原理图中的连线操作 1.1 点击连线按钮 1.2 点击需要连线的地方连接即可 1.3 双击即可停止连线 2. 原理图的总线绘制 2.1 按下总线绘制按钮 2.2 画一条总线 总线名称 总线名字 [ 起始数字 &#xff1a; 结束数字 ] 2.3 分线连接总线 注意&#xff1a;原理图的连线…

【Java 基础篇】Java 多线程详解

多线程是 Java 编程中的一个重要概念&#xff0c;它允许程序同时执行多个任务&#xff0c;提高了程序的性能和响应能力。本篇博客将深入探讨 Java 多线程&#xff0c;从基础概念到实际应用&#xff0c;适用于 Java 初学者和希望深入了解多线程的开发人员。 什么是多线程&#…

【JS】—垃圾回收机制

一、指令材料 1.定义 JavaScript&#xff08;JS&#xff09;的垃圾回收机制是一种自动管理内存的过程&#xff0c;它有助于释放不再使用的内存&#xff0c;以避免内存泄漏和提高程序的性能。 JavaScript的垃圾回收机制是一种自动管理内存的方式&#xff0c;以确保不再被引用的…

【RocketMQ】路由中心NameServer

【RocketMQ】路由中心NameServer 参考资料&#xff1a; RocketMQ Nameserver 背后的设计理念 RocketMQ之NameServer详解 深入剖析RocketMQ源码-NameServer —— vivo互联网技术 《RocketMQ技术内幕》 文章目录 【RocketMQ】路由中心NameServerNameServer架构设计NameServer工作…

上海亚商投顾:沪指震荡调整 两市成交金额跌破6000亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整&#xff0c;创业板指续创3年多以来新低。ST板块继续走强&#xff0c;*ST柏龙、ST恒久等…