作者:Chris McCormick
如果你不知道如何使用 ChatGPT 或者 Midjiourney。那本教程应该能帮到你。这是一份教你如何更好地使用 ChatGPT 和 Midjourney 的免费教程。
计算机仅从书面描述中生成艺术的能力令人着迷!我知道,作为一个人,我会非常好奇地想知道“幕后”到底发生了什么,这将使这成为可能,所以我想在这里尽我所能,为那些不熟悉人工智能概念的人提供一个不那么肤浅的解释。
概述
在第一部分中,我将向您提供高级解释(您可能已经熟悉)。这是一个好的开始,但我知道它不会满足我的好奇心。😉 我会问,“好吧,太好了,但它是怎么做到的呢?
为了解决这个问题,我将向你展示 Stable Diffusion 的一些内部工作原理。内部情况比你希望的要复杂得多,但我至少想更具体地向你展示发生了什么,这样它就不再是一个完全的谜。
更具体地说:
- Stable Diffusion 是一个巨大的神经网络。
- 神经网络是纯粹的数学。
- 事实是,我们并不完全知道它在做什么!
- 最终,Stable Diffusion 之所以有效,是因为我们对其进行了训练。
但是,让我们从更大的图景开始!
稳定扩散可去除图像中的噪点
如果您曾经尝试在太暗的情况下拍摄照片,但照片看起来都是颗粒状的,那么这种颗粒感就是图像中“杂色”的一个示例。
我们使用 Stable Diffusion 来生成艺术,但它实际上在幕后做的是 “清理” 图像!
不过,它比手机图像编辑器中的降噪滑块要复杂得多。它实际上对世界是什么样子的理解,以及对书面语言的理解,并利用这些来指导这个过程。
例如,想象一下,如果我把左边的下图给一位熟练的图形艺术家,并告诉他们这是一幅外星人弹吉他的画,风格是 H.R. Giger。我敢打赌,他们可能会进去煞费苦心地清理它,以创建类似于右边图像的东西。
(这些是来自 Stable Diffusion 的实际图像!
艺术家会利用他们对 Giger 艺术作品的了解以及对世界的了解(例如吉他应该是什么样子以及你如何弹奏吉他)来做到这一点。Stable Diffusion 本质上也在做同样的事情!
“推理步骤”
您是否熟悉大多数艺术生成工具中的“Inference Steps”(推理步骤)滑块?Stable Diffusion 逐步去除杂色。
下面是运行 25 个步骤的示例:
外星吉他手的例子更有意义,因为你可以更清楚地看出它应该是什么……但在上图中,起始图像看起来完全无法辨认!
事实上,那个嘈杂的外星人例子实际上是从过程的一半开始的——它实际上一开始也是完全的噪音!
它是如何开始的?
为了生成艺术,我们给 Stable Diffusion 一个起始图像,它实际上只不过是纯粹的噪声。但是,相当残酷的是😏,我们撒谎说:“这是一幅超级嘈杂的画,画的是一个外星人以 H.R. Giger 的风格弹吉他——你能帮我清理一下吗?
如果你把这个任务交给平面艺术家,他们会举手——“我帮不了你,这张图片完全面目全非!
那么 Stable Diffusion 是怎么做到的呢?
在最简单的层面上,答案是它是一个计算机程序,它别无选择,只能做它的事情并为我们生产一些东西。
更深层次的答案与这样一个事实有关,即像 Stable Diffusion 这样的 AI 模型(更技术上说,是“机器学习”模型)在很大程度上基于统计数据。他们估计所有选项的概率,即使所有选项的正确概率都极低,他们仍然只选择概率最高的路径。
因此,例如,它对吉他在图像中可能出现的位置有一些想法,并且可以寻找噪声中看起来最像吉他边缘的任何部分(即使确实没有“正确”的选择),并开始填充内容。
既然没有正确的答案,每次你给它一个不同的纯噪声图像时,它都会得到一个不同的艺术品!
如何对 Stable Diffusion 进行编程?
如果我不熟悉机器学习,并且我试图猜测它实际上是如何实现的,我可能会开始考虑如何对其进行编程。换句话说,它遵循的步骤顺序是什么?
也许它会匹配描述中的关键字来搜索与描述匹配的图像数据库,然后将它们与噪声进行比较?从那家伙的解释来看,听起来它可能从计算图像中最强的边缘在哪里开始?🤷♂️
事实并非如此——它没有可供参考的图像数据库,它不使用任何图像处理算法……这是纯粹的数学。
我的意思并不是说“嗯,当然,计算机最终只是大型计算器,它们所做的一切都归结为数学”。我说的是“黑板上令人眼花缭乱的方程式”类型的数学,如下所示:
(这是我写的一篇技术教程,上面写的是一个关于 Stable Diffusion 的众多构建块,叫做 “Attention”。
定义每个不同构建块的全套方程至少可以填满几页。
数字形式的图像和文本
为了应用这些方程式,我们需要将初始噪声图像和文本描述表示为大数字表。
您可能已经熟悉图像的表示方式,但让我们看一个示例。这是我在涨潮时拍摄的一张长曝光照片:
以下是它的数学表示方式。它是 512 x 512 像素,因此我们将其表示为具有 512 行和 512 列的表格。但实际上,我们需要三个表格来表示一个图像,因为每个像素都由红色、绿色和蓝色 (RGB) 的混合体组成。以下是上图的实际值。
在 Stable Diffusion 中,我们还处理文本。以下是我可能会为这张图片写的描述:
A long exposure color photograph of decaying concrete steps leading down into the ocean, with concrete railings, head on view, symmetry, dream like, atmospheric.
(中文:一张长曝光彩色照片,描绘了朽迹斑斑的混凝土台阶伸向海洋,混凝土栏杆两旁,正面视角,对称美感,如梦如幻,充满艺术气氛。)
这是如何表示为数字表的。每个单词有一行,每个单词由 768 个数字表示。这些是 Stable Diffusion v1.5 中用于表示这些单词的实际数字:
我们如何选择数字来代表一个单词是一个引人入胜的话题,但也相当技术性。你可以粗略地将这些数字视为每个数字代表一个词含义的不同方面。
在机器学习中,我们实际上并不将这些称为“表”,而是使用术语“矩阵”或“张量”。这些来自线性代数领域。
不过,这一切中最重要和最令人费解的部分是参数的概念。
十亿个参数
初始噪声和文本描述就是我们所说的 Stable Diffusion 的输入,不同的输入在这些表中会有不同的值。
不过,我们也将这些方程式中插入了一组大得多的数字,这些数字每次都是相同的——这些被称为稳定扩散的参数。
还记得高中时用 y = 3x + 2
等方程绘制的线条吗?
如果这是 Stable Diffusion,那么 ‘x’ 是我们的输入,’y’ 是最终图像,数字 3 和 2 是我们的参数。(当然,方程要复杂😝得多)。
输入图像由大约 790k 个值表示,而我们提示中的 33 个“标记”由大约 25k 个值表示。
但是 Stable Diffusion 中大约有 10 亿个参数。🤯
(你能想象手动计算所有这些数学运算吗?!?)
这 10 亿个数字分布在大约 1100 个大小不同的矩阵中。每个矩阵在数学中的不同点使用。
如果您好奇,我已经在这里打印了这些矩阵的完整列表!
同样,这些参数不会改变 – 每次生成图像时,它们都是相同的数字。
Stable Diffusion 之所以有效,是因为我们找到了用于这 10 亿个数字的正确值。这有多荒谬?!
选择 10 亿个参数
显然,作者不可能坐下来决定尝试什么数字。特别是当你考虑到它们不是像 1,2,3 这样的“整数”,而是我们计算机书所说的“浮点”值时——你在表格中看到的非常精确的小分数。
我们不仅没有选择这些数字——我们甚至无法解释其中的任何一个!这就是为什么我们无法完全解释 Stable Diffusion 是如何工作的。我们对这些方程式的作用有一些不错的直觉,但很多事情都隐藏在这些数字的值中,我们无法完全理解它。
太疯狂了,对吧?
那么我们如何弄清楚它们呢?
我们首先挑选 10 亿个随机数来使用。对于这些初始随机参数值,模型完全无用——在我们找出更好的参数值之前,它无法做任何有价值的事情。
因此,我们应用了一个我们称为 training 的数学过程,该过程逐渐将值调整为运行良好的值。
我们确实完全理解了训练的运作方式——它是一些基本的微积分(尽管适用于一个非常大的方程式),基本上可以保证有效,并且我们对原因有清晰的理解。
训练涉及一个巨大的训练示例数据集。单个训练示例由输入和所需输出组成。(我将在另一篇文章中解释 Stable Diffusion 的训练示例是什么样的)。
当我们通过(使用完全随机的参数值)运行第一个训练输入时,模型输出的内容将与所需的输出完全不同。
但是,利用实际输出和期望输出之间的差值,我们可以对这些方程式应用一些非常基本的微积分,这些方程式将告诉我们,对于这 10 亿个数字中的每一个,我们应该加上或减去一个特定的量。(每个单独的参数都经过不同的小量调整!
在我们进行这些调整后,从数学上保证模型生成的图像更接近我们所需的输出。
因此,我们用许多不同的训练示例做了很多次(数亿次),模型变得越来越好。然而,随着我们的进展,我们得到的回报会递减,我们最终会达到一个点,即模型不会从进一步的训练中受益。
作者完成模型训练后,他们发布了参数值供大家自由使用!
训练稳定扩散
关于 Stable Diffusion 训练过程,有很多内容很容易理解,而且学习起来也很有趣,但我把这些留到另一篇博文中!
发评论,有机会得现金奖励!超多礼品等你来拿
登录 在评论区留言并审核通过后,即可获得奖励机会 查看奖励规则