【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法

news/2024/7/8 1:06:26

近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型,可以从简单的图片描述中生成高质量的提示词,从而使文生图模型能够生成更美观的图像。BeautifulPrompt通过对低质量和高质量的提示进行微调,并进一步提出了一种基于强化学习和视觉信号反馈的技术,以最大化生成提示的奖励值。

论文:

Tingfeng Cao, Chengyu Wang, Bingyan Liu, Ziheng Wu, Jinhui Zhu, Jun Huang. BeautifulPrompt: Towards Automatic Prompt Engineering for Text-to-Image Synthesis. EMNLP 2023 (Industry Track)

背景

文生图是AIGC中最引人注目和广泛应用的技术之一,旨在通过文本输入创建逼真的图像。最近,随着大型模型建模能力的提升,文生图模型得到快速的发展。大规模的TIS模型,如DALLE-2、Imagen和stable diffusion,显著提高了最先进的性能,并允许没有艺术专业知识的用户通过个人想象力创建前所未有的图像。

然而,文成图模型要求用户在模型推理之前编写文本提示(例如“一艘雄伟的帆船”)。编写满足设计师或艺术工作者需求的这些提示充满了不确定性,就像开盲盒一样。这是由于训练数据的质量问题,导致需要详细的描述才能生成高质量的图像。在现实场景中,非专家往往很难手工编写这些提示,并且需要通过试错的迭代修改来重新生成图像,从而导致时间和计算资源的严重浪费。

提示工程(prompt engineering)是一个新兴的研究领域,旨在探索如何为深度生成模型提供提示,并提高人与AI之间直接交互的效率。因此,我们关注于大语言模型(LLM)自动地生成高质量的提示词,下图展示了使用简单的图片描述和BeautifulPrompt之后生产的图片。

算法概述

数据收集

我们提出一个自动化收集prompt优化的数据集方案:

原始数据源是DiffusionDB,它只包含未配对的提示。启发式地,我们根据提示的长度、提示中包含的某些标签等将提示分为低质量提示和高质量提示。

接下来,我们

i)使用BLIP 对与高质量提示相关的图像进行caption,并将结果视为相应的低质量提示,因为说明文字较短且缺乏细节;

ii)使用ChatGPT对高质量的提示进行总结,并将总结视为低质量的提示;

iii)使用ChatGPT从低质量的提示生成更好的提示;结果被认为是高质量的提示。

通过以上三种方法,我们获得了大量的提示对;然而,这些提示对的质量无法保证。因此,我们需要进行进一步的数据清理和过滤。我们清洗了包含色情、政治敏感等不适合工作场景的数据,并对图片的美观值进行筛选。得到最终的数据集。与InstructGPT类似,我们采用了三阶段的训练,整体训练架构图如下:

Step 1. SFT

给定提示对的数据集D=\{(\mathbf{x},\mathbf{y})\},其中包含低质量提示对\mathbf{x}和高质量提示对\mathbf{y},我们对仅解码器语言模型(BLOOM)进行微调,以输出具有给定指令和低质量提示的高质量令牌token\mathbf{y} = \{y_1, ..., y_n \}

我们使用自回归语言建模目标来微调语言模型:

\mathcal{L}_{sft} = - \sum_i \log P(y_i\mid \mathbf{x}, y_1, ..., y_{i-1})

Step 2. RM

我们基于PickScore 和 Aesthetic Score来训练奖励模型。

简单地说,PickScore是一个基于文本到图像提示和真实用户偏好的大型数据集训练的偏好模型,它在预测人类对图像的偏好方面表现出超人的表现。我们计算低质量提示和相应高质量提示生成的图像的PickScore。为了减少随机种子对TIS模型生成的图像质量的影响,我们使用8种不同的随机种子生成图像并对结果进行平均。计算的平均PickScore\mathbb{PS} 被用作训练奖励模型的基础真相。损失函数为:

\mathcal{L}_{ps} = - \frac{1}{N}\sum_i^N \text{MSE}(r_{ps}(\mathbf{x}, \mathbf{y}), \mathbb{PS}),

其中r_{ps}(\mathbf{x}, \mathbf{y})是提示对(\mathbf{x},\mathbf{y})的奖励模型的标量输出。MSE是均方误差。N为样本总数。

类似地,奖励模型还被训练以将图像中的相应提示与美学分数匹配\mathbb{AES}:

其中r_{aes}(\mathbf{y})是奖励模型的标量输出。

最后,我们使用\alpha作为平衡因子,将两个奖励模型的得分组合为最终奖励:

r(\mathbf{x}, \mathbf{y}) = \alpha \cdot r_{ps}(\mathbf{x}, \mathbf{y}) + (1 - \alpha) \cdot r_{aes}

Step 3. PPO(RL)

由于收集到的数据集不可避免地包含一些噪声,例如,低质量提示与相应的高质量提示之间的一致性相对较低,因此监督训练模型\rho的性能可能不令人满意。为了进一步提高模型性能,我们初始化一个策略\pi = \rho,然后微调\pi来使用强化学习执行任务。我们利用近端策略优化(PPO) 算法直接优化预期奖励:

\mathbb{E}_{\mathbf{x}\sim D, \mathbf{y} \sim \pi(\cdot \mid \mathbf{x})} [r(\mathbf{x}, \mathbf{y}) - \beta\cdot\log \frac{\pi(\mathbf{y}\mid\mathbf{x})}{\rho (\mathbf{y}\mid\mathbf{x})}],

其中\beta为Kullback-Leibler (KL)罚系数。它可以防止政策偏离\rho。我们在这里采用自适应KL惩罚。

算法评测

为了验证BeautifulPrompt的有效性,我们在一些基于模型打分的客观指标和人类主观评估上做了实验:

我们也对算法的模块进行了详细有效性分析,我们可以算法的各个流程都是有效的。

为了更好地服务开源社区,BeautifulPrompt算法的源代码即将贡献在自然语言处理算法框架EasyNLP中,欢迎NLP从业人员和研究者使用。

EasyNLP开源框架:GitHub - alibaba/EasyNLP: EasyNLP: A Comprehensive and Easy-to-use NLP Toolkit

参考文献

  • Chengyu Wang, Minghui Qiu, Taolin Zhang, Tingting Liu, Lei Li, Jianing Wang, Ming Wang, Jun Huang, Wei Lin. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. EMNLP 2022
  • Stiennon, Nisan, et al. "Learning to summarize with human feedback." Advances in Neural Information Processing Systems 33 (2020): 3008-3021
  • Rombach, Robin, et al. "High-resolution image synthesis with latent diffusion models." Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2022
  • Kirstain, Yuval, et al. "Pick-a-pic: An open dataset of user preferences for text-to-image generation." arXiv preprint arXiv:2305.01569 (2023)

论文信息

论文标题:BeautifulPrompt: Towards Automatic Prompt Engineering for Text-to-Image Synthesis
论文作者:曹庭锋、汪诚愚、刘冰雁、吴梓恒、朱金辉、黄俊
论文pdf链接:https://arxiv.org/abs/2311.06752


http://lihuaxi.xjx100.cn/news/1883961.html

相关文章

使用C++和双指针算法移除数组中的元素,且原地移除,不使用额外的空间

输入一个数组nums和一个值val&#xff0c;在该数组中&#xff0c;凡是与val相等的元素全部移除&#xff0c;并最终输出该数组&#xff0c;C代码如下&#xff1a; #include<iostream> #include<vector> #include<ctime>//计算代码所需要的时间 using namespac…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现

第一章 SpringIOC底层实现 IOC&#xff1a;将对象的控制器反转给Spring 1.1 BeanFactory与ApplicationContexet BeanFactory&#xff1a;IOC容器的基本实现&#xff0c;是Spring内部的使用接口&#xff0c;是面向Spring本身的&#xff0c;不是提供给开发人员使用的。****Appli…

用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS

学习冯诺伊曼体系结构之前&#xff0c;我们要本着两个问题来学习&#xff1a; 什么是冯诺伊曼体系结构&#xff1f;为什么要有冯诺伊曼体系结构&#xff1f; 一、冯诺伊曼体系结构 1. 什么是冯诺伊曼体系结构&#xff1f; 那我们就先来回答一下什么是冯诺伊曼体系结构&#x…

[cleanrl] ppo_continuous_action源码解析

1 import库&#xff08;略&#xff09; import os import random import time from dataclasses import dataclassimport gymnasium as gym import numpy as np import torch import torch.nn as nn import torch.optim as optim import tyro from torch.distributions.normal…

C++入门【6-C++ 修饰符类型】

C 修饰符类型 C 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字&#xff0c;它更能满足各种情境的需求。 下面列出了数据类型修饰符&#xff1a; signed&#xff1a;表示变量可以存储负数。对于整型变量来说&#xff0c;signe…

RealSense最简单配置环境只需要5分钟,不用自行添加任何包含目录、库目录。Visual Studio2022、C++。

又开始搞点云了&#xff0c;现在用的是Intel的realsense。 看网上步骤都挺繁琐的&#xff0c;本文搭建只需要3分钟。直接用官方提供的属性表&#xff0c;不用自行添加任何包含目录、库目录。 第一分钟&#xff1a;用Visual Studio新建一个工程&#xff08;此时你是没有intel.…

FTR223限时回归?经典三花再加金翅膀,CL500特别款亮相

FTR223可以说是非常经典的一款本田小攀爬车型了&#xff0c;之前我还有幸玩过一段时间&#xff0c;最近本田在泰国车展上展出了CL500的特别版&#xff0c;其中FTR223纪念版的版画让人眼前一亮&#xff0c;经典的白、红、蓝三色搭配让人眼前一亮。 CL500这台车在国内今年刚上市&…

手撕分布式缓存---HTTP Server搭建

经过了前两个章节的学习&#xff0c;分布式缓存的存储与新增我们已经实现了&#xff0c;并且对其做了高可用处理。本章节我们剥离和缓存强相关的逻辑&#xff0c;开始搭建一个HTTP服务器&#xff0c;毕竟缓存数据库搭建完之后别人没法访问也是没有用处的。这一章节我们重点学习…