2 生成对抗网络基础回顾之GAN的架构
系列进度
生成对抗网络高级 · 第 2 / 21 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
GAN 进阶内容要围绕稳定性、条件控制、架构变化和评估方法建立判断框架。阅读时可以按「GAN的基本架构 -> 生成器的设计 -> 案例:使用全连接网络作为生成器 -> 判别器的设计」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「GAN的基本架构」,再查「生成器的设计」。
在前一篇中,我们回顾了生成对抗网络(GAN)的基本定义,了解了其主要构成要素。这一篇将深入探讨GAN的架构,特别是生成器(Generator)和判别器(Discriminator)的设计及其相互关系。
GAN的基本架构
生成对抗网络由两个主要部分构成:
学习 GAN 架构时,不要把生成器和判别器分开背。看清输入、输出、判别信号和更新方向,训练过程才容易理解。
- 生成器(Generator):负责生成与真实数据分布相似的样本。生成器通常通过对随机噪声向量进行处理来生成数据。
- 判别器(Discriminator):负责区分真实数据和生成数据。判别器的目标是提高识别能力,从而准确判断输入是来自真实数据集还是生成器产生的伪造样本。
整个网络的训练过程是一个“博弈”,即生成器和判别器之间的对抗。生成器试图生成尽可能真实的数据以欺骗判别器,而判别器则不断提高自身的判断能力,以区分真假数据。
这两部分通常以一个循环的方式共同优化。生成器和判别器之间相互博弈,具体过程可以用以下公式表示:
在这里,表示真实数据的分布,表示随机噪声的分布,是判别器对真实样本的预测,是判别器对生成样本的预测。
生成器的设计
生成器的任务是通过输入随机噪声生成符合目标分布的数据。在许多实际应用中,生成器的设计往往使用深度神经网络(DNN)或卷积神经网络(CNN)。
《生成对抗网络基础回顾之GAN的架构》读到最后,可以把图里的流程当成检查表:问题是否明确,操作是否落地,判断标准是否能复用。
案例:使用全连接网络作为生成器
以MNIST数据集为例,我们可以使用一个简单的全连接神经网络(FCN)作为生成器。以下是一个简单的实现示例(使用TensorFlow/Keras):
import tensorflow as tf
from tensorflow.keras import layers
def build_generator():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_dim=100))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(784, activation='sigmoid')) # 输出层
model.add(layers.Reshape((28, 28, 1))) # 将输出重塑为28x28图像
return model
generator = build_generator()
generator.summary()
在这个例子中,我们定义了一个接收100维随机噪声向量并输出28x28灰度图像的生成器。通过使用ReLU激活函数和最终的Sigmoid激活函数,生成器能够生成类似MNIST手写数字的图像。
判别器的设计
判别器的设计通常也可以使用深度神经网络,其输入是样本(无论是真实样本还是生成样本),输出为一个0到1之间的概率值,表示样本为真实数据的概率。
案例:使用卷积网络作为判别器
下面是一个简单的卷积神经网络(CNN)作为判别器的示例:
def build_discriminator():
model = tf.keras.Sequential()
model.add(layers.Conv2D(64, kernel_size=3, strides=2, padding='same', input_shape=(28, 28, 1)))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(128, kernel_size=3, strides=2, padding='same'))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dense(1, activation='sigmoid')) # 输出为概率
return model
discriminator = build_discriminator()
discriminator.summary()
在这个例子中,判别器使用了卷积网络来处理28x28的灰度图像,通过多层卷积和Leaky ReLU激活函数来提取图像特征,最后输出一个表示真实概率的值。
GAN的训练过程
GAN的训练过程通常交替进行,周期性更新生成器和判别器。首先,训练判别器使用真实数据和生成数据,然后更新生成器来提高其生成质量。
相比于传统的机器学习模型,GAN的训练过程更为复杂,尤其是由于二者之间的对抗性,有时可能会导致训练不稳定。为了提高稳定性,许多改进算法(如WGAN、DCGAN等)被提出。
学完《生成对抗网络基础回顾之GAN的架构》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《生成对抗网络基础回顾之GAN的架构》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
小结
在本节中,我们详细探讨了生成对抗网络的架构,特别是生成器和判别器的设计。生成器的目的是生成与真实样本相似的伪造数据,而判别器则负责具有挑剔眼光地辨别真实和伪造数据的真实性。
在下一篇中,我们将讨论生成对抗网络的损失函数及其在训练过程中如何影响性能。通过对损失函数的理解,我们可以更好地优化GAN的训练过程,提升生成的图像质量。
希望这一部分能够帮助您了解GAN的核心架构,并为您的进一步学习打好基础。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
生成对抗网络基础回顾之GAN的架构适合谁读?
这是 生成对抗网络高级 系列第 2 / 21 篇,适合正在学习生成对抗网络高级,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇生成对抗网络高级教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读