卷积神经网络(CNN),作为许多计算机视觉任务的主力,包括DCGAN这类早期的GAN,擅长捕捉局部空间层次。卷积核对输入特征图的局部小块进行操作,逐层构建更复杂的特征。然而,当生成图像需要理解场景中远距离部分之间的关系时,这种局部性可能是一个局限。例如,正确生成大型物体的纹理或确保人脸左右两侧的一致性,需要对图像大范围内的关联进行建模。标准卷积难以有效捕获这些长距离关联;信息需要通过多层传播,可能被稀释或扭曲。为了解决这个局限,研究人员调整了自注意力的思路,这种思路最初是为机器翻译等序列建模任务开发的,现在用于GAN架构中。其主要目的是使网络能够直接对特征图中任意位置(不论空间距离多远)之间的关系进行建模。自注意力在GAN中的运作方式在GAN中图像生成的背景下,自注意力层接收前一层的特征图(例如,卷积层)作为输入。对于该输入图中的每个位置(像素或特征向量),自注意力机制计算一个“注意力图”,该图显示了在计算当前位置的输出特征时,应将多少关注放在所有其他位置上。对于特征图中的特定位置 $i$,网络计算:查询 (Query): 当前位置 $i$ 的表示,询问“我在寻找什么?”。键 (Keys): 所有其他位置 $j$ 的表示,表示“我拥有什么信息?”。值 (Values): 所有其他位置 $j$ 的表示,表示“如果被关注,我应该提供什么信息?”。位置 $i$ 和位置 $j$ 之间的注意力权重通常根据位置 $i$ 的查询和位置 $j$ 的键之间的相似度(常使用点积)计算。这些权重随后在所有位置 $j$ 上进行归一化(通常使用 softmax)。位置 $i$ 的最终输出特征是所有位置 $j$ 的值的加权和,其中权重是计算出的注意力分数。从数学上看,如果 $x \in \mathbb{R}^{C \times N}$ 是输入特征图(其中 $C$ 是通道数,$N = H \times W$ 是空间位置的数量),则位置 $i$ 的自注意力输出 $o_i$ 可以表示为:$$ y_i = \sum_{j} \alpha_{ij} (W_v x_j) $$$$ \alpha_{ij} = \text{softmax}j (e{ij}) $$$$ e_{ij} = \frac{(W_q x_i)^T (W_k x_j)}{\sqrt{d_k}} $$这里:$x_i, x_j$ 是位置 $i$ 和 $j$ 的输入特征向量。$W_q, W_k, W_v$ 是学习到的权重矩阵,分别将输入特征转换为查询、键和值。$d_k$ 是向量的维度,用于缩放。$e_{ij}$ 代表位置 $i$ 和 $j$ 之间的注意力能量或分数。$\alpha_{ij}$ 是归一化的注意力权重,显示了位置 $j$ 对位置 $i$ 的影响程度。$y_i$ 是位置 $i$ 的输出特征向量,通过转换值的加权和计算得到。自注意力层的最终输出 $o$ 通常与原始输入特征图 $x$ 结合,通常使用一个学习到的缩放参数 $\gamma$:$$ o_i = \gamma y_i + x_i $$这种残差连接有助于训练过程的平稳进行,并允许网络在注意力机制无益时轻松跳过它。digraph SelfAttention { rankdir=LR; node [shape=box, style=filled, fillcolor="#e9ecef", fontname="Helvetica"]; edge [fontname="Helvetica"]; Input [label="输入特征图\n(位置 i)"]; Q [label="查询 (Q)\nWq * xi", fillcolor="#a5d8ff"]; K [label="键 (K)\nWk * xj", fillcolor="#b2f2bb"]; V [label="值 (V)\nWv * xj", fillcolor="#ffd8a8"]; DotProd [label="点积\nQ . K^T", shape=ellipse, fillcolor="#ffc9c9"]; Softmax [label="Softmax\n(注意力图 α)", shape=ellipse, fillcolor="#eebefa"]; WeightedSum [label="加权和\nΣ α * V", shape=ellipse, fillcolor="#96f2d7"]; ScaleAdd [label="缩放与相加\nγ * 输出 + 输入", shape=ellipse, fillcolor="#bac8ff"]; Output [label="输出特征图\n(位置 i)"]; Input -> Q; Input -> K; Input -> V; Q -> DotProd; K -> DotProd; DotProd -> Softmax [label="/ sqrt(dk)"]; Softmax -> WeightedSum [label="αij"]; V -> WeightedSum; WeightedSum -> ScaleAdd [label="γ"]; Input -> ScaleAdd; ScaleAdd -> Output; }自注意力机制中,单个输出位置的信息流,由所有输入位置生成。在GAN中的应用 (SAGAN)自注意力生成对抗网络(SAGAN)论文展示了将这些层集成到生成器和判别器中的有效性。在生成器中: 自注意力有助于合成具有更好全局一致性的图像。例如,它可以确保应用于大型物体的纹理在其整个表面上保持一致,或者生成人脸中的眼睛等特征能够相互正确对齐,即使它们在像素空间中相距较远。在判别器中: 自注意力使判别器在判断图像真伪时,能够检查图像更大范围内的结构一致性。它可以验证真实图像中应存在的长距离关联,但这些关联可能在生成的图像中缺失。通常,由于计算成本,自注意力层不会在整个网络中使用。它们通常策略性地放置在生成器较后层(处理更大的特征图)和判别器较早层(特征图仍相对较大)中。优势与考量集成自注意力已显示出显著的改进:图像质量提升: 像SAGAN和BigGAN这样高度依赖自注意力的模型,与当时纯卷积架构相比,在Inception Score (IS) 和 Fréchet Inception Distance (FID) 等指标上展现了实质性提升。建模长距离关联: 主要优势在于全局上下文的明确建模,从而生成结构上更连贯、更逼真的图像。训练平稳性: 一些研究表明注意力有助于提升GAN训练过程的平稳性,尽管下一章中讨论的平稳化技术(如谱归一化,常与注意力一同使用)也起着重要作用。然而,有一个重要的考量:计算成本: 标准自注意力机制的计算复杂度与特征图中空间位置的数量 $N$($N=H \times W$)呈二次方关系 ($O(N^2)$)。这使得它计算量很大,特别是对于高分辨率特征图。因此,自注意力通常应用于GAN架构中中等大小(例如32x32或64x64)的特征图,而不是全输出分辨率。对更高效注意力近似方法的研究仍在进行中。自注意力机制代表着一个重要的架构进展,使GAN能够不再局限于局部模式,并捕捉复杂数据集中固有的全局结构,提升了图像生成质量。像BigGAN这样的模型表明,将自注意力与其他技术(如谱归一化和架构调整)结合,可以实现新规模和逼真度的生成。