文章源地址:https://mccormickml.com/2022/12/21/how-stable-diffusion-works/
这篇文章是关于Stable Diffusion(一种人工智能生成艺术的技术)的工作原理的解释。以下是对文章主要内容的翻译:
---
**2022年12月21日**
计算机仅凭文字描述就能生成艺术的能力真是令人着迷!我知道,至少我会非常好奇地想知道“引擎盖”下面到底发生了什么,使得这成为可能。因此,我在这里尽我所能提供一个不那么肤浅的解释,即使是对那些**不熟悉****人工智能**概念的人也是如此。
## 概述
在第一部分,我会给出一个高层次的解释(你可能已经熟悉了)。这是一个很好的开始,但我知道这不会满足我的好奇心。😉 我会问,“好的,很棒,但它**是如何做到的?**
为了解决这个问题,我将向您展示一些Stable Diffusion的内部工作原理。内部结构可能比您希望的要复杂,但至少我想更具体地向您展示发生了什么,这样它就不再是一个**完全**的谜了。
更具体地说:
- Stable Diffusion是一个巨大的**神经网络**。
- 神经网络是**纯数学**。
- 事实上,我们**不完全知道**它在做什么!
- 最终,Stable Diffusion之所以有效,是因为我们**训练**了它。
但让我们从更大的画面开始!
## Stable Diffusion从图像中移除噪声
如果您曾经在太暗的情况下尝试拍照,而照片出来全是颗粒状的,那种颗粒状就是图像中“**噪声**”的一个例子。
我们使用Stable Diffusion来生成艺术,但它在幕后实际做的是“清理”图像!
这比您手机图像编辑器中的噪声移除滑块要复杂得多。它实际上对世界的样子和书面语言有所了解,并利用这些来指导过程。
例如,想象一下,如果我给左边的图像给一个熟练的图形艺术家,并告诉他们这是一幅以H.R. Giger风格绘制的外星人弹吉他的画作。我敢打赌他们可以进去并费劲地清理它,创造出类似右边的图像。
(这些是Stable Diffusion的实际图像!)
艺术家会使用他们对Giger艺术作品的了解以及对世界的知识(比如吉他应该是什么样子以及如何演奏)来完成这项工作。Stable Diffusion基本上在做同样的事情!
## “推理步骤”
您熟悉大多数艺术生成工具中的“推理步骤”滑块吗?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,我们还处理文本。这是我可能会为图像编写的描述:
```
一张长曝光彩色照片,展示了通向海洋的破旧混凝土台阶,带有混凝土栏杆,正面视角,对称,梦幻般的,大气的。
```
这是它作为数字表的表示方式。每一行代表一个词,每个词由768个数字表示。这些是Stable Diffusion v1.5用来表示这些词的实际数字:
我们如何选择数字来表示一个词是一个引人入胜的话题,但也相当技术性。你可以大致将这些数字想象为每个数字代表一个词的不同方面的含义。
在机器学习中,我们实际上不称这些为“表格”——我们使用“矩阵”或“张量”这些术语。这些来自线性代数领域。
然而,所有这些中最重要和令人难以置信的部分是**参数**的概念。
## 十亿参数
初始噪声和我们的文本描述是我们对Stable Diffusion的**输入**,不同的输入将在这些表格中有不同的值。
然而,还有一组更大得多的数字,我们也会插入这些方程中,这些数字每次都是一样的——这些被称为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亿个随机数字开始。有了这些初始的随机参数值,模型完全没有用——在我们找出更好的参数值之前,它不能做任何有价值的事情。
所以我们应用一个我们称之为**训练**的数学过程,逐渐调整这些值以使其有效。
训练的方式是我们_完全理解_的——它是基于一些基本的微积分(尽管是应用在非常大的方程上),基本上保证有效,我们对其原因有清晰的理解。
训练涉及一个巨大的**数据集**的**训练示例**。一个训练示例包括一个输入和一个**期望输出**。(我将在另一篇文章中解释Stable Diffusion的训练示例是什么样子的)。
当我们用完全随机的参数值运行第一个训练输入时,模型输出的东西将与期望输出完全不同。
但是,使用**实际**输出和**期望**输出之间的**差异**,我们可以在那些方程上应用一些非常基本的微积分,这将告诉我们,对于那10亿个数字中的每一个,我们应该添加或减去一个特定的量。(每个单独的参数都会以不同的小量进行微调!)
在我们进行这些调整之后,模型在数学上保证会产生一个更接近我们期望输出的图像。
所以我们这样做很多次(数亿次),用许多不同的训练示例,模型不断变得更好。然而,随着我们进行,我们得到的回报越来越少,最终我们会达到一个点,模型不会再从进一步
文章评论