SPIN-Diffusion:自我博弈微调提升文本到图像扩散模型性能

扩散模型作为生成AI的关键实体,已经在多个领域展现出了卓越的能力。然而,现有的扩散模型,如Stable Diffusion和SDXL,通常在预训练阶段后需要进行微调以更好地符合人类偏好。最近,研究者们开始尝试使用强化学习(RL)来微调扩散模型,但这通常需要每个文本提示至少有两个图像(“胜者”和“败者”)。为了解决这一问题,来自加州大学洛杉矶分校的研究团队提出了一种扩散模型自我博弈微调(SPIN-Diffusion),允许扩散模型与其早期版本进行竞争,从而实现自我迭代改进。

SPIN-Diffusion算法生成的图像示例

方法

自我博弈微调(SPIN)的概念源自于强化学习中的自我对抗策略,其中模型通过与自身先前版本的对抗来实现性能的提升。在文本到图像的扩散模型中,SPIN 允许模型在没有外部人类偏好数据的情况下进行自我迭代改进,通过模拟一个主模型与对手模型之间的竞争。

研究者提出的用于微调扩散模型的新方法采用了自我博弈机制(Self-Play)。这种方法考虑了一个高质量的数据集,其中包含文本提示c 和图像 x0​ 对,目标是将预训练的扩散模型 pθ​ 微调至与数据分布 对齐。不同于直接最小化去噪分数匹配目标函数 LDSM,研究者将自我博弈微调(SPIN)适应到扩散模型中。然而,将 SPIN 应用于扩散模型的微调面临独特挑战,特别是在获取边缘概率 pθ​(x0​∣c) 时,这在大型语言模型(LLMs)中是直接的,但在扩散模型中则需要对所有可能的轨迹进行积分,这在计算上是不可行的。为了解决这个问题,研究者提出了 SPIN-Diffusion 方法,该方法通过使用 DDIM 公式,将目标函数分解,仅需要估计分数函数 ϵθ​。这种方法侧重于整个扩散过程的联合分布,而不是边缘分布,从而有效地解决了计算上的难题。

研究者的目标是训练一个能够区分真实图像和模型生成图像的测试函数。这个测试函数的目的是评估给定文本提示下,一系列扩散步骤生成的图像是否看起来像是从目标数据分布中抽取的。为了实现这一点,测试函数会学习识别图像中的特定特征,这些特征在真实图像中普遍存在,但在模型生成的图像中可能缺失或不同。这个过程涉及到对扩散过程的深入理解,以及如何通过模型生成的图像来模拟这一过程。

一旦有了能够区分真实和合成图像的测试函数,下一步就是通过自对弈来“欺骗”这个测试函数。在这个过程中,扩散模型被训练为对手模型,其目标是生成能够误导测试函数的图像,即使这些图像在质量上与真实图像相媲美。这需要对手模型不断地提高其生成图像的质量和逼真度,从而在测试函数的评估下获得高分。通过这种方式,模型在每一轮自对弈中都会变得更加精细,生成的图像也会更加接近真实数据的分布。

在这一步骤中,研究者面对的是如何优化模型以生成与真实数据分布一致的图像。由于直接计算模型生成图像的边缘概率非常复杂,研究者采用了一种分解策略。这种方法不是一次性考虑整个图像生成过程,而是将其分解为多个小步骤,每个步骤只依赖于当前状态和前一状态。这样,优化目标就被分解为一系列更简单的子问题,每个子问题只涉及到两个连续的状态。这种方法显著降低了计算的复杂性,同时保持了对模型性能的有效优化。

 尽管分解训练目标已经简化了优化过程,但在实际操作中,存储和计算所有中间状态的图像仍然需要大量的计算资源。为了进一步提高效率,研究者提出了一个近似的训练目标。这个近似目标利用了损失函数的凸性质,通过Jensen不等式将期望操作移到损失函数的外面,从而避免了对所有中间状态的显式计算。这样,只需要考虑两个连续的步骤,就可以更新模型的参数。这种方法不仅减少了内存的使用,还加快了训练过程,使得模型能够在有限的计算资源下更快地收敛到更好的解。

实验

实验的配置使用了Stable Diffusion v1.5(SD-1.5)作为基础模型,并在LAION-5B数据集上进行了预训练。Pick-a-Pic数据集被选为微调数据集,它包含了由Dreamlike2和SDXL-beta生成的图像对,以及对应的人类偏好标签。研究者还训练了SD-1.5的监督微调(SFT)和Diffusion-DPO模型作为基线。

评估中使用的三个基准数据集的大小,包括Pick-a-Pic、PartiPrompts和HPSv2
在Pick-a-Pic训练集的一个样本中,获胜图像与失败图像相比在四个评估指标上的胜率

研究者根据人类偏好对齐和视觉吸引力两个维度进行了评估。结果显示,SPIN-Diffusion在第一次迭代后就在多个指标上超越了SFT和Diffusion-DPO方法。特别是在第二次迭代后,SPIN-Diffusion在视觉质量上的表现尤为突出,其在所有评估指标上都优于其他微调方法。

这组图表比较了不同迭代次数的SPIN-Diffusion与SD-1.5、SFT和Diffusion-DPO在Aesthetic得分、PickScore、HPS和ImageReward四个指标上的表现。图表展示了随着迭代次数的增加,SPIN-Diffusion性能的提升
在Pick-a-Pic测试集上,不同模型在PickScore、HPS、ImageReward和Aesthetic四个指标上的平均得分
雷达图综合展示了SPIN-Diffusion在不同迭代次数下与基线方法相比在HPS、Aesthetic、PickScore和Image Reward四个指标上的表现

研究者进一步通过定性分析来展示SPIN-Diffusion生成图像的质量。他们选择了Pick-a-Pic测试数据集中的三个提示,并通过SD-1.5、SFT、Diffusion-DPO和不同迭代次数的SPIN-Diffusion模型生成图像。通过视觉比较,SPIN-Diffusion生成的图像在对齐、阴影、视觉吸引力和细节精细度等方面都有显著提升。

SPIN-Diffusion在不同迭代次数下相对于SD-1.5和Diffusion-DPO (ours)的胜率
不同模型基于Pick-a-Pic测试集的三个提示生成的图像。模型包括SD-1.5、SFT、Diffusion-DPO (ours)以及三个迭代次数的SPIN-Diffusion

研究者还分析了SPIN-Diffusion与SFT和Diffusion-DPO的训练动态。他们观察到SFT在训练了大约50k数据后性能停止提升,而SPIN-Diffusion即使在训练了超过800k数据后仍然在提升。这表明自对弈微调在SPIN-Diffusion的性能提升中起到了关键作用。

SFT、Diffusion-DPO和SPIN-Diffusion在训练过程中Aesthetic得分、PickScore、HPS和平均得分的变化

SPIN-Diffusion作为一种创新的扩散模型微调方法,特别适用于每个文本提示仅提供单一图像的场景。通过自对弈机制,SPIN-Diffusion能够迭代地改进模型性能,最终收敛到目标数据分布。理论证据支持了SPIN-Diffusion的优越性,证明了传统监督微调无法超越其静止点。实证评估突出了SPIN-Diffusion在文本到图像生成任务中的显著成功,甚至在不需要额外数据的情况下也超越了现有的最先进微调方法。

论文链接:https://arxiv.org/abs/2402.10210

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

矩阵键盘与密码锁

目录 1.矩阵键盘介绍​编辑 2.扫描的概念 3.代码演示(读取矩阵键盘键码) 4.矩阵键盘密码锁 1.矩阵键盘介绍 为了减少I/O口的占用,通常将按键排列成矩阵形式,采用逐行或逐列的 “扫描”,就可以读出任何位置按键的状态…

jenkins配置gitee源码地址连接不上

报错信息如下: 网上找了好多都没说具体原因,最后还是看jenkins控制台输出日志发现: ssh命令执行失败(git环境有问题,可能插件没安装成功等其他问题) 后面发现是jenkins配置git的地方git安装路径错了。新手…

帕金森病患者在选择运动疗法时应该注意哪些事项?

帕金森病患者在选择运动疗法时,应该遵循以下几点注意事项: 个性化运动处方:根据患者的病情、年龄、健康状况、以往运动能力等因素,制定个体化的运动处方。 避免运动负荷过大:运动时间不宜过长,注意控制心率…

机器学习 C++ 的opencv实现SVM图像二分类的测试 (三)【附源码】

机器学习 C 的opencv实现SVM图像二分类的测试 (三) 数据集合下载地址&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 根据上节得到的svm.xml&#xff0c;测试结果为&#xff1a; #include <stdio.h> #include <time.h> #include <o…

智慧生活新篇章,Vatee万腾平台领航前行

在21世纪的科技浪潮中&#xff0c;智慧生活已不再是一个遥远的梦想&#xff0c;而是正逐步成为我们日常生活的现实。从智能家居的温馨便捷&#xff0c;到智慧城市的高效运转&#xff0c;科技的每一次进步都在为我们的生活增添新的色彩。而在这场智慧生活的变革中&#xff0c;Va…

stm32定时器与pwm波

文章目录 4 TIM4.1 SysTick系统定时器4.2 TIM定时器中断与微秒级延时4.3 TIM使用PWM波4.3.1 PWM介绍4.3.2 无源蜂鸣器实现 4.4 TIM ,PWM常用函数 4 TIM 4.1 SysTick系统定时器 ​ Systick系统滴答&#xff0c;&#xff08;同时他有属于自己的中断&#xff0c;可以利用它来做看…

Star CCM+界面显示字体大小调整

前言 打开界面字体显示大小是默认的&#xff0c;软件内设置调整默认字体的大小是无法实现&#xff0c;需要在图标属性中进行设置&#xff0c;操作方法与中英文切换很类似&#xff0c;具体方法如下&#xff1a; 操作流程 1. 右击Star-CCM快捷⽅式&#xff0c;选择“属性”&…

【Mindspore进阶】-03.ShuffleNet实战

ShuffleNet图像分类 当前案例不支持在GPU设备上静态图模式运行&#xff0c;其他模式运行皆支持。 ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有…

lodash-es 基本使用

中文文档&#xff1a;https://www.lodashjs.com/ cloneDeep方法文档&#xff1a;https://www.lodashjs.com/docs/lodash.cloneDeep#_clonedeepvalue 参考掘金文章&#xff1a;https://juejin.cn/post/7354940462061715497 安装&#xff1a; pnpm install lodash-esnpm地址&a…

Ad-hoc命令和模块简介

华子目录 Ad-hoc命令和模块简介1.概念2.格式3.Ansible命令常用参数4.模块类型4.1 三种模块类型4.2Ansible核心模块和附加模块 示例1示例2 Ad-hoc命令和模块简介 1.概念 Ansible提供两种方式去完成任务&#xff0c;一是ad-hoc命令&#xff0c;一是写Ansible playbook(剧本)Ad-…

理解抽象工厂设计模式

目录 抽象工厂模式抽象工厂模式结构抽象工厂模式适合应用场景抽象工厂模式优缺点练手题目题目描述输入描述输出描述提示信息题解 抽象工厂模式 抽象工厂模式是一种创建型设计模式&#xff0c; 它能创建一系列相关的对象&#xff0c; 而无需指定其具体类。 抽象工厂模式结构 抽…

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

nginx的知识面试易考点

Nginx概念 Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发&#xff0c;性能是其最重要的考量指标&#xff0c;实现上非常注重效率&#…

EasyExcel 单元格根据图片数量动态设置宽度

在使用 EasyExcel 导出 Excel 时&#xff0c;如果某个单元格是图片内容&#xff0c;且存在多张图片&#xff0c;此时就需要单元格根据图片数量动态设置宽度。 经过自己的研究和实验&#xff0c;导出效果如下&#xff1a; 具体代码如下&#xff1a; EasyExcel 版本 <depen…

SQL使用join查询方式找出没有分类的电影id以及名称

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 现有电影信息…

UE5 03-物体碰撞检测

在你需要碰撞的物体上添加一个碰撞检测组件 碰撞预设 设置为NoCollision,这样移动过程中就不会有物理碰撞阻挡效果,只负责检测是否碰撞,比较难解释,如果学过Unity的话,可以把它理解成 Collision 为 Trigger -------------------下面这个有点像Unity的OnTriggerEnter,跟OnColli…

TinyDB,既是python模块也是数据库

目录 什么是TinyDB&#xff1f; 为什么选择TinyDB&#xff1f; 安装TinyDB TinyDB的基本使用 创建数据库 存储数据 查询数据 更新数据 删除数据 高级功能 索引 事务 结论 什么是TinyDB&#xff1f; 在Python的世界中&#xff0c;处理数据是编程中不可或缺的一部分…

【优化论】基本概念与细节

优化论&#xff08;Optimization Theory&#xff09;是数学和计算机科学中一个重要的分支&#xff0c;旨在寻找给定问题的最优解。这个领域的应用非常广泛&#xff0c;从经济学、工程学到机器学习、金融等各个领域都有其踪迹。我们可以通过一系列直观的比喻来理解优化论的基本概…

这篇文章演示几种典型的编程模式

依赖注入使我们可以将依赖的功能定义成服务&#xff0c;最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了可以采用依赖注入的形式消费承载某种功能的服务&#xff0c;还可以采用相同的方式消费承载配置数据的Options对象&#xff0c;这篇文章演示几种典型的编程模式…

Unity 简单载具路线 Waypoint 导航

前言 在游戏开发和导航系统中&#xff0c;"waypoint" 是指路径中的一个特定位置或点。它通常用于定义一个物体或角色在场景中移动的目标位置或路径的一部分。通过一系列的 waypoints&#xff0c;可以指定复杂的移动路径和行为。以下是一些 waypoint 的具体用途&…