生成图像的神经网络是如何工作的?我们在一堂学校课上用简单的语言解释
自动翻译
在本快速课程中,我们将带您采用一种不太寻常的方式来学习材料,但请相信我 - 它经过测试,这种方式更好。如果您仔细阅读下面写的所有内容 - 您将在 45 分钟内完成“学校”课程(这是常规课程的持续时间),并获得主要主题及其之间关系的所有基本知识和理解。
这里描述的一切都与图像生成有关,如果你不害怕,45 分钟内你就会很好地掌握这个主题,甚至不需要触及所有这些非常复杂的东西实际上是如何工作的技术细节。
扩散模型如何起作用?
扩散模型是一种通过逐步“清理”将随机噪声“学习”成有意义的图像(或其他数据)的方法。想象一下,拍一张漂亮的照片,给它添加越来越多的噪声,直到它变成一团灰色,然后学习逐步去除噪声以恢复照片。这就是扩散的大致工作原理。
它是如何一步步发生的:
噪声前向学习: 首先,模型获取真实图像(例如,来自庞大的数据集),然后通过添加噪声逐渐“破坏”它们。这分几个步骤完成 - 比如 1000 次 - 直到图像变成纯随机噪声。模型会记住噪声是如何添加的以及图像是如何“破坏”的。
反向噪声训练: 现在模型学会了反向训练过程 — — 提取噪声并逐步去除以恢复原始图像。它在每个步骤中查看噪声图像并预测如何去除部分噪声以更接近原始视图。这就像通过移除不必要的部分来解决难题。
从噪声到图像的生成: 一旦模型训练完成,你就可以从纯噪声(只是随机数)开始,并要求它“清理”它。它会逐步地、一步一步地(例如 50-1000 步)完成此操作,直到获得有意义的图像。但是 CLIP 来了:它告诉模型这幅图像应该是什么(例如“戴帽子的猫”),指导清理过程。
在潜在空间中工作:在稳定扩散等现代系统中,此过程不是直接在像素上进行,而是以压缩(潜在)形式进行,由 VAE 算法创建和解密。这加快了工作速度并提高了效率。
一个简单的类比:
想象一下,一位雕塑家从一块看上去毫无形状的黏土(噪音)开始。他逐渐塑造它的形状,去除多余的部分并添加细节,直到他得到一个雕像。扩散模型做同样的事情,只是用噪音代替黏土,并根据 CLIP 的文本提示“雕刻”图像。
为什么这会起作用?
扩散模型的优点在于,它们会逐步改善图像,而不是试图凭空创造一幅完美的图像。这使得结果比其他方法更好、更详细。
步步:
- 扩散模型吸收噪声并逐渐将其转化为图像。
- CLIP 设定方向(“绘制什么”)。
- VAE 有助于将结果从压缩形式转换为最终图像。
总的来说,这就像一个协调良好的团队:CLIP 是导演,diffusion 是艺术家,VAE 是向观众展示完成作品的人。
夹子
CLIP 是 OpenAI 创建的一个模型,可帮助神经网络“理解”图片或文本中的内容,并将两者联系起来。当神经网络(如 DALL E 或 Stable Diffusion)生成图像时,CLIP 充当您输入的文本(如“戴帽子的猫”)和网络应绘制的内容之间的“翻译器”。
以下是其简单工作原理:
- 你给出一个描述:例如,“一只狗正在沙滩上玩球。”
- CLIP 分析文本:它“拆解”您的文字并将其转换成一种反映描述含义的数字代码(嵌入)。
- 链接到图像:此代码被传递给生成神经网络。它将其用作“指令”,并开始绘制必须符合此描述的图像。
- 检查结果:CLIP 查看生成的图像并将其与您的文本查询进行比较。如果图像不太正确(例如,有一只猫而不是一只狗),网络会调整其工作以更好地“取悦”CLIP。
从本质上讲,CLIP 就像系统的“眼睛和耳朵”:它帮助神经网络了解你想要什么,并确保图片尽可能接近你的要求。如果没有它,神经网络会随机绘制一些内容,而不理解它需要什么。
醋酸乙烯酯共聚物
VAE 是神经网络中另一个重要的“帮手”,尤其是在稳定扩散等系统中。CLIP 负责链接文本和图像,而 VAE 则帮助神经网络本身“打包”和“解包”图像,使它们更容易、更快地处理。
工作原理如下:
- 图像压缩 :VAE 获取图像(或网络试图创建的任何内容)并将其“压缩”为一组紧凑的数字,称为潜在表示。可以将其视为图像的 ZIP 存档:所有重要内容都保留下来,但占用的空间更少。
- 以“压缩形式”工作 :生成网络(如绘制图片的网络)不是直接处理大量像素,而是使用这种压缩代码。这大大加快了处理速度,因为处理一小组数字比处理数百万个像素更容易。
- 解包为图像 :一旦网络以这种压缩形式完成“绘制”(根据 CLIP 的指令),VAE 就会采用此代码并将其“解包”为包含颜色、细节等所有内容的完整图像。
- 添加变化 :VAE 的另一个很酷的功能是它可以添加随机性。这允许网络生成同一想法的不同版本(例如,一只拿着球的狗的姿势略有不同),而不是每次都生成相同的图像。
简单来说,VAE 就像一个“打包器”和“拆包器”,帮助神经网络高效工作,将抽象的想法变成美丽的图画。如果没有它,这个过程会很慢、很复杂,结果可能看起来更糟。
简而言之:CLIP 告诉你“画什么”,VAE 帮助你“如何画并展示”。它们共同创造了图像生成的神奇效果!
VAE 在生成之前不会对潜在表示进行转换,而是“从两侧”参与该过程。下面逐步介绍其工作原理:
- 从噪声开始 :生成不是从完成的图像开始,而是从随机“噪声”开始 - 这只是一堆随机数,看起来像旧电视上的静态噪声。此噪声已经是压缩(潜在)格式,因为直接将其作为像素处理太困难了。
- CLIP 的作用 :你输入一个文本查询(例如“戴帽子的猫”),CLIP 将其转换为指定生成方向的数字代码(嵌入)。
- 潜在空间生成 :网络的一个特殊部分(通常是扩散模型)以潜在格式接收这种噪声,并逐渐将其“清理”成有意义的图像。它根据 CLIP 的指令执行此操作。所有这些都以压缩形式在同一个潜在空间中发生。
- 输出处的 VAE :当扩散模型完成其工作并收到最终的潜在表示(已经“看起来”像帽子里的猫的压缩代码)时,VAE 会采用该代码并将其“解包”为具有像素、颜色和细节的完整图片。
也就是说,VAE 在生成之前不会压缩任何东西。一开始,我们已经有压缩的噪声,生成以这种压缩(潜在)格式进行。VAE 主要在最后阶段需要 — — 将网络工作的结果变成您看到的漂亮图片。而且 VAE 还有助于最初训练网络,展示如何将真实图像“压缩”到潜在空间,以便网络了解要处理的内容。
简单来说:生成过程以压缩形式(在潜在空间中)进行,然后 VAE 将其“展开”为完整的图像。“绘制”本身的魔力是扩散模型的工作,而不是 VAE 的工作。
精炼机
在生成神经网络(如稳定扩散)中,“精炼器”是一种附加模型,用于提高已生成图像的质量。让我们简单地解释一下它是什么以及为什么需要它。
什么是 Refiner?
Refiner 是图像生成过程的第二阶段,它从基础模型中获取原始输出并对其进行细化。基础模型(例如,Stable Diffusion XL Base)在文本查询(使用 CLIP 和扩散模型)的指导下,根据噪声创建初始图像。但这个结果可能不太清晰,细节不足或有轻微错误。这就是 Refiner 的作用所在:它“润色”图像,添加细节,提高质量并去除多余的噪音。
在稳定扩散 XL (SDXL) 等系统中,该过程通常分为两个阶段:
- 基础模型:以压缩(潜在)形式生成基础图像。
- 精炼器:采用中间结果并将其转化为最终形式,使图像更清晰、更逼真。
Refiner 如何运作?
Refiner 也是一种扩散模型,但它是专门针对高质量数据进行训练的,并且噪音较少。它从基础模型中获取潜在表示(压缩代码),并继续“清除”噪音,但重点是精细细节和高分辨率。有时使用 SDEdit(img2img)等技术来进一步改善结果。
简单来说,如果基础模型绘制了一个草图,那么 Refiner 就像一位艺术家拿起画笔并添加细线、阴影和纹理。
为什么需要它?
- 提高质量 :如果没有 Refiner,图像可能会显得模糊、缺乏细节或带有奇怪的伪影。使用 Refiner 可以使图像更清晰、更专业。
- 节省时间 :基本模型可以快速创建基础,而精炼器只需花费额外的精力进行精炼,从而优化流程。
- 灵活性 :您可以单独使用 Refiner,例如,如果您需要纠正某些内容,可以通过 img2img 改进现成的图像。
- 专业化 :Refiner 通常针对特定任务进行定制,例如提高分辨率或增加真实感,使其成为有用的补充。
例子:
假设您要求“戴帽子的猫”。基础模型会给出看起来像戴帽子的猫的图像,但边缘和细节模糊。精炼器会查看该图像,细化线条,使猫的毛发蓬松,帽子的褶皱清晰。最终结果是更美观、更详细的图像。
总是需要它吗?
不一定。在某些情况下,基础模型本身就能给出不错的结果,尤其是当请求简单或不需要超级细节时。但如果您想要顶级质量,尤其是对于复杂场景或高分辨率,Refiner 可以将图片提升到一个新的水平。
简而言之,Refiner 就像照片编辑器中的滤镜,只不过更智能、更自动化。它能让您的照片看起来更美观、更专业。
cfg_scale(guidance_scale)参数,采样器,调度器组件
这些参数是生成模型中的重要设置,会影响神经网络如何创建图像。让我们一一介绍它们。
1. CFG量表(无分类器指导量表)
它是什么? 它是一个控制模型听取你的文本提示的程度的参数。CFG Scale 负责“创造力”和“准确性”之间的平衡。
它是如何工作的?
- 低 CFG(例如 1-5) :模型更“富有想象力”,可能会偏离您的描述,产生一些意想不到的东西,但有时更有创造力。
- 高 CFG(例如 10 – 20) :模型严格遵循请求,尽可能准确地体现您所写的内容。
例如: 如果您使用 CFG = 3 写下“戴帽子的猫”,那么这只猫最终可能会戴上一顶奇怪的帽子,或者根本没有帽子,但是如果使用 CFG = 15,它显然就是一只戴帽子的猫,正如您所希望的那样。
为什么需要它?为了控制图像与文本的匹配程度。
2. 采样器
它是什么? 它是一种算法,决定模型如何逐步“清除”噪声以将其转换为图像。在扩散模型中,生成过程是逐步消除噪声,而 Sampler 决定如何做到这一点。
热门选择:
- DDIM(去噪扩散隐式模型) :快速且质量高,但有时细节较少。
- 欧拉(或欧拉 a) :简单、快速,给出一致的结果。
- DPM++(DPM++ 2M Karras) :更准确、更详细,但可能较慢。
- UniPC :全新且经过优化,通常可以用更少的步骤提供良好的质量。
它是如何工作的? 不同的采样器以不同的方式从噪声“步进”到图像。有些采样器做得更快,有些则更精确,有些则采用特殊风格。
例如:使用 DDIM 可以通过 20 个步骤生成图像,但会出现轻微瑕疵,而使用 DPM++ 经过同样的 20 个步骤后会更清晰。
为什么需要它? 根据您的任务选择速度或质量。
3. 指导量表
它是什么?这是 CFG Scale 的另一个名称(有些系统将它们分开,但大多数情况下它们是相同的)。如果有区别,Guidance Scale 可能指的是文本在每个生成步骤中的影响力的强度。
它是如何工作的?与 CFG 类似:值越高,模型与查询的“联系”就越紧密。有时,Guidance Scale 被用作微调的附加参数。
示例:如果 CFG = 10 且 Guidance Scale = 5,则模型可能会在某些阶段稍微“软化”遵循文本的严格性。
为什么需要它?为了更灵活地控制流程(但通常它只是 CFG 的同义词)。
4. 调度程序
它是什么? 它是一个“时间表”,控制模型在不同生成步骤中消除噪音的速度。调度程序与采样器协作,确定每一步要消除多少噪音。
类型:
- 线性 :在所有步骤中均匀消除噪声。
- 余弦 :更加关注流程的开始和结束,以改进细节。
- Karras :针对质量进行了优化,噪音去除不均匀,并强调重要阶段。
它是如何工作的? 调度程序决定模型是在生成的开始还是结束时“加速”。例如,余弦使第一步更平滑,而最后一步更精确。
示例: 使用线性调度程序时图像可能看起来更粗糙,而使用 Karras 时图像可能看起来更精致。
为什么需要它? 为了调整速度和质量之间的平衡,并影响结果的风格。
这一切有何关联?
CFG 尺度/指导尺度: 控制图像“听”文本的程度。
采样器: 确定噪声如何精确转换为图像。
调度程序: 控制发生这种情况的顺序和速度。
简单示例:
你想要“戴帽子的猫”:
- CFG Scale = 12 :模型清晰地画出了戴帽子的猫。
- Sampler = Euler a :通过30步快速生成一幅图片。
- 调度程序 = Karras :使流程顺畅,注重细节。
结果: 戴着帽子的猫看起来清晰且细节丰富。
如果将 CFG 设置为 5,为 Sampler 选择 DDIM,为 Scheduler 选择 Linear,您将得到更抽象、更粗糙但速度更快的东西。
如何使用?
实验:尝试不同的组合,看看你喜欢哪个。
典型值:
- CFG量表 :7-15(黄金分割)。
- 采样器 :Euler a 或 DPM++(流行的选择)。
- 调度程序 :Karras 或 Cosine(为了质量)。
平衡:具有快速采样器和简单调度器的高 CFG 可以提供清晰度而不会浪费时间。
扩散模型的内部工作原理
扩散模型是一种神经网络,其工作原理是逐渐“清除”噪声。其主要任务是学习如何将随机噪声转化为有意义的数据(如图像)。在内部,它由几个关键组件和流程组成。它的工作原理如下:
1. 基本思想:正向和逆向过程
扩散模型在两个方向上起作用:
- 前向扩散: 获取真实数据(如图片),然后逐渐添加噪声,直到变成纯随机噪声。这就像拍一张照片,然后将其模糊成一团灰色。
- 逆向扩散: 通过逐步消除噪音,学会从噪音中重建原始数据。这就像去除噪音,然后“画”回原来的图片。
该模型不仅仅是“破坏”和“修复”图像 — — 它还学习预测如何消除噪音,以便最终可以从头开始生成新的图像。
2. 内部架构:U-Net
扩散模型中的主要“工作者”是一个名为 U-Net 的神经网络。它看起来像字母“U”,因为数据首先被压缩,然后被扩展。它的作用如下:
- 编码器 :获取一张嘈杂的图像(如果使用 VAE,则为潜在表示)并对其进行分析,提取形状、纹理、颜色等重要特征。这就像看一张图片并记住关键细节一样。
- U-Net“底部” :此处数据被最大程度地压缩,网络决定如何通过消除噪音来“修复”它。
- 解码器 :逐渐恢复图像,添加细节,但噪点较少。
U-Net 的好处在于它保留了精细的细节信息(得益于压缩和扩展之间的“桥梁”),这对于生成清晰的图像非常重要。
3. 脚步声和噪音
扩散采用固定步数(例如 1000)。每一步都是一个噪声级别:
在前向过程中,模型知道如何在每一步添加一点噪声(这在数学上由分布给出,通常是正态的,比如高斯噪声)。
在逆向过程中,它会学习预测如何去除噪音。输入是一张有噪音的图像和一个步长(时间步长),这样网络就能了解已经有多少噪音以及需要去除多少噪音。
4. 学习:她如何学习?
该模型从数据集中获取真实图像。它以随机步骤(例如,1000 步中的第 500 步)向图像添加噪声。U-Net 查看噪声图像并尝试预测前一步会是什么样子(例如,噪声略少的步骤 499)。预测和现实之间的误差用于“教导”网络更好地去除噪声。这在不同的图像和步骤上重复了数百万次。最终,该模型成为清理噪声的“专家”,可以从纯噪声(步骤 1000)开始,然后得到图像(步骤 0)。
5. 与文本集成(CLIP)
在稳定扩散等现代模型中,扩散不仅仅会生成随机图像,它是基于文本的。这就是 CLIP 的作用所在:
CLIP 将您的查询(“戴帽子的猫”)转换为数字代码(嵌入)。此代码通过“注意”机制输入到 U-Net,以便网络知道在消除噪音的同时要强调哪些特征(例如,“帽子”或“猫”)。
6. 潜在空间(使用 VAE)
如果使用 VAE(如稳定扩散):
图像首先被压缩成潜在表示(紧凑代码)。U-Net 使用此压缩代码,而不是直接使用像素。扩散完成后,VAE 将代码“解包”成完整的图像。这加快了流程并节省了资源。
一个简单的类比
想象一下你是一位老照片修复者:
你有一堆带有不同程度“噪点”(划痕、斑点)的糟糕照片。你通过查看原图来学习如何去除这些缺陷,并记住如何恢复细节。然后给你一张完全“曝光”的照片(纯噪点),你根据描述(“戴帽子的猫”)一步一步地在上面画一幅新画。
U-Net 是您的“眼睛”和“手”,而 CLIP 是客户的声音,它会告诉您图片中应该包含什么。
底线是:它里面是什么样子的?
- 基础 :U-Net 是一个预测如何消除噪音的网络。
- 过程 :从噪音到图像的许多步骤(或学习时反之亦然)。
- 助手 :CLIP 用于文本,VAE 用于压缩/解压缩。
- 数学 :概率分布和优化的幕后(但这适合那些喜欢公式的人)。
当你运行生成过程时,模型会从噪声开始,在 CLIP 的指导下使用 U-Net 对其进行“清理”,然后 VAE 会给出最终的图像。所有这些都会在数十或数百步内发生,每一步都会更接近结果。
嵌入 — — 它是什么?
嵌入是一种将复杂且难以被计算机理解的事物(例如单词、句子、图片)转化为机器可以轻松理解和使用的一组紧凑的数字的方法。它就像一个“数字指纹”或“压缩描述”,保留了原始信息的本质。
假设您有单词“cat”。人类可以理解这个词,但计算机只能看到字母。嵌入将“cat”变成一组数字,如 [0. 23, -1. 45, 0. 89],其中每个数字代表单词含义的某个方面。这些数字不是随机的,而是神经网络训练的结果。
这是如何运作的?
- 训练 :神经网络(如 CLIP 或 BERT)查看大量数据(文本、图像)并学习找到它们之间的联系。例如,它注意到“猫”经常出现在“喵喵”或“毛”旁边,这会影响嵌入中的数字。
- 转换 :经过训练后,网络可以获取一个单词、句子甚至一张图片,并为其输出一个数字向量(固定长度的数字列表,例如 512 或 768 个数字)。
- 数字中的含义 :这些数字携带着有关含义的信息。例如,“cat”和“cat”这两个词的嵌入会很相似(数字接近),但“cat”和“table”则完全不同。
例子
- 单词“cat”→[0. 23, -1. 45, 0. 89]
- 单词“dog”→[0. 25, -1. 30, 0. 95](类似于“cat”,因为它们都是动物)
- “machine”这个词→[1. 50, 0. 10, -2. 00](完全不同)
如果你添加或比较这些向量,你就可以了解这些词的含义有多接近。
它在图像生成中用在什么地方?
在稳定扩散等系统中,嵌入是存储和传输数据的主要格式。CLIP 将您的文本查询(“帽子里的猫”)转换为嵌入 - 一组传递给扩散模型的数字。这就像一条指令:“画一些具有这样或那样属性的东西。” CLIP 还可以为图像创建嵌入,以将其与文本嵌入进行比较,并检查图像与查询的匹配程度。
一个简单的类比
嵌入就像一个翻译器,将人类语言(文字、图像)翻译成计算机的“数字语言”。或者像地图上的坐标:你不用文字描述某个地方(“河边的森林”),而是给出一个点 [53. 5, 12. 3],每个人都明白你在说什么。
为什么这很重要?
- 紧凑性 :该模型不需要处理整个文本或图像,而是使用一个小的向量。
- 含义 :嵌入保留关系和上下文(例如,“猫”与“喵”的距离比与“拖拉机”的距离更近)。
- 多功能性 :它们可以用于文本、图像、声音等任何内容。
现在让我们看看稳定扩散、CLIP 或 VAE 等模型是如何训练的,以及是否需要人工来标记数据。答案取决于模型的类型及其创建阶段。
1. 数据标记:需要人工吗?
是的,人们确实参与其中,但并不总是直接参与。大多数现代模型都是使用庞大的数据集进行训练的,这些数据集通常是从互联网上收集的。例如,Stable Diffusion 从网站、社交网络或档案馆等开放来源获取了数百万张带标题的图像(例如,LAION-5B — — 一个包含 50 亿个“图片-文本”对的数据集)。这些数据已经以人们创建的文本描述形式进行了“标记”(例如,Instagram 上的照片标题或网站上的替代文本)。也就是说,可能没有专门针对模型的直接手动标记 — — 数据是“现成的”。
自动化。 此类数据的收集是自动化的:特殊程序(脚本、爬虫)在互联网上传播,下载图片及其描述。人们不会坐下来手动签署每张图片进行培训 — — 这会耗时太长且成本太高。
2. 它如何适用于不同的模型?
片段(文字+图片):
CLIP 学习将文本和图像联系起来。为此,它被赋予“图片-文本”对(例如,一张猫的照片,标题为“戴帽子的猫”)。这些对已经存在于互联网上,它们不需要再次标记 — — 模型只是学习在文本和图像之间寻找模式。
人们间接参与:他们曾经为自己的帖子或网站创建这些标题。但对于 CLIP 培训本身,标记是自动化的。
扩散模型(稳定扩散):
扩散模型学会“清除”噪音并创建图像。要做到这一点,它们不需要传统意义上的标签(“这是一只猫”、“这是一只狗”)。相反,它们拍摄图像并向其中添加噪音,然后学会恢复原始图像。所有这些都是自动发生的。
然而,通过 CLIP 添加了文本条件性(即按要求生成,如“戴帽子的猫”)。这里再次使用来自互联网的现成“图片-文本”对,无需手动标记。
VAE(变分自动编码器):
VAE 学习压缩和重建图像。它输入图像,然后“找出”如何对图像进行编码和解码。完全不需要标记 - 只需要图像本身,图像会自动组装。
3. 什么时候真正需要人?
数据清理。 有时数据集包含垃圾(例如损坏的文件、不相关的图像或糟糕的标题)。人们可以手动过滤或改进此类数据,但这样做很少见,而且只是为了提高质量。清理也大多是自动化的(例如,算法会删除重复项或空图像)。
微调。 如果模型需要适应特定任务(例如,只生成逼真的猫),开发人员可以获取一个小数据集并手动标记。例如,雇人为 1,000 张猫的图片添加细节标签(“姜黄色的猫”、“带弓的猫”)。但这不再是基础训练,而是一种改进。
质量控制。 创建模型后,人们会检查结果,并可以通过添加新数据或更改方法来调整学习过程。但这不是标记,而是分析。
4. 示例:稳定扩散
- 数据集 :LAION-5B 从互联网收集的 50 亿张带有标题的图像。
- 标记 :标题已在互联网上出现(例如,社交网络上的照片下有“日落时的猫”)。没有人专门为模型标记它们;一切都按原样拍摄。
- 流程 :CLIP 学会了链接文本和图像,扩散模型处理噪声。一切都是自动化的。
5. 底线:自动化与人力
主要是自动化。像 Stable Diffusion 或 CLIP 这样的现代模型都是在大量数据上进行训练的,这些数据已经包含来自人们的“标记”(签名、标签)。没有人会坐下来专门为训练签署数十亿张图片 — — 互联网本身就可以完成这一切。
人类是间接需要的。他们创建初始数据(将带说明的照片上传到网络)或有时帮助清理和调整。但基本训练是算法的工作。
简单来说:模型“吃”互联网上已有的东西,并自行学习,无需不断的人工干预。如果一切都是手动标记的,那么创建这样的模型将需要数年时间和数百万美元。自动化是它们成功的关键。
变压器
Transformer 是一种神经网络架构,旨在处理数据序列(如句子中的单词)。它们可以“理解”数据片段之间的关系,即使这些片段相距甚远,它们也能快速高效地做到这一点。它们最早是在谷歌 2017 年的论文《注意力就是你所需要的一切》中引入的。
简单来说, 它就像一个智能的“翻译”,不只是看个别的单词,而是理解整个句子的上下文。
它们如何工作?
Transformers 包含几个关键思想:
注意力机制:
这是 Transformer 的“大脑”。它决定在数据中更关注什么。例如,在“睡在沙发上的猫很可爱”这句话中,Transformer 理解“可爱”指的是“猫”,而不是“沙发”。
Transformer 不会像旧的 RNN 类型模型那样逐个处理单词,而是同时查看所有内容并找出哪些部分更重要。
编码器和解码器:
- 编码器 :将输入数据(例如文本)转换为包含其含义(嵌入)的一组数字。
- 解码器 :获取这些数字并将其转换为输出(例如翻译的文本或图像)。
有些任务仅使用编码器(例如,用于文本分析),而其他任务则同时使用两者。
并行性:
旧模型(RNN、LSTM)逐步处理数据,速度很慢。Transformer 一次性处理所有内容,从而加快了工作速度。
层数:
Transformer 由多层(类似饼图)组成,每一层都通过添加细节和关系来增进对数据的理解。
示例:Transformer 如何理解文本
假设您输入“戴帽子的猫走在街上”。Transformer 会将其分解为单词。将每个单词转换为数字(嵌入)。查看单词之间的关系:“戴帽子的”指的是“猫”,“走”指的是动作。它会给出结果,例如英文翻译:“戴帽子的猫走在街上。”
变压器用在什么地方?
BERT(谷歌)或 GPT(OpenAI)等模型都是转换器。它们可以翻译、编写文本、回答问题。例如:ChatGPT 是一个“理解”并生成文本的转换器。
在 Vision Transformers (ViT) 中,图像被分解成多个部分,Transformer 会像分析句子中的单词一样分析它们。示例:识别照片中的物体。
在 DALL E 或 FLUX 等模型中,转换器有助于将文本链接到图像。它们与扩散模型协同工作,指导生成过程。
Transformer 与图像生成有何关系?
在 FLUX. 1 或 DALL E 等模型中,转换器会获取您的文本(“戴帽子的猫”)并将其转换为嵌入 - 一个数字指令。该指令被传递给扩散模型,扩散模型会根据该指令“绘制”图片。转换器还可以参与扩散本身(如在 FLUX. 1 中一样),从而改进“清除”噪音的过程。
简单来说,变压器就是告诉扩散模型到底要绘制什么的“导体”。
为什么它们如此重要?
- 速度 :并行处理数据而不是顺序处理数据。
- 上下文 :理解远距离的关系(例如长文本或复杂场景)。
- 灵活性 :适用于文本、图片、声音等任何内容。
一个短篇故事
- 2017 年 :Transformers 出现在谷歌的一篇文章中。
- 2018 年 :BERT 和 GPT 在文本上展现了威力。
- 2020 – 2021 :Vision Transformers(ViT)将它们应用于图片。
- 2022 – 2024 :Transformer 集成到生成模型中(DALL E、FLUX.1)。
一个简单的类比
转换器就像图书管理员,可以立即找到您需要的书籍(数据),了解其内容,并可以向您复述或绘制封面。他不是一次读一页,而是一次“看到”所有内容。
变压器 T5-XXL
T5-XXL(Text-to-Text Transfer Transformer)是谷歌开发的真正的变压器模型。
- 架构 :完全基于带有编码器和解码器的变压器。
- 功能 :可以将文本转换为文本(例如翻译、重写、回答问题)。全部采用“文本输入,文本输出”格式。
- 尺寸 :XXL 版本是一个巨大的模型,具有 110 亿个参数,使其成为 T5 家族中最强大的模型之一。
- 用途 :在图像生成中,它用作文本编码器,以深入理解复杂查询并将其转换为嵌入。
T5-XXL 是一款针对文字处理进行优化的“经典”变压器。
CLIP + T5-XXL:它们组合在一起是什么?
在 FLUX.1 或 Stable Diffusion 3 等系统中,这两个模型通常组合作为文本编码器:
- CLIP :提供对文本的总体理解以及与图像的联系。适合简短描述和一般含义。
- T5-XXL :深化文本分析,特别是针对长而复杂的查询(例如“戴帽子的猫在日落时在海滩上散步”)。它可以更好地理解细节和上下文。
它们如何协同工作: 文本通过两个模型,每个模型都会创建自己的嵌入。这些嵌入被传递给扩散模型,该模型绘制图片。T5-XXL 通常负责细节的精确度,而 CLIP 负责整体“图片”。
例如,在 FLUX.1 中,它们是串联使用的:CLIP(通常是 ViT-L/14)处理文本以获得总体指导,而 T5-XXL 则增加详细理解。这不是一个单独的“CLIP T5-XXL”模型,而是两个并行工作的变压器组件。
CLIP 擅长将文本和图像关联起来,但处理长查询时能力较弱。T5-XXL 更擅长处理复杂文本,但本身与图像无关。两者结合,可以提供更好的文本理解能力,从而生成准确、详细的图像。
神经模型格式:Safetensor、GGUF 等
1. 安全张量
- 它是什么?Safetensors 是 Hugging Face 开发的一种格式,用于安全快速地存储张量(构成模型的数字数组)。它是作为 使用 Python Pickle 的旧 PyTorch.pt /.pth 格式的替代方案而创建的。
特点:
- 安全性 :与 Pickle 不同,Safetensors 不能包含在下载文件时可能运行的恶意代码。
- 速度 :由于“零拷贝”(数据直接读入内存,无需不必要的复制),加载速度非常快。
- 简单 :仅存储张量(模型权重)和最少的元数据,没有复杂的结构。
- 跨平台 :用 Rust 编写,不仅适用于 Python,也适用于其他语言。
它有什么用? 通常用于在进一步处理或量化之前存储“原始”模型(例如 fp16 或 fp32 格式)。它是 Hugging Face 模型的热门选择。
示例:稳定扩散 XL 模型通常作为安全张量分布。
2. GGUF(GPT 生成的统一格式)
- 它是什么?GGUF 是 Georgi Gerganov 开发的一种二进制格式,用于在普通计算机上存储针对推理优化的模型。它是 GGML 的后继者,但更现代、更灵活。
特点:
- 优化 :设计用于在 CPU 或 GPU 上快速加载和运行,特别是通过量化(例如 4 位或 8 位)来减小模型尺寸并加快执行速度。
- 元数据 :不仅存储张量,还存储模型信息(架构、标记器、设置),使其成为一体化的。
- 可扩展性 :可以添加新数据(例如自定义令牌),而不会破坏与旧版本的兼容性。
- 支持 :用于 llama.cpp 等工具在本地运行大型语言模型 (LLM)。
它是用来做什么的? 在资源有限的设备(例如笔记本电脑)上运行模型。它是 LLaMA 或 Mixtral 等模型量化版本的流行格式。
示例:像 llama-2-7b-chat.Q4_K_M.gguf 这样的文件是具有 4 位量化的 GGUF。
3. GGML(GGUF 的前身)
- 它是什么?GGML 是一种较旧的格式,也是由 Georgi Gerganov 创建的,在 GGUF 之前使用。它是一个用于模型推理的 C 张量库。
特点:
- 简单 :存储张量和基本元数据,支持量化(4 位、8 位)。
- 局限性 :不如 GGUF 灵活,主要支持 LLaMA 架构,并且元数据结构化程度较低。
- 状态 :已弃用,并将于 2023 年被 GGUF 完全取代。
它是用来做什么的? 它曾经用于在 CPU 上本地运行模型,但现在它已经成为历史格式。
4.PyTorch(.pt/.pth)
- 它是什么?它是基于 Python Pickle 在 PyTorch 中存储模型的标准格式。
特点:
- 多功能性 :不仅可以存储张量,还可以存储任何Python结构(例如代码,字典)。
- 不安全 :Pickle 可能包含在下载时执行的恶意代码,因此公开分发存在风险。
- 大小 :通常较大,因为它以原始形式(fp32 或 fp16)存储数据。
它是用来做什么的? 用于在 PyTorch 中训练和微调模型。这是“源”格式,然后通常会转换为 Safetensor 或 GGUF。
示例:在量化之前准备带有权重的模型。
比较
格式 | 安全 | 加载速度 | 元数据 | 量化 | 它有什么用处? |
---|---|---|---|---|---|
安全张量 | 高的 | 非常高 | 最低限度 | 不 | 存储“原始”模型 |
胶原蛋白 | 平均的 | 高的 | 许多 | 是的 | 局部推理 |
GGML | 平均的 | 平均的 | 基本的 | 是的 | 已过时,用于输出 |
PyTorch.pt | 低的 | 平均的 | 灵活的 | 不 | 培训与发展 |
其他格式
- ONNX(开放神经网络交换) :一种用于在框架(PyTorch、TensorFlow 等)之间交换模型的开放格式。用于可移植性,但不用于快速推理。
- EXL2 (ExLlamaV2) :量化模型的格式,通常存储在 Safetensor 中。在 GPU 上比 GGUF 更快,但使用起来更难。
- AWQ :GPU 的另一种量化方法,通常与 Safetensor 搭配使用。速度上可与 GGUF 媲美。
一个简单的类比
- Safetensors :带有图片的 ZIP 档案如何安全、快速打开,但里面只有数据。
- GGUF :就像光盘上带有字幕和设置的完成的电影一样,所有内容都包含在内并针对观看进行了优化。
- PyTorch.pt :作为艺术家的工作文件夹,什么都有,但是分享不方便,而且还会有人带入“病毒”。
为什么选择其中一个?
- 如果你是开发人员并且正在训练模型,你将从 pt/pth 开始,然后转到 Safetensors 进行存储。
- 如果您是用户并想要在您的电脑上运行模型,请选择GGUF 以使一切快速轻松地运行。
量化
- 它是什么?量化是降低模型中数字精度的过程,以便占用更少的空间并运行更快。想象一下对数字进行舍入 :您使用 3.14 而不是 3.14159。
它是如何工作的?
模型权重(网络“学习”到的数字)通常以高精度存储(例如每个数字 32 位 - fp32)。量化时,它们会转换为较低精度:16 位(fp16)、8 位(int8),甚至 4 位(int4)。
这就像用数百种颜色而不是数百万种颜色来绘制一幅图画 — — 质量稍差,但差别并不总是显而易见的。
为什么需要它?
- 减小模型尺寸(例如从 13GB 减小到 4GB)。
- 加快工作速度,尤其是在弱设备(CPU、GPU)上。
- 节省内存。
示例:GGUF 中具有 Q4(4 位)量化的模型可在笔记本电脑上运行,但在 fp32 中则需要强大的服务器。
- FP32(32 位)“全精度”为 3.1415926535。
- FP16 约为 3.14。
- FP8 甚至更粗糙,和 3.1 一样。
张量
- 它是什么?张量是用于在神经网络中存储数据的多维数字数组。它们就像存储有关模型的信息的数字表或立方体。
简单来说:
- 一个数字(例如 5)是 0D 张量(标量)。
- 数字列表(例如 [1, 2, 3])是一维张量(向量)。
- 表(例如 [[1, 2], [3, 4]])是二维张量(矩阵)。
- “立方体”或更多维度是张量 3D、4D 等等。
为什么需要它们?
模型的权重(即“学习到的”)存储在张量中。图像也可以表示为张量:例如 256x256x3(宽度、高度、RGB 颜色)。
示例:在 Safetensors 中,模型是一组张量,就像巨大的数字表。
代币
- 它是什么?标记是文本分解成的数据片段,以便神经网络能够理解它。它们就像机器的“单词”,但并不总是普通的单词。
它是如何工作的?
像“戴帽子的猫”这样的文本被分解成标记:[“Cat”、“in”、“hat”] 或更小的部分(例如“Ko”、“t”)。每个标记都从模型学习到的词汇表中分配一个数字(ID)。这些数字作为输入输入到网络中。
为什么需要它们?
将人类语言翻译成模型可以使用的数字。在图像生成中,来自文本的标记(通过 CLIP 或 T5)被转换为嵌入以创建图像。
示例:在查询“戴帽子的猫”中,每个标记都帮助模型理解应该画一只猫和一顶帽子。
生成神经网络的历史
1. 早期阶段:2010 年之前
在真正的生成网络出现之前,科学家们尝试过能够“思考”的模型。这些模型更多的是数学玩具,而不是实用工具:
玻尔兹曼机(20 世纪 80 年代):由 Geoff Hinton 及其同事创建,这些是学习建模数据(例如黑白图案)的简单网络。它们不会生成图像,但为未来的想法奠定了基础。
他们能做什么? 几乎没有任何视觉效果 — — 只有抽象的图案。这就是基础。
2. 2014 年:GAN(生成对抗网络) — — 革命开始
谁创造了它?Ian Goodfellow 和他的团队于 2014 年创造。
它们叫什么?GAN — — 生成对抗网络。
它们是如何工作的?两个网络相互竞争:一个网络(生成器)根据噪声创建图像,另一个网络(鉴别器)检查图像是否真实。它们相互“训练”,直到生成器开始生成可信的图像。
它们能做什么? 第一批 GAN 生成简单的图像:模糊的脸、数字(例如来自 MNIST 数据集)或物体的粗略图片。质量很低,但这是一个突破 — — 网络本身“发明”了图像。
例如:模糊的人脸或看起来像污点的歪猫。
3. 2015 – 2017:改进 GAN
GAN 发展迅速,不断出现新的版本:
- DCGAN(深度卷积 GAN,2015 年) :由 Alec Radford 及其同事创建。使用卷积网络 (CNN),提高了质量。能够生成更清晰的图像:面部、汽车、动物,但仍有伪影。
它们能做什么? 例如,64x64 像素的脸部已经可以识别为脸部或房间内部。
问题:学习不稳定 — — 图片可能变得奇怪或“破碎”。
- 渐进式 GAN(2017) :来自 Tero Karras 和 NVIDIA 团队。网络学会了逐步生成图像,从低分辨率(4x4)到高分辨率(1024x1024)。
他们能做什么? 高分辨率的逼真人脸。这是第一次生成的脸部看起来几乎像真实的照片。
4. 2018 – 2019:BigGAN 和 StyleGAN – 质量不断提高
- BigGAN(2018) :由 Google 团队(Andrew Brock 等人)创建。使用了大量资源和数据集(ImageNet)。
它能做什么? 生成复杂的场景和物体:狗、风景、食物。质量很高,但需要功能强大的计算机。
例如:逼真的狗或花,尽管有时会有小错误。
- StyleGAN(2019) :同样来自 Tero Karras 和 NVIDIA。增加了对图像风格的控制(例如,你可以改变发型或面部年龄)。
它能做什么? 极其逼真的面孔(最大分辨率 1024x1024),很难与照片区分开来。它还可以生成猫、汽车,甚至动漫人物。
功能:现在您可以“编辑”图片,例如,让脸看起来更老或戴上眼镜。
5. 2020 年:VAE 和迈向文本的第一步
- VAE(变分自动编码器) :最初于 2013 年提出(Diederik Kingma 和 Max Welling),但后来流行起来。他们将图像压缩到潜在空间中并重新创建它们。
它们能做什么? 简单的图像,比如手写数字或人脸,但质量比 GAN 差。但它们更稳定。
与文本的联系:他们开始将 VAE 与文本相结合,但尚未普及。
6. 2021:DALL E 和 CLIP — 文字与图片的结合
- DALL E(2021) :由 OpenAI 创建。结合了 VAE 和 transformers(如语言模型)。使用 CLIP 链接文本和图像。
它能做什么?根据文本查询生成图像:“椅子形状的鳄梨”或“太空中的猫”。质量一般(256x256),但创意令人难以置信。
片段:同样来自 OpenAI。它不是自己生成的,而是学会了理解文本和图像之间的联系,成为未来模型的“大脑”。
7. 2022 年:扩散占据主导地位
- DDPM(去噪扩散概率模型,2020-2021) :由 Jascha Sohl-Dickstein 提出并由 Jonathan Ho 改进,这是第一个扩散模型。
他们能做什么? 他们生成了高质量的图像(面部、物体),但速度很慢 — — 需要数百步。
突破:详细地证明了扩散可以胜过 GAN。
- 稳定扩散(2022) :由 Stability AI 与研究人员(Robin Rombach 等人)合作创建。结合了扩散、VAE 和 CLIP。
它能做什么? 快速高效地从文本生成图像(512x512 及更高)。得益于潜在空间,可在普通计算机上运行。
特点:开源 — — 任何人都可以下载和使用它。
- DALL E 2 (2022) :OpenAI 改进了第一个版本。使用扩散代替 VAE。
它能做什么? 非常逼真和有创意的图片(最大 1024x1024)适用于复杂查询:“沙滩上拿着鸡尾酒的企鹅”。
- Imagen(2022) :来自谷歌。同样是一种注重质量的传播模型。
它能做什么? 具有令人难以置信的细节的逼真图像。
8. 2023 – 2025 年:现代性
- 稳定扩散 XL (SDXL, 2023) :稳定性 AI 的改进版本。添加了细化器以进行细节处理。
它能做什么? 高品质、灵活的 1024x1024 图像。
Midjourney(2022 – 2025):封闭式模型,但在艺术家中很受欢迎。专注于艺术风格。
- DALL E 3(2023) :OpenAI 推出的更精确、更强大的版本。
进化:从简单到复杂
- 早期模型(GAN) :面部简单,分辨率低,错误多。
- 中间(StyleGAN、BigGAN) :真实主义,但没有文字。
- 文本+图像(DALL E,稳定扩散) :与请求的联系、创造力。
- 今天 :高质量、高速度、高可用性。
谁推动了进步?
- 科学家 :Ian Goodfellow(GAN)、Geoff Hinton(基础)、Tero Karras(NVIDIA)。
- 公司 :OpenAI(DALL E、CLIP)、Stability AI(Stable Diffusion)、Google(Imagen)、NVIDIA(StyleGAN)。
有什么改变?
- 从模糊斑点到照片般真实感。
- 从随机图像到文本生成。
- 从超级计算机到家用电脑。
通量
FLUX 是 Black Forest Labs 于 2024 年 8 月推出的最先进的生成式 AI 模型,该公司由前 Stable Diffusion 开发人员(Robin Rombach、Andreas Blattmann 等)创立。它是一个文本到图像模型,采用结合了 transformers 和扩散技术的混合架构,规模达 120 亿个参数。它的目标是从文本描述(提示)生成高质量图像,具有高精度和多样性。
- 质量 :产生与 Midjourney 或 DALL E 3 相当的高度详细和逼真的图像。
- 准确性 :比之前的型号(如 Stable Diffusion XL)具有更好的及时性。
- 速度 :有一个快速版本(Schnell),甚至可以在普通计算机上运行。
- 灵活性 :提供三种选择:
- FLUX.1 Pro:功能最强大,可用于商业用途,可通过 API 获得。
- FLUX.1 Dev:开放供非商业用途,用于实验。
- FLUX.1 Schnell:快速且轻量,Apache 2.0 许可,供个人使用。
一个人如何学习?
与稳定扩散一样,FLUX.1 也是在庞大的数据集上进行训练的 — — 可能是来自互联网的数十亿张带有文本描述的图像(例如 LAION)。数据的确切细节并不公开,但训练是自动化的,无需人工手动标记 — — 该模型“吸收”了现成的文本-图像对。
它能做什么?
- 生成逼真的场景、人物、动物。
- 很好地画出手和脸(旧型号的问题)。
- 处理图像上的文字(例如铭文、徽标)。
- 支持从现实主义到抽象的不同风格。
FLUX 是继 GAN(2014 年)、StyleGAN(2019 年)和早期扩散模型(2020 年)之后的下一步。它基于稳定扩散(2022 年),但架构和效率有所改进。截至今天(2025 年 3 月),它是领先的开源模型之一,成功与 Midjourney 等付费解决方案竞争。
您无法评论 为什么?