OpenAI研究 DALL·E 2 预训练缓解
为了 与广大观众分享DALL·E 2的魔力,我们需要降低与强大的图像生成模型相关的风险。为此,我们设置了各种 防护措施 ,以防止生成的图像违反我们的 内容政策。
为了 与广大观众分享DALL·E 2的魔力,我们需要降低与强大的图像生成模型相关的风险。为此,我们设置了各种 防护措施 ,以防止生成的图像违反我们的 内容政策。这篇文章的重点是 预训练缓解措施, 这些护栏的一个子集直接修改 DALL·E 2 从中学习的数据。特别是,DALL·E 2 接受了来自互联网的数亿张带字幕图像的训练,我们删除并重新加权了其中一些图像以改变模型的学习内容。
这篇文章分为三个部分,每个部分描述了不同的预训练缓解措施:
- 在第一部分中,我们描述了如何从 DALL·E 2 的训练数据集中过滤掉暴力和色情图像。如果没有这种缓解措施,模型将学会在提示时生成图形或显式图像,甚至可能无意中返回此类图像以响应看似无害的提示。
- 在第二部分中,我们发现过滤训练数据会放大偏差,并描述了我们减轻这种影响的技术。例如,如果没有这种缓解措施,我们注意到与在原始数据集上训练的模型相比,在过滤数据上训练的模型有时会生成更多描绘男性的图像和更少描绘女性的图像。
- 在最后一节中,我们转向记忆问题,发现像 DALL·E 2 这样的模型有时可以重现他们训练过的图像,而不是创造新的图像。在实践中,我们发现这种 图像反流 是由数据集中多次复制的图像引起的,并通过删除在视觉上与数据集中其他图像相似的图像来缓解这个问题。
减少图形和显式训练数据
由于训练数据塑造了任何学习模型的能力,因此数据过滤是限制不良模型能力的强大工具。在训练 DALL·E 2 之前,我们通过使用分类器从数据集中过滤出这些类别的图像,将这种方法应用于两个类别——描绘图形暴力和性内容的图像。我们在内部训练了这些图像分类器,并继续研究数据集过滤对我们训练模型的影响。
为了训练我们的图像分类器,我们重复使用了之前用于过滤 GLIDE训练数据的方法。这种方法的基本步骤如下:首先,我们为要标记的图像类别创建规范;其次,我们为每个类别收集了数百个正面和负面的例子;第三,我们使用主动学习程序来收集更多数据并提高精确度/召回率的权衡;最后,我们使用保守的分类阈值在整个数据集上运行生成的分类器,以支持召回率而不是精度。为了设置这些阈值,我们优先过滤掉所有 不良 数据,而不是保留所有良好 数据 数据。这是因为我们以后总是可以用更多的数据来微调我们的模型来教它新的东西,但是让模型忘记它已经学过的东西要困难得多。
在主动学习阶段,我们通过为可能困难或错误分类的图像收集人工标签来迭代改进我们的分类器。值得注意的是,我们使用了两种主动学习技术从我们的数据集中(包含数亿张未标记图像)中选择图像,以呈现给人类进行标记。首先,为了降低我们分类器的误报率(即,它将良性图像错误分类为暴力或性行为的频率),我们将人类标签分配给当前模型分类为阳性的图像。为了使这一步运作良好,我们将分类阈值调整为接近 100% 的召回率,但假阳性率很高;这样一来,我们的贴标签者主要是在给真正的负面案例贴上标签。
为了降低分类器的漏报率,我们采用了第二种主动学习技术:最近邻搜索。特别是,我们运行了多次交叉验证以在我们当前标记的数据集中找到正样本,而模型往往将其错误分类为负样本(为此,我们实际上训练了数百个具有不同训练验证拆分的分类器版本)。然后,我们在感知特征空间中扫描大量未标记图像以寻找这些样本的最近邻居,并将人类标签分配给发现的图像。得益于我们的计算基础设施,将分类器训练和最近邻搜索扩展到许多 GPU 是微不足道的,从而允许主动学习步骤在几分钟而不是几小时或几天内完成。
为了验证我们的数据过滤器的有效性,我们训练了两个具有相同超参数的 GLIDE 模型:一个在未过滤的数据上,一个在过滤后的数据集上。我们称前者为 未过滤模型,后者为 过滤模型。正如预期的那样,我们发现过滤后的模型通常会生成不太露骨或图形的内容来响应对此类内容的请求。然而,我们还发现了数据过滤的一个意想不到的副作用:它创建或放大了模型对某些人口统计数据的偏见。

未经过滤

已过滤
修复数据过滤器引入的偏差
生成模型试图匹配其训练数据的分布,包括其中的任何偏差。因此,过滤训练数据有可能在下游模型中产生或放大偏差。一般来说,修复原始数据集中的偏差是一项艰巨的社会技术任务,我们将继续研究,并且超出了本文的范围。我们在这里解决的问题是由数据过滤本身引起的偏见放大。通过我们的方法,我们的目标是防止过滤后的模型比 未过滤的模型更 偏向,从根本上减少由数据过滤引起的分布偏移。
作为过滤导致偏差放大的具体示例,请考虑提示“a ceo”。当我们未过滤的模型针对此提示生成图像时,它往往会生成比女性更多的男性图像,我们预计这种偏差大部分反映了我们当前的训练数据。然而,当我们通过过滤模型运行相同的提示时,偏差似乎被放大了;几代人几乎完全是男人的形象。
我们假设这种偏差放大的特殊情况来自两个地方:首先,即使女性和男性在原始数据集中的代表性大致相等,数据集也可能偏向于在更性感的背景下呈现女性;其次,我们的分类器本身可能由于实现或类定义而存在偏差,尽管我们努力确保在数据收集和验证阶段不会出现这种情况。由于这两种影响,我们的过滤器可能会删除比男性更多的女性图像,这会改变模型在训练中观察到的性别比例。
为了更彻底地调查过滤器引起的偏差,我们想要一种方法来衡量我们的数据过滤器对各种概念的偏差有多大影响。值得注意的是,我们的暴力和色情内容过滤器纯粹是基于图像的,但我们数据集的多模态特性使我们能够直接衡量这些过滤器对文本的影响。由于每张图片都附有文字说明,因此我们能够查看过滤和未过滤数据集中手动选择的关键字的相对频率,以估计过滤器对任何给定概念的影响程度。
为了将其付诸实践,我们使用 Apache Spark 计算了过滤和未过滤数据集中所有字幕中少数关键字(例如,“父母”、“女人”、“孩子”)的频率。尽管我们的数据集包含数亿个文本图像对,但使用我们的计算集群计算这些关键词频率只需要几分钟。
在计算关键字频率后,我们能够确认我们的数据集过滤器确实比其他关键字更偏斜某些关键字的频率。例如,过滤器将“女人”一词的频率降低了 14%,而“男人”一词的频率仅降低了 6%。这在很大程度上证实了我们已经通过从在两个数据集上训练的 GLIDE 模型中抽样观察到的轶事。
现在我们有了测量滤波器引起的偏差的代理,我们需要一种方法来减轻它。为了解决这个问题,我们的目标是重新加权过滤后的数据集,使其分布更好地匹配未过滤图像的分布。作为说明这个想法的玩具示例,假设我们的数据集包含 50% 的猫照片和 50% 的狗照片,但我们的数据过滤器删除了 75% 的狗,但只删除了 50% 的猫。最终的数据集将是 ⅔ 猫和 ⅓ 狗,并且在该数据集上训练的基于似然的生成模型可能会生成比狗更多的猫图像。我们可以通过将每张狗图像的训练损失乘以 2 来解决这种不平衡,模拟将每张狗图像重复两次的效果。事实证明,我们可以以一种很大程度上自动的方式将这种方法扩展到我们的真实数据集和模型——也就是说,
我们使用来自特殊分类器的概率计算过滤数据集中图像的权重,类似于 Choi 等人使用的方法。(2019)。为了训练这个分类器,我们从两个数据集中统一采样图像并预测图像来自哪个数据集。特别是,该模型预测 P(unfiltered|image),给定先验 P(unfiltered) = 0.5. 在实践中,我们不希望这个模型太强大,否则它可能会首先学习我们的过滤器实现的确切功能。相反,我们希望模型比我们的原始数据过滤器更平滑,捕获受过滤器影响的广泛类别,同时仍然不确定特定图像是否会被过滤。为此,我们在小型 CLIP 模型上训练了一个线性探针。
一旦我们有了一个分类器来预测图像来自未过滤数据集的概率,我们仍然需要将此预测转换为图像的权重。例如,假设 P(unfiltered|image) = 0.8。这意味着样本在未过滤数据中出现的可能性是过滤数据的 4 倍,权重 4 应该可以纠正这种不平衡。更一般地,我们可以使用权重 P(unfiltered|image)/P(filtered|image)。A[A]
当我们将P(unfiltered|image)参数 化为 sigmoid(f(x))时,权重就是 exp(f(x))。这可以使用 sigmoid 的定义推导出来:
1 / ( 1+电子−f ( x )) / ( 1−1 / ( 1+电子−f ( x )))
=1 / ( 1+电子− f ( x )) / (( 1+电子− f ( x )−1 ) / ( 1+电子− f ( x )))
=1 / ( 1+电子− f ( x )) / ( (− f ( x )) / ( 1+电子− f ( x )))
=( 1+电子−f ( x )) / ( 1+电子−f ( x )) / ( e−f ( x ))
=1 / (− f ( x ))=电子f ( x )
这种重新加权方案实际上在多大程度上减轻了放大的偏差?当我们使用新的加权方案微调我们之前的过滤模型时,微调模型的行为与我们之前发现的有偏差示例的未过滤模型更加匹配。虽然这令人鼓舞,但我们还想使用我们基于关键字的偏见启发式方法更彻底地评估这种缓解措施。为了在考虑我们的新加权方案的同时测量关键字频率,我们可以简单地通过包含它的样本的权重对过滤数据集中关键字的每个实例进行加权。这样做,我们得到一组新的关键字频率,反映过滤数据集中的样本权重。
在我们检查的大多数关键字中,重新加权方案减少了过滤引起的频率变化。对于我们之前的“男人”和“女人”示例,相对频率降低了 1% 和 –1%,而他们之前的值分别为 14% 和 6%。虽然这个指标只是实际过滤偏差的代表,但令人欣慰的是,我们基于图像的重新加权方案实际上显着改善了基于文本的指标。
我们正在继续调查 DALL·E 2 中剩余的偏差,部分是通过对模型行为的更大规模评估以及对过滤如何影响偏差和能力发展的调查。
防止图像反流
我们观察到 DALL·E 2 的内部前身有时会逐字复制训练图像。这种行为是不可取的,因为我们希望 DALL·E 2 默认创建原始的、独特的图像,而不仅仅是将现有图像拼接在一起。此外,逐字复制训练图像可能会引发有关侵犯版权、所有权和隐私(如果训练数据中存在人的照片)的法律问题。
为了更好地理解图像反流问题,我们收集了一个经常导致图像重复的提示数据集。为此,我们使用经过训练的模型从我们的训练数据集中对 50,000 个提示的图像进行采样,并根据与相应训练图像的感知相似性对样本进行排序。最后,我们手动检查了最匹配的结果,在 5 万个提示中只发现了几百个真正的重复对。尽管反流率似乎低于 1%,但出于上述原因,我们认为有必要将反流率降至 0。
当我们研究我们的反流图像数据集时,我们注意到了两种模式。首先,这些图像几乎都是简单的矢量图形,由于信息含量低,它们很可能易于记忆。其次,更重要的是,这些图像在训练数据集中都有许多近似重复项。例如,可能有一个矢量图形看起来像一个时钟,显示 1 点钟的时间——但随后我们会发现一个包含相同时钟的训练样本,显示 2 点钟,然后是 3 点钟,等等。一旦我们意识到这一点,我们使用分布式最近邻搜索来验证,确实,所有反流图像在数据集中都有感知相似的重复项。 其他 作品 在大型语言模型中观察到类似的现象,发现数据重复与记忆密切相关。
上述发现表明,如果我们对数据集进行去重,我们可能会解决反流问题。为实现这一目标,我们计划使用神经网络来识别看起来相似的图像组,然后从每组中删除除一张图像之外的所有图像。乙[乙]
为此,我们可以计算一个特征向量 v我的对于每个训练图像 我, 然后删除所有图像 j这样就存在一个 我<j在哪里 ‖‖v _我的−vj的dddd<阈值。为了天真地解决这个问题,我们需要计算每对距离 ‖‖v _我的−vj的dddd,一项与我们的数据集大小成二次比例缩放的任务。
然而,这将需要检查每张图像是否与数据集中的所有其他图像重复。由于我们的整个数据集包含数亿张图像,我们天真地需要检查数百千万亿张图像对才能找到所有重复项。虽然这在技术上是可以实现的,尤其是在大型计算集群上,但我们发现了一种效率更高的替代方案,其效果几乎与成本的一小部分一样好。考虑一下如果我们在执行重复数据删除之前对数据集进行集群会发生什么。由于附近的样本通常属于同一个集群,因此大多数重复对不会跨越集群决策边界。然后,我们可以对每个集群内的样本进行重复数据删除,而无需检查集群外的重复项,同时只丢失所有重复对的一小部分。C[C]
出租 钾代表集群的数量和 否数据集大小,这种方法只需要 O ( K*( N / K )2个)=奥( ñ2个/ K )成对距离计算,而不是完整的 奥( ñ2个). 同时,我们仍然保证没有图像会超过 钾在最坏的情况下几乎重复。
当我们在一小部分数据上凭经验测试这种方法时,它在使用K=1024时发现了所有重复对中的 85% 聚类。为了提高上述算法的成功率,我们利用了一个关键观察结果:当您对数据集的不同随机子集进行聚类时,得到的聚类决策边界通常是完全不同的。因此,如果重复对跨过一个数据聚类的聚类边界,则同一对可能落入不同聚类的单个聚类中。您尝试的聚类越多,您就越有可能发现给定的重复对。实际上,我们决定使用五个聚类,这意味着我们在五个不同聚类的联合中搜索每个图像的副本。实际上,这在我们数据的一个子集上找到了 97% 的重复对。
令人惊讶的是,几乎四分之一的数据集被去重删除了。当我们查看发现的几乎重复的对时,其中许多包含有意义的更改。回忆一下上面的时钟示例:数据集可能包含同一时钟在一天中不同时间的许多图像。虽然这些图像可能会让模型记住这个特定时钟的外观,但它们也可能帮助模型学习区分时钟上的一天中的时间。鉴于删除了多少数据,我们担心像这样删除图像可能会损害模型的性能。
为了测试去重对我们模型的影响,我们训练了两个具有相同超参数的模型:一个在完整数据集上,一个在数据集的去重版本上。为了比较模型,我们使用了与评估原始 GLIDE 模型相同的人工评估。令人惊讶的是,我们发现人类评估者稍微 偏爱 在去重数据上训练的模型,这表明数据集中的大量冗余图像实际上会损害性能。
一旦我们在去重数据上训练了一个模型,我们就会重新运行我们之前从训练数据集中完成的超过 50k 提示的反流搜索。我们发现,当给出训练数据集中图像的确切提示时,新模型从未反省过训练图像。为了进一步进行此测试,我们还对整个训练数据集对 50k 生成的图像中的每一个进行了最近邻搜索。通过这种方式,我们认为我们可能会发现模型反刍与给定提示相关联的图像不同的图像。即使进行了更彻底的检查,我们也从未发现图像反流的情况。
下一步
虽然上面讨论的所有缓解措施都代表着我们在降低与 DALL·E 2 相关的风险的目标方面取得了重大进展,但每项缓解措施仍有改进的空间:
- 更好的预训练过滤器可以让我们在更多数据上训练 DALL·E 2,并可能进一步减少模型中的偏差。我们当前的过滤器以许多误报为代价调整为低误报率。因此,我们过滤掉了整个数据集的大约 5%,尽管这些过滤后的图像中的大多数根本没有违反我们的内容政策。改进我们的过滤器可以让我们回收一些训练数据。
- 在系统开发和部署的许多阶段都会引入并可能放大偏差。评估和减轻 DALL·E 2 等系统中的偏差以及这种偏差引起的危害是一个重要的跨学科问题,作为我们更广泛使命的一部分,我们将继续在 OpenAI 进行研究。我们在这方面的工作包括建立评估以更好地理解问题、管理新数据集以及应用人工反馈和微调等技术来构建更强大和更具代表性的技术。
- 我们继续研究深度学习系统中的记忆和泛化也很重要。虽然重复数据删除是防止记忆的良好开端,但它并没有告诉我们了解 DALL·E 2 等模型为何或如何记忆训练数据的所有信息。
脚注
当我们将P(unfiltered|image)参数 化为 sigmoid(f(x))时,权重就是 exp(f(x))。这可以使用 sigmoid 的定义推导出来:
1 / ( 1+电子−f ( x )) / ( 1−1 / ( 1+电子−f ( x )))
=1 / ( 1+电子− f ( x )) / (( 1+电子− f ( x )−1 ) / ( 1+电子− f ( x )))
=1 / ( 1+电子− f ( x )) / ( (− f ( x )) / ( 1+电子− f ( x )))
=( 1+电子−f ( x )) / ( 1+电子−f ( x )) / ( e−f ( x ))
=1 / (− f ( x ))=电子f ( x )为此,我们可以计算一个特征向量 v我的对于每个训练图像 我, 然后删除所有图像 j这样就存在一个 我<j在哪里 ‖‖v _我的−vj的dddd<阈值。为了天真地解决这个问题,我们需要计算每对距离 ‖‖v _我的−vj的dddd,一项与我们的数据集大小成二次比例缩放的任务。↩︎
出租 钾代表集群的数量和 否数据集大小,这种方法只需要 O ( K*( N / K )2个)=奥( ñ2个/ K )成对距离计算,而不是完整的 奥( ñ2个). 同时,我们仍然保证没有图像会超过 钾在最坏的情况下几乎重复。↩︎
作者
作者
致谢
贡献者
Alex Nichol、Aditya Ramesh、Pamela Mishkin、Prafulla Dariwal、Joanne Jang、Mark Chen
写作贡献来自
Greg Brockman、Aditya Ramesh、Pamela Mishkin、Mark Chen、Pranav Shyam、Casey Chu、Che Chang、Miles Brundage