1.3 造假者与鉴定师档案:生成器与判别器


1.3 造假者与鉴定师档案:生成器与判别器

生成器是一个从噪声空间到数据空间的可微映射网络,判别器是一个从数据空间到真假分数的打分网络。 前者以上采样/解码结构为主业,后者以下采样/判别结构为主业。本节给双方各建一份档案卡:输入输出、网络形态、参数量演算与职责边界,为第 3 章的架构家族打好地基。

1.2 节的回合制里,两位主角只是"常数参数"的占位符。真实博弈室里,他们是有血有肉的网络——造假者如何把 100 维噪声"吹"成一张 64×64 的图,鉴定师又凭什么在几层卷积内给出真假判决,是本节要建档的内容。

造假者档案:生成器 G

输入:固定维度的随机噪声向量 z(常取 100 维标准正态);输出:与真实样本同形状的数据(图像场景为 H×W×C 张量);职责:把噪声空间的每一点映射成"看起来真"的样本,要求可微、覆盖广。

网络形态上,生成器本质是个解码器:入口是全连接层把 100 维噪声投影成 512×4×4 的特征图,随后逐级上采样(转置卷积把 4×4 放大到 8×8、16×16、32×32、64×64),通道数逐级减半、空间分辨率逐级翻倍。用代码把这份档案的"体格"量出来:

# DCGAN 风格生成器的参数量演算(转置卷积核 4、步幅 2、填充 1) # 每层参数量 = in_channels * out_channels * 4 * 4 + out_channels(偏置) layers = [(100, 512), (512, 256), (256, 128), (128, 64), (64, 1)] total = 0 for i, o in layers: p = i * o * 16 + o total += p print(f"转置卷积 {i:3d} -> {o:3d}: 参数量 = {p:,}") # 输出: # 转置卷积 100 -> 512: 参数量 = 819,712 # 转置卷积 512 -> 256: 参数量 = 2,097,408 # 转置卷积 256 -> 128: 参数量 = 524,416 # 转置卷积 128 -> 64: 参数量 = 131,136 # 转置卷积 64 -> 1: 参数量 = 1,025 print(f"生成器总参数量 = {total:,}") # 输出: 生成器总参数量 = 3,573,697(约 357 万)

两个值得注意的细节:第一层的参数量占了近四分之一——噪声入口的投影是重头戏,把它从全连接换成"常数+可学习风格"正是后文 StyleGAN 改造的起点之一;输出层通道数收拢到 1(灰度)或 3(彩色),激活用 tanh 把像素压进固定范围。

# 上采样尺寸演算:转置卷积(核4, 步幅2, 填充1)的输出尺寸公式 # out = (in - 1) * stride - 2*padding + kernel = (in - 1) * 2 + 2 for H in [1, 4, 8, 16, 32, 64]: print(f"输入 {H:2d}x{H:2d} -> 输出 {(H-1)*2+2:3d}x{(H-1)*2+2:3d}") # 输出: # 输入 1x 1 -> 输出 2x 2 # 输入 4x 4 -> 输出 8x 8 # 输入 8x 8 -> 输出 16x 16 # 输入 16x16 -> 输出 32x 32 # 输入 32x32 -> 输出 64x 64 # 输入 64x64 -> 输出 128x128

尺寸翻倍的链路 4→8→16→32→64 就是"从 512 通道的 4×4 胚子长成 1 通道的 64×64 成品"的骨架。第 3.2 节会把这套结构配上归一化与激活的完整守则。

鉴定师档案:判别器 D

输入:真样本或生成样本;输出:一个标量分数(经 sigmoid 后解释为"真品概率");职责:对单个样本独立打分,为生成器提供可微的"像不像"信号。

形态上是生成器的镜像:编码器。卷积层逐级下采样(64×64→32×32→16×16→8×8→4×4),通道数翻倍,最后压成单个 logit。同样算一笔体格账:

# 判别器参数量(卷积核 4、步幅 2、填充 1,输入灰度图) # 每层参数量同样是 in*out*16 + out dlayers = [(1, 64), (64, 128), (128, 256), (256, 512)] dtotal = sum(i * o * 16 + o for i, o in dlayers) for i, o in dlayers: print(f"卷积 {i:3d} -> {o:3d}: 参数量 = {i*o*16+o:,}") # 输出: # 卷积 1 -> 64: 参数量 = 1,088 # 卷积 64 -> 128: 参数量 = 131,200 # 卷积 128 -> 256: 参数量 = 524,544 # 卷积 256 -> 512: 参数量 = 2,097,664 print(f"判别器四层卷积合计 = {dtotal:,}(再加收尾全连接约 824k,总计约 358 万)") # 输出: 判别器四层卷积合计 = 2,754,496

双方体格大体对称(一个 357 万、一个约 358 万)不是巧合:实力过于悬殊的博弈室是训不动的——鉴定师碾压时造假者拿不到有效梯度,造假者碾压时鉴定师沦为摆设。第 6.2 节会用数值演算定量展示"碾压"到底卡死在哪一环。

档案项 生成器 G 判别器 D
输入 噪声 z(100 维正态) 样本 x(真或假)
输出 数据空间样本 真假分数(0 到 1)
结构方向 解码/上采样 编码/下采样
末层激活 tanh(压像素范围) sigmoid(出概率)
训练目标 让 D 打高分 真打 1 假打 0
是否见真样本 否(只收梯度) 是(直接接触)

职责边界:D 只是个"打分器"

判别器的输出常被误解成"分类器",但它比分类器要求更多:不仅要给出判决,还要给出可微的置信度——生成器正是沿着这个分数的梯度改进工艺。这也解释了为什么后来 WGAN 干脆把判别器改叫"评论家"(critic):它不再输出概率,而是输出一个实数分数,衡量"这个样本有多像真品分布的成员"(3.4 节详述)。

💡 关键直觉:生成器与判别器不是师生关系,而是互相利用的对手。判别器是生成器唯一的"教材",教材的好坏直接决定学习上限——这就是为什么后来大量研究花在"如何让判别器给出更有信息量的梯度"上。

本节要点回顾

  • 生成器 = 可微解码器:噪声投影成小特征图,逐级上采样到目标尺寸,DCGAN 风格约 357 万参数;
  • 判别器 = 可微编码器:逐级下采样到单 logit,与生成器体格大体对称;
  • 尺寸公式:核 4 步 2 填 1 的转置卷积让边长每层翻倍,4→8→16→32→64;
  • 不对称的知识通道:D 见真样本,G 只见梯度,D 的打分质量是 G 的学习上限;
  • 延伸伏笔:StyleGAN 改造噪声入口、WGAN 把 D 换成评论家,都能在本节的档案里找到改动坐标。

常见问题:档案的实操细节

噪声维度为什么常取 100? 没有理论最优,是实验传统。过低(比如 8 维)会限制生成多样性——所有样本挤在低维流形上;过高增加训练负担而收益甚微。100 到 128 是多数任务的安全区,重要任务可以扫一遍 64/128/256 看多样性变化。

生成器输出层的 tanh 能换成别的吗? 能,但要与数据缩放配套。tanh 输出范围是负 1 到 1,所以训练图像要先缩放到同一区间(第 4.3 节实战的数据准备)。换成 sigmoid 则配 0 到 1,不换激活就要配对应的归一化方案,三处必须一致。

判别器为什么常用 LeakyReLU 而不是 ReLU? 判别器的梯度要回传给生成器,ReLU 的死区(负半轴梯度为零)会把梯度通道整片掐断;LeakyReLU 给负半轴留一个小斜率(常取 0.2),通道始终有信号。这是 DCGAN 守则(第 3.2 节)的动机之一。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U