直接在高分辨率图像上训练生成对抗网络会面临重大挑战。大型网络难以优化,梯度可能消失或爆炸,并且生成器和判别器难以有效协调它们的学习过程,尤其是在早期阶段,生成的图像与目标分布几乎没有相似之处。在学习图像的粗略结构的同时,从零开始生成精细细节,要求很高。为解决直接训练高分辨率图像生成对抗网络所面临的挑战,2017年由Karras等人(NVIDIA)提出了渐进式生成对抗网络(ProGAN)这一巧妙方法。ProGAN不是从一开始就为目标高分辨率训练一个单一的大型网络,而是从非常低分辨率的图像(例如4x4像素)开始,并逐步为生成器(G)和判别器(D)添加层,以处理逐步提升的分辨率(8x8、16x16,…,直到1024x1024或更高)。核心思想:逐步增长基本原则是首先训练网络以在低分辨率下理解图像分布的粗略结构。一旦这个初始阶段收敛得相对好,就会在G和D中添加新层,以使空间分辨率翻倍。先前训练的层提供了一个稳定的基础,新层则侧重于学习与增加的分辨率相关的更精细细节。这个过程重复进行,直到达到期望的输出分辨率。通过层淡入稳定增长突然引入新层可能会冲击系统并使训练不稳定。ProGAN通过平滑地融入新层来解决这个问题。当从分辨率 $R \times R$ 过渡到 $2R \times 2R$ 时,会添加新层,但其影响通过参数 $\alpha$ 逐渐增加,该参数在多次迭代中从0递增到1。以生成器为例:现有层以 $R \times R$ 分辨率生成图像。此输出被上采样到 $2R \times 2R$。新添加的层也处理前一阶段的特征图,并生成在新的 $2R \times 2R$ 分辨率下操作的图像块。最终输出是这两个路径的加权组合: $$ \text{输出}{2R \times 2R} = (1 - \alpha) \times (\text{上采样输出}{R \times R}) + \alpha \times (\text{新层输出}_{2R \times 2R}) $$判别器中也发生类似的淡入过程,但方向相反: $2R \times 2R$ 的输入图像由新层处理,而一个下采样版本($R \times R$)则绕过它们进入网络的旧部分。判别器的判断基于这两个路径输出的凸组合(由 $\alpha$ 控制)。digraph ProGAN_FadeIn { rankdir=TB; splines=ortho; node [shape=box, style="filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_G { label = "生成器(从R增长到2R)"; bgcolor="#f8f9fa"; node [fillcolor="#a5d8ff"]; G_Input [label="潜变量z"]; G_Layers_R [label="RxR层"]; G_toRGB_R [label="toRGB (RxR)", shape=ellipse, fillcolor="#96f2d7"]; G_Upsample_R [label="上采样x2"]; G_NewLayers_2R [label="2Rx2R新层"]; G_toRGB_2R [label="toRGB (2Rx2R)", shape=ellipse, fillcolor="#96f2d7"]; G_Combine [label="组合 (α)", shape=invhouse, fillcolor="#ffe066"]; G_Output_2R [label="输出 (2Rx2R)"]; G_Input -> G_Layers_R; G_Layers_R -> G_toRGB_R [label=" (1-α) 路径"]; G_toRGB_R -> G_Upsample_R; G_Upsample_R -> G_Combine [label=" (1-α)"]; G_Layers_R -> G_NewLayers_2R [label=" α 路径"]; G_NewLayers_2R -> G_toRGB_2R; G_toRGB_2R -> G_Combine [label=" α"]; G_Combine -> G_Output_2R; } subgraph cluster_D { label = "判别器(从R增长到2R)"; bgcolor="#fff9db"; node [fillcolor="#ffc9c9"]; D_Input_2R [label="输入图像 (2Rx2R)"]; D_fromRGB_2R [label="fromRGB (2Rx2R)", shape=ellipse, fillcolor="#fcc2d7"]; D_NewLayers_2R [label="2Rx2R新层"]; D_Downsample_2R [label="下采样x2 (平均池化)"]; D_fromRGB_R [label="fromRGB (RxR)", shape=ellipse, fillcolor="#fcc2d7"]; D_Combine [label="组合 (α)", shape=house, fillcolor="#ffe066"]; D_Layers_R [label="RxR层"]; D_Output [label="真/假判断"]; D_Input_2R -> D_fromRGB_2R [label=" α 路径"]; D_fromRGB_2R -> D_NewLayers_2R; D_Input_2R -> D_Downsample_2R [label=" (1-α) 路径"]; D_Downsample_2R -> D_fromRGB_R; D_NewLayers_2R -> D_Combine [label=" α"]; D_fromRGB_R -> D_Combine [label=" (1-α)"]; D_Combine -> D_Layers_R; D_Layers_R -> D_Output; } }渐进式增长阶段过渡。添加新层(G中蓝色,D中红色)以处理 $2R \times 2R$ 分辨率。它们的输出与先前 $R \times R$ 阶段的输出(G中上采样,D中下采样)结合,使用一个从0增加到1的参数 $\alpha$,确保平滑过渡。这种逐步适应让网络能够融入新的细节处理能力,而不会干扰从较低分辨率学到的已稳定特征。渐进式训练的优点训练稳定性: 通过首先侧重于更简单的低分辨率结构,优化问题在初始阶段会更容易。网络在处理复杂的高频细节之前建立起扎实的基础。这大幅降低了训练大型GANs时常出现的灾难性模式崩溃或发散训练动态的可能性。训练更快: 尽管训练涉及多个阶段,但每个阶段的训练速度都快于从一开始就尝试训练完整的高分辨率网络。早期阶段在低分辨率数据上快速收敛。高分辨率合成: ProGAN在生成1024x1024等分辨率的高质量、连贯图像方面具有里程碑意义,这在当时是一大进步。架构考量及支持技术虽然渐进式增长是核心思想,但ProGAN的成功也依赖于在每个阶段应用的其他几种架构选择和训练技术:等效学习率: ProGAN不是依赖仔细的权重初始化,而是使用运行时机制来动态缩放每层中的权重。具体来说,权重 $w_i$ 通过一个源自He初始化器的逐层常数 $c$ 进行缩放:$\hat{w}_i = w_i / c$。这确保了输出的方差在各层和量级之间保持一致,提高了稳定性。逐像素特征向量归一化: 在生成器中每个卷积层之后应用,此技术将每个像素的特征向量归一化为单位长度。这有助于防止信号幅度不断增大,在生成器网络中特别有用。小批量标准差: 为了鼓励生成器生成更多样化的样本并防止模式崩溃,判别器末端附近添加了一层。此层计算每个空间位置在小批量样本中特征的标准差,计算所有特征和位置的平均标准差,并将此标量值作为附加特征图附加到判别器最后一层的输入。这为判别器提供了关于批次统计信息的信号,隐式地鼓励生成器创建具有与真实数据相似统计信息的批次。ProGAN的影响渐进式增长展示了一种用于训练高分辨率GANs的强大方法。它强调了课程学习原则(从简单开始,逐步增加复杂度)在生成模型中的重要性。尽管StyleGAN等架构在此基础上进行改进,但ProGAN引入的渐进式分辨率提升的核心思想仍然是GAN实践者工具包中的一项重要技术,显示了周密的架构设计如何解决基本的训练难题。