CogView 2 模型及论文详解
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍 CogView 2 模型的设计及其论文解读。CogView 2 的实现是:预训练一个CogLM模型(CogLM的结构还是VA-VAE和Transformer组合),并且通过分层生成微调CogLM模型,实现高分辨率图像的快速生成。
🌺CogView 2 系列文章列表🌺
- CogView模型及其论文详解
文章目录
- 论文
- 背景介绍(Introduction)
- 目前图像生成缺点
- 当前工作
- CogLM 预训练方法
- CogView2 的分层生成过程
- CogView2 克服的三个缺点
- 相关研究
- 文本到图像生成的挑战与进展
- 非自回归生成(NAR)
- 总结
- 方法
- 跨模态通用语言模型——CogLM
- 1. CogLM概述
- 2. 填充
- 3. 与GPT、GLM和MAE相比的优势
- 预训练
- 1. 统一标记器 icek
- 2. Transformer
- 3. 掩码策略(Masking Strategy)
- 分层生成(CogView2)
- 1. 直接超分辨率
- 2. 迭代超分辨率
- 3. 超分辨率模块
- Transformer 的插件改进技术
- 分簇采样
- 局部注意力(定制的 CUDA 内核)
- 加强文本注意力(增强相关性)
论文
CogView2: Faster and Better Text-to-Image Generation via Hierarchical Transformers
CogView2提出了基于分层 Transformer和局部并行自回归生成的方案。通过跨模态通用语言模型(CogLM)对 6B 参数的 Transformer 进行预训练,并对其微调以实现快速超分辨率,解决了高分辨率图像的文本到图像生成在基于 Transformer 的模型中速度慢且复杂的问题。CogLM的结构还是VA-VAE和Transformer组合。
跨模态通用语言模型(CogLM)是 CogView2 中提出的一种专为跨模态任务设计的预训练模型,用于连接文本与图像模态。
背景介绍(Introduction)
目前图像生成缺点
近年来,大规模预训练的 Transformer 模型(如 DALL-E 和 CogView)在文本到图像生成方面取得了巨大进展。这些模型通过自回归方式学习生成图像 token。然而,它们也存在以下几个主要缺点:
-
生成速度慢:自回归模型的生成速度通常比非自回归模型(如 GAN)慢。即使参数量相同,由于自回归模型的逐 token 生成方式,无法充分利用 GPU 的并行计算能力,即使在缓存隐藏状态后仍然存在这一瓶颈。
-
高分辨率训练成本高:当前的大规模预训练模型通常基于 Transformer,其中的注意力操作在训练序列时具有 O(n²) 的时间和空间复杂度。由于预算限制,模型的参数量和生成图像的分辨率之间需要做权衡。大多数现有的文本到图像模型采用 32 × 32 token(通常为 256 × 256 像素)的分辨率,这比真实照片的分辨率低得多。
-
单向性问题:对于图像,自回归模型(如 GPT)通常按照栅格扫描顺序生成 token。虽然这种顺序在评估时具有最佳困惑度,但它使得模型在生成过程中无法感知生成位置右侧或下方的 token,因此不支持文本引导的填充。此外,这种单向性使得自回归模型(如 GPT)与基于双向遮掩预测的Vision Transformer(改进版的ViT如:MAE 和 SimMIM,这些基于 ViT 的模型能够进行双向信息处理,适用于传统视觉任务,如图像分类和目标检测)存在差距 。
解释: 这里的Vision Transformer(ViT)是结合Vision 和
Transformer的总称,而不是我们之前提到的首次将Vision 与 Transformer 结合起来的ViT:《AN IMAGE IS
WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》。MAE 和
SimMIM是后续在 ViT 基础上提出的自监督学习方法,用于提升 ViT 在视觉任务中的表现。他们的主要设计区别如下:
原始 Vision Transformer(ViT):
- ViT 是基于 Transformer 的图像分类模型,将图像划分为多个 patches 并作为 tokens 输入 Transformer 进行处理。
- 单向性:ViT 使用 全局自注意力机制 来学习图像表示,并不使用遮掩预测。
MAE 和 SimMIM:
- MAE 和 SimMIM 是基于 ViT 的自监督学习方法,通过遮掩部分图像来训练模型预测缺失部分的内容。
- 双向遮掩预测:与 ViT 不同,MAE 和 SimMIM 不只是依赖当前部分信息,而是同时考虑遮掩部分的前后信息,并采用遮掩部分图像的方式,模型根据已知部分推测缺失部分,从而捕获更全面的上下文信息,提升模型在视觉任务中的表现。
当前工作
为了克服现有的缺陷,CogView2 引入了一个新的预训练方法:跨模态通用语言模型(CogLM),并通过以下关键设计改进提升图像生成效率和质量:
CogLM 预训练方法
-
多任务训练:CogLM 掩蔽文本和图像标记序列中的不同部分,使用自回归方法进行预测。具体任务如下:
- 掩蔽所有图像标记:类似于原始 CogView,实现文本到图像生成。
- 随机掩蔽图像标记的补丁:类似于 MAE 的填充任务。
- 掩蔽文本标记:生成图像标题。
-
多功能性:CogLM 的设计使其能够根据不同下游任务微调,支持灵活应用于图像生成、图像标题等任务。
CogView2 的分层生成过程
- 低分辨率图像生成:使用预训练的 CogLM 生成 20x20 标记的低分辨率图像,可选地基于图像标题的困惑度过滤掉不良样本。
- 超分辨率映射:将低分辨率图像通过微调的超分辨率模块生成 60x60 标记的图像。使用定制的 CUDA 内核实现局部注意力,减少训练代价。
- 精细化迭代超分辨率:通过另一个超分辨率模块精炼高分辨率图像。大多数标记通过 局部并行自回归(LoPAR) 方式重新掩蔽和生成,比传统的自回归方法速度更快。
CogView2 克服的三个缺点
- 双向上下文处理:在预训练期间,掩蔽补丁预测任务训练 CogLM 处理双向上下文,使其易于适应双向任务,例如,直接和迭代超分辨率。
- 分层设计:分层设计使我们能够只关注高分辨率阶段的局部一致性,利用局部注意力减少训练开销。
- 局部并行自回归生成:通过 LoPAR 方法,将生成过程的运行时间显著缩短,从 3,600 次减少到仅 6 次,极大地加速了高分辨率图像的生成。
相关研究
文本到图像生成的挑战与进展
1. 早期的文本到图像生成方法:
- 目标:文本到图像生成是长期以来的跨模态学习研究目标。
- 早期方法:大多数早期尝试基于 生成对抗网络(GAN),如 AttnGAN、DM-GAN、DF-GAN 等。这些方法能在特定数据集(如 Caltech-UCSD Birds 200)上生成高质量的图像,但在 通用数据集(如 MS COCO)上效果不佳。
2. Transformer和VQ-VAE的引入:
近期的进展
- Transformer和VQ-VAE:通过 VQ-VAE(Vector Quantized Variational Autoencoder)将图像压缩为离散标记,并用大规模的 Transformer 进行自回归生成,显著提升了通用领域的文本到图像生成能力。代表作有 DALLE、CogView 等。
- CLIP嵌入:一些研究(如 LAFITE)利用 CLIP 嵌入在共享空间中进行无文本训练,进一步推动了跨模态生成的进展。
- 扩散模型:截止本论文发布时,扩散模型(如 Glide)由于其解决了自回归模型的缓慢生成问题,成为了新的研究方向。【到本文发布,扩散模型已经成为了文本到图像生成的“顶流”,Glide是DALL·E 2 的重要组成部分】
DALLE请参考:DALL·E模型及其论文详解
CogView请参考:CogView模型及其论文详解
Glide请参考:多模态论文笔记——GLIDE(DALL·E 2模型核心部件)
CLIP请参考:多模态论文笔记——CLIP、BLIP
非自回归生成(NAR)
1. NAR 在自然语言生成中的应用:
- NAR方法:非自回归生成(NAR)已成为自然语言生成中的热门话题,代表作品包括 Mask-Predict 和 GLAT。NAR的优势在于并行解码,从而加速生成过程。
2. NAR 在图像生成中的应用:
- 在 GAN 主导的图像生成时代,速度并不是主要问题,但 自回归文本到图像模型 的速度瓶颈逐渐显现。
- M6-UFC 是 NAR方法 引入 VQ-VAE 框架的首次尝试,后续的 VQ-diffusion 和 MaskGIT 也采用了类似的思想。
- 缺点:纯 NAR方法 的潜在问题是,同时采样的标记可能导致 全局不一致,特别是在生成复杂场景时,后续步骤的全局一致性可能难以维持。
3. 结合自回归与NAR的分层设计:
- 为了解决
自回归生成速度慢
和NAR方法全局一致性差
的问题,分层设计 被引入,结合了 自回归模型 的一致性优势和 NAR方法 的速度优势。
非自回归生成(NAR) 是一种生成模型的策略,它与传统的自回归生成方法有所不同。在自回归模型中,生成过程是逐步进行的,每次生成一个元素,并依赖于之前生成的所有元素。而 非自回归生成 则是通过并行地生成所有输出元素,从而加速生成过程。
非自回归生成(NAR):
- 非自回归生成 通过 并行生成所有元素,不依赖于先前生成的部分。这意味着生成的每个元素可以同时生成,大大提高了生成速度。
- NAR方法通常使用某种形式的 并行解码,即同时处理所有输出元素,避免了逐步生成的顺序依赖。
- 优点是生成速度非常快,可以大幅度减少生成时间。
- 缺点是由于缺乏逐步依赖,可能导致生成的结果在 全局一致性 和 连贯性 上有所下降,尤其在复杂任务中,可能会出现图像或文本内容的 不一致性。
总结
- 自回归模型:传统方法,如 GAN 和 Transformer,能够生成较高质量的图像,但生成速度较慢,尤其在通用领域的应用中面临挑战。
- 非自回归(NAR)模型:通过并行生成提升速度,但可能导致生成图像的一致性问题。
- 分层设计的创新:结合自回归和NAR的优势,尝试在保证一致性的同时提高生成速度,是目前文本到图像生成领域的一项重要进展。
方法
跨模态通用语言模型——CogLM
1. CogLM概述
之前的自监督预训练任务(如:MAE)通常针对计算机视觉中的掩码预测,而我们的方法追求自回归生成和双向上下文感知掩码预测的统一。
在NLP领域GLM的自监督学习中的掩码预测任务的策略:
在NLP领域,通用语言模型(GLM)建议将直接的掩码预测任务(例如,传统的BERT掩蔽语言模型)转变为分块自回归生成的方式。然而,直接将其应用于图像会导致冗余。例如,掩码图像块的大小是固定的,因此我们不需要像在NLP中那样填充不定长块的能力。此外,GLM为每个掩码区域插入一个哨兵标记来预测其第一个标记,这大大增加了序列长度,从而限制了二维局部注意力的使用。
跨模态通用语言模型(CogLM):
CogLM的架构如下:
图2:CogLM。(左)序列由文本和图像标记组成。[BOI](图像开始)是分隔标记。掩码区域根据不同策略进行采样。仅预测掩码区域中的倒数第二个标记来计算损失。(右)掩码只会改变注意力图,而不会改变输入序列,其中所有掩码标记的行和列共同形成一个下三角注意力掩码矩阵。
具体解释如下:
- 左图:展示了CogLM模型中输入序列的构成,包含了文本和图像的标记,通过特定的分隔标记[BOI]来区分。并且说明了掩码区域的采样是依据不同策略进行的,在计算损失时,只对掩码区域中的倒数第二个标记进行预测,这是模型训练过程中的一个重要细节。
- 右图:强调了掩码的作用,它仅仅影响注意力图,而不会对原始的输入序列进行修改。所有掩码标记的行和列组合起来形成了一个下三角的注意力掩码矩阵,这种结构在模型的注意力机制中起到了重要作用,可能影响模型对不同位置标记的关注程度和信息传递方式。
CogLM的输入 x x x :是文本和图像的标记化后的连接,具体的拼接策略根据任务的不同进行选择。
- 文本标记:表示为 t = [ t 1 , . . . , t M ] t = [t_1, ..., t_M] t=[t1,...,tM],其中 M M M 是文本标记的长度。
- 图像标记:表示为 i m = [ i m 1 , . . . , i m N 2 ] im = [im_1, ..., im_{N^2}] im=[im1,...,imN2],其中 N 2 N^2 N2 是图像标记的长度。
关键步骤:在CogLM中,根据不同的策略采样 k k k 个掩码区域 R = { [ l 0 , r 0 ] , . . . , [ l k , r k ] } R = \{[l_0, r_0], ..., [l_k, r_k]\} R={[l0,r0],...,[lk,rk]}( l k , r k l_k, r_k lk,rk 代表多个掩码区域的起始位置和结束位置)。在实践中使用了两种掩码策略:
- (文本到图像GPT) 输入序列为 x = [ t [ B O T ] i m ] x = [t [BOT] im] x=[t[BOT]im]。我们掩码所有图像标记,这与CogView[3]的预训练任务类似。[BOT]表示文本的开始标记。
- (掩码预测和图像字幕的组合) 输入序列为 x = [ i m 0 . . . i m i . . . i m j . . . i m N 2 [ B O E / C ] t ] x = [im_0... im_i... im_j... im_{N^2} [BOE/C] t] x=[im0...imi...imj...imN2[BOE/C]t],其中 [ B O E ] [BOE] [BOE]、 [ B O C ] [BOC] [BOC]是对应语言的开始标记(英语开始和中文开始)。我们掩码随机的图像块和文本标记。理想情况下,这两个任务应该分开;但为了训练效率,我们将它们组合在一起。
CogLM没有在掩码区域中替换标记为[MASK]。相反,模型 保持原始的输入序列不变,但通过构建一个 注意力掩码(attention mask) A A A 来控制哪些标记可以互相关注。
掩码区域外的所有标记都被视为上下文,可以被掩码区域中的其他标记关注。具体来说,注意力掩码
A
A
A的定义如下:
A
[
i
,
j
]
=
{
1
,
if
∀
[
l
u
,
r
u
]
∈
R
,
j
∉
[
l
u
,
r
u
]
,
1
,
if
j
≤
i
and
∃
u
,
v
(
indices
)
,
i
∈
[
l
u
,
r
u
]
∈
R
,
j
∈
[
l
v
,
r
v
]
∈
R
,
0
,
else.
A[i, j] = \begin{cases} 1, & \text{if } \forall [l_u, r_u] \in R, j \notin [l_u, r_u], \\ 1, & \text{if } j \leq i \text{ and } \exists u, v (\text{indices}), i \in [l_u, r_u] \in R, j \in [l_v, r_v] \in R, \\ 0, & \text{else.} \end{cases}
A[i,j]=⎩
⎨
⎧1,1,0,if ∀[lu,ru]∈R,j∈/[lu,ru],if j≤i and ∃u,v(indices),i∈[lu,ru]∈R,j∈[lv,rv]∈R,else.
规则如下:
- 如果 j j j 不在任何掩码区域内, A [ i , j ] = 1 A[i,j] = 1 A[i,j]=1,允许关注。
- 如果 j ≤ i j \leq i j≤i 且 i i i 和 j j j 在同一掩码区域内, A [ i , j ] = 1 A[i,j] = 1 A[i,j]=1,允许关注。
- 其他情况, A [ i , j ] = 0 A[i,j] = 0 A[i,j]=0,不允许关注。
如上图2右,展示了两个掩码区域的注意力掩码矩阵的示例。在掩码区域中,模型学习预测下一个标记。损失函数可以写为:
L
=
−
1
∑
u
r
u
−
l
u
∑
v
∑
i
=
l
v
r
v
−
1
log
p
(
x
i
+
1
∣
x
≤
i
,
x
c
o
n
t
e
x
t
)
,
L = \frac{-1}{\sum_{u} r_{u} - l_{u}} \sum_{v} \sum_{i = l_{v}}^{r_{v}-1} \log p(x_{i + 1}|x_{\leq i}, x_{context}),
L=∑uru−lu−1v∑i=lv∑rv−1logp(xi+1∣x≤i,xcontext),
公式解释
-
x i + 1 x_{i+1} xi+1:指的是序列中的下一个标记(在掩码区域内)。
-
x ≤ i x_{\leq i} x≤i:指的是当前标记及之前所有标记(包括已知的上下文标记)。
-
x c o n t e x t x_{context} xcontext:指的是掩码区域外的上下文标记。
-
l u , r u l_u, r_u lu,ru:表示掩码区域的开始和结束位置。
-
r v , l v r_v, l_v rv,lv:表示特定掩码区域内的结束和开始位置,针对每个掩码区域进行索引。
-
∑ u r u − l u \sum_{u} r_{u} - l_{u} ∑uru−lu:表示掩码区域的总长度,用来对每个掩码区域的损失进行归一化处理。
-
∑ v ∑ i = l v r v − 1 \sum_{v} \sum_{i = l_{v}}^{r_{v}-1} ∑v∑i=lvrv−1:遍历所有掩码区域,并对每个区域中的标记进行求和。
-
log p ( x i + 1 ∣ x ≤ i , x c o n t e x t ) \log p(x_{i + 1}|x_{\leq i}, x_{context}) logp(xi+1∣x≤i,xcontext):对于每个位置 i i i,计算模型在给定上下文和之前标记的条件下,预测下一个标记 x i + 1 x_{i+1} xi+1 的对数概率。
2. 填充
注意以下事项:
- 训练期间掩码区域中的第一个标记不进行预测,这可能会使CogLM无法进行图像填充或自然语言中的完形填空。
- 推理过程中,为解决此问题,可以将每个掩码区域前的最后一个上下文标记移动到掩码区域内,如图3所示。
- 这种操作的影响较小,尽管移动的标记在它们之前的掩码区域中成为盲点,但对结果影响微乎其微。
- 每个掩码区域单独处理,只移动该区域前的最后一个上下文标记,保留掩码区域外的已知标记。这稍微减慢了多区域填充的速度。
3. 与GPT、GLM和MAE相比的优势
- GPT vs CogLM:CogLM的主要优势是双向上下文,有助于依赖全局信息的任务,如超分辨率和图像分类。
- GLM vs CogLM:CogLM相较于GLM更为简单,无需新增特殊标记或位置嵌入,避免破坏图像空间相关性,支持二维局部注意力或卷积。
- MAE vs CogLM:MAE是为纯图像数据的自监督学习和重建而设计的,尚未准备好用于生成。CogLM比MAE更参数效率高效,因为MAE是编码器 - 解码器结构。编码器和解码器中的相当一部分参数用于学习相同的功能,例如从输入中提取基本特征。
预训练
CogLM是一个通用的预训练框架,在本节中,将描述预训练的CogLM的细节和超参数。
1. 统一标记器 icek
- 统一标记器 icek:CogLM使用了一个统一的标记化工具icek(标记器)来处理图像、中文和英文的标记。它用于将输入的文本和图像转化为模型可以理解的标记。
- 词汇表:
- 对于文本,使用了一个包含130,000个标记的双语词汇表,该词汇表将标记分为不同类别(中文、英文、常见符号和稀有符号),便于模型在训练过程中处理不同语言和符号的生成。
- 对于图像,使用了一个20,000个标记的VQ-VAE(变分自编码器)模型,这个模型是基于图像生成的第一阶段技术。它采用了CogView中的标记器,并通过引入感知损失(Perceptual Loss)来改善图像重建性能。感知损失有助于在生成图像时保留更高质量的视觉信息。
感知损失在Stable Diffusion核心网络结构——VAE中也有使用到。
2. Transformer
- 骨干结构:CogLM的骨干模型是一个Transformer,并且使用了三明治层归一化(Sandwich Layer-Norm)来增强模型的训练稳定性。
- 参数规模:该模型有60亿个参数,由48层组成,每层的隐藏层大小为3072,使用了48个注意力头。
3. 掩码策略(Masking Strategy)
- 掩码采样策略:在训练时,每个样本都会随机选择一种掩码策略,这意味着不同的训练样本在掩码区域的设置上是不同的。
- 掩码百分比和块分布:根据SimMIM的研究,掩码区域的大小和分布会影响训练效果。为了遵循这些研究成果,CogLM随机采样4×4大小的图像标记块,并确保最多75%的标记会被掩码(即隐藏在训练过程中)。
- 双语样本:在处理双语文本时,训练期间会随机选择使用中文或英文作为目标语言,进一步增加了训练的多样性和鲁棒性。
分层生成(CogView2)
预训练的CogLM可以从文本生成图像,但初始生成的图像分辨率较低(20×20标记,160×160像素)。为了提高分辨率,CogLM可以通过微调成超分辨率模型,构建了一个CogView2系统,采用了分层生成的策略。
1. 直接超分辨率
- 目标:将低分辨率图像标记序列(20×20)映射到更高分辨率的序列(60×60)。
- 方法:
- 编码器-解码器架构:编码器输入为低分辨率图像标记序列,解码器输入为一个60×60的[MASK]序列。
- 解码器标记同时关注解码器和编码器中的局部标记,通过下节的自定义的CUDA内核实现跨分辨率局部注意力。
- 微调方式:仅微调解码器的注意力层,固定并共享编码器和解码器的其他参数,减少内存消耗。
- 损失函数:基于标记或像素(MAE)损失,通过预测或最大化每个标记 i i i 的边缘分布 p ( i m i 1 ∣ i m 0 ) p(im_i^1|im^0) p(imi1∣im0),而不是 p ( i m 1 ∣ i m 0 ) p(im^1|im^0) p(im1∣im0)
p ( i m i 1 ∣ i m 0 ) p(im_i^1 | im^0) p(imi1∣im0) 关注的是每一个单独标记 i m i 1 im_i^1 imi1的生成。
p ( i m 1 ∣ i m 0 ) p(im^1 | im^0) p(im1∣im0) 则是整个高分辨率图像序列的生成概率,涉及所有标记的联合概率。
由于我们在生成过程中使用交叉熵损失和多项采样,我们得到公式:
i
m
1
=
[
i
m
1
1
,
.
.
.
,
i
m
60
×
60
1
]
,
i
m
i
1
∼
p
θ
(
i
m
i
1
∣
i
m
0
)
,
i
m
i
1
and
i
m
j
1
are independent if
i
≠
j
.
im^1 = [im_1^1,..., im_{60\times60}^1], im_i^1 \sim p_{\theta}(im_i^1|im^0), im_i^1 \text{ and } im_j^1 \text{ are independent if } i \neq j.
im1=[im11,...,im60×601],imi1∼pθ(imi1∣im0),imi1 and imj1 are independent if i=j.
需要使用另一个模块(迭代超分辨率模块)来细化 i m 1 im^1 im1。
2. 迭代超分辨率
迭代超分辨率的目标是将初始的高分辨率序列 i m 1 im^1 im1细化为更高质量的图像的 i m 2 im^2 im2。细化的工作原理是打破生成标记的独立性,同时保持并行性。
因此,提出了一种局部并行自回归(LoPAR)方法:通过保持部分标记作为上下文,避免全局依赖,只生成局部区域内的标记。这使得细化过程既并行化又保持全局一致性。
-
LoPAR的动机:
- 分层过程避免了全局依赖,仅保持25%的随机标记作为上下文即可保证全局场景的恢复。
- 通过掩码75%的标记,生成的图像在局部保持连贯性,确保全局一致性。
-
局部注意力:
- 使用局部窗口大小 σ \sigma σ 限定生成标记的依赖关系:只有当 i i i 和 j j j 之间的距离小于 σ \sigma σ 时, i m i 2 im_i^2 imi2 和 i m j 2 im_j^2 imj2 才会有相关性。
- 如果 i i i 和 j j j 的距离大于 σ \sigma σ,则标记的生成是独立的。
-
对角迭代生成:
- 为了提高并行性,生成过程被分解为对角迭代。通过对局部窗口的标记进行分组,每个小窗口内的标记并行生成。
- 生成过程分解为:
p ( i m 2 ∣ i m 1 ) = ∏ k = 0 2 σ − 1 ( ∏ i p ( i m i 2 ∣ i m 1 , { i m j 2 ∣ r o w ( j ) + c o l ( j ) < k } ) ) p(im^2|im^1) = \prod_{k = 0}^{2\sigma - 1} \left( \prod_{i} p(im_i^2|im^1, \{im_j^2 | row(j) + col(j) < k\}) \right) p(im2∣im1)=k=0∏2σ−1(i∏p(imi2∣im1,{imj2∣row(j)+col(j)<k}))
-
微调过程:
- 通过20,000次迭代微调预训练的CogLM模型,转化为一个具有局部注意力的60×60标记序列上的BERT风格掩码预测模型。
- 在推理时,将局部窗口大小 σ \sigma σ 从6减小至1,并通过合并多次迭代来提高生成效率。
-
细化与并行性:
- 该方法保持了局部连贯性并允许并行化,避免了传统方法在全局依赖上带来的计算瓶颈。
3. 超分辨率模块
上图中:
- 低分辨率图像首先通过直接超分辨率模块转换为高分辨率图像。
- 在迭代超分辨率的每个快照中,相同颜色的所有标记同时生成。所有局部窗口并行工作。
- 对角迭代方式确保局部窗口的标记生成过程中,不同窗口间的标记可以同时生成。
Transformer 的插件改进技术
分簇采样
-
自回归生成中的采样策略:
- 在自回归生成任务中,标记的预测分布的采样策略至关重要。
- 常见策略包括 Top-k 和 Top-p (nucleus) 采样,但这些方法会面临 不完整截断 问题,特别是在处理相似的标记时。
-
图像标记的词汇和问题:
- 图像标记词汇由 VQVAE 学习,包含 20,000 个标记,比以往的工作大三倍。
- 这些标记中,一些嵌入非常相似,如 “白色” 相关的标记,有大约 42 个几乎相同的标记。
- 尽管这些“白色”标记的概率之和可能较大,但它们在 top-k 采样 中通常会被过滤掉,导致不完整的抽样。
-
分簇采样的解决方案:
- 为了避免不完整抽样问题,提出 分簇采样 方法。
- K 均值算法(K-means)被用来将 20,000 个标记 分成 500 个簇。
- 采样时,首先基于簇内标记的概率总和进行 top-k 采样,然后在所选簇内进行采样。
- 这种方法确保每个簇作为一个整体被处理,所有标记一起被过滤或保留,从而减少不完整截断问题的影响。
局部注意力(定制的 CUDA 内核)
-
局部性在图像数据中的重要性:
- 局部性是图像数据的关键特性之一。
- 传统的视觉计算,如卷积操作,强调局部性,在 ViT(Vision Transformer)之前占主导地位。
- 即使在 ViT 中,注意力也主要处理局部标记之间的交互。
-
局部注意力与文本注意力的结合:
- 局部注意力 和 文本注意力 可以一起使用来微调预训练的 CogLM,并且通常与预训练的 全局注意力 权重兼容。
-
定制 CUDA 内核的实现:
- 由于 2D 局部注意力 无法高效在现有框架(如 Pytorch)中实现,开发了 定制的 CUDA 内核 来支持:
- 2D 局部注意力
- 2D 自回归局部注意力
- 跨分辨率局部注意力
- 该方法可以节省约 一半的矩阵乘法计算量,且不需要因果注意掩蔽。
- 由于 2D 局部注意力 无法高效在现有框架(如 Pytorch)中实现,开发了 定制的 CUDA 内核 来支持:
-
超分辨率模块中的局部注意力:
- 在 超分辨率模块 中,使用了 9×9 的感受野进行局部注意力。
- 基准测试(在 A100 GPU 上,隐藏大小为 64 的单头注意力)显示,相比于传统的 4,096 序列上的全局注意力,该方法的优势特别在自回归场景中表现突出:
- 提升 40 倍 速度
- 内存占用减少至 1%
加强文本注意力(增强相关性)
- 问题:在CogLM的大量训练数据中,大多数文本-图像对之间的相关性较弱。即使模型拟合数据良好,也可能生成与文本无关的图像。
- 解决方案:为了增强文本和图像之间的相关性,采用了加强文本注意力的策略。通过对文本注意力的分数进行调整,增加文本标记对图像生成的影响。
- 方法:向文本注意力分数中添加常量 c(为简单起见,省略了注意力掩码),以提高文本信息在生成过程中的权重,从而增强文本和图像之间的相关性。
A t t e n t i o n ( Q , K , V , A ) = softmax ( Q T K d + [ c ⋯ c ⏟ text part 0 ⋯ 0 ⏟ image part ] ) V . ( 7 ) Attention(Q,K,V,A)=\text{softmax}(\frac{Q^{T}K}{\sqrt{d}} + \begin{bmatrix} \underbrace{c\cdots c}_{\text{text part}} & \underbrace{0\cdots 0}_{\text{image part}} \end{bmatrix})V. \quad (7) Attention(Q,K,V,A)=softmax(dQTK+[text part c⋯cimage part 0⋯0])V.(7)
这种技术耗时可忽略不计,但大大提高了生成图像的文本相关性。在实践中, c < 3 c < 3 c<3不会影响图像的质量。