趋近智
至今,我们一直关注判别模型,这类模型学习将输入映射到输出,例如图像分类或值预测。而生成模型则采用不同的方式。它们不只是为给定输入预测标签,而是致力于理解和学习数据本身的潜在概率分布。这使得它们能够生成与原始数据集相似的新数据样本。想象一个模型,它不仅能识别手写数字,还能画出新的、看起来合理的数字。这就是生成模型的能力范围。
这些模型有多种应用,包括创建逼真图像、合成音频、生成文本、为训练其他模型扩充数据集,甚至通过找出不符合所学分布的数据点来发现异常。
实质上,判别模型可能学习 (给定输入 时输出 的概率),而生成模型则通常尝试学习 (输入 的概率) 或有时是 ( 和 的联合概率)。Flux.jl 凭借其灵活性和可组合性,为构建这些通常更复杂的架构提供了坚实基础。
接下来我们简要介绍两种主要的生成模型:生成对抗网络 (GAN) (GANs) 和变分自编码器 (VAEs)。
生成对抗网络,简称 GANs,是由 Ian Goodfellow 及其同事提出的一类引人注目的模型。它们基于博弈论方法运行,包含两个神经网络 (neural network):
训练过程是对抗性的:
这两个网络同时进行训练。随着生成器表现提升,判别器的任务变得更难,迫使其不断进步。反过来,随着判别器表现提升,它为生成器提供更强的信号,促使其生成更逼真的样本。这种动态持续进行,直到理想状态下,生成器能够生成与真实数据无法区分的样本。
一个图表,说明生成对抗网络 (GAN) 的基本架构,显示了生成器和判别器之间的交互过程。
在 Flux.jl 中实现 GANs,需要为生成器和判别器定义两个独立的模型(通常使用 Chain)。训练循环比标准的监督学习 (supervised learning)更复杂,因为通常需要交替训练判别器几步,然后训练生成器一步。损失函数 (loss function)根据 GAN 变体(例如,minimax 损失、Wasserstein 损失)进行选择。尽管功能强大,但 GANs 在训练方面有时会比较棘手,通常需要仔细调整超参数 (parameter) (hyperparameter)和架构选择以获得稳定性。
变分自编码器,简称 VAEs,是生成建模的另一种方式,其根源在于概率图模型和变分推断。与 GANs 的对抗设置不同,VAEs 由两个主要部分组成,它们以更协作的方式一同训练:
VAE 的训练目标包含两个主要部分:
为了在训练期间以允许反向传播 (backpropagation)的方式采样 ,VAEs 使用“重参数化技巧”:不是直接从 中采样,而是采样 ,然后计算 ,其中 是元素级乘法。
一个图表,概述了变分自编码器 (VAE) 的结构,显示了编码器、通过重参数化技巧进行的潜在空间采样以及解码器。
在 Flux.jl 中,通常会将编码器和解码器定义为独立的 Chain。编码器可能会输出两倍于潜在维度数量的值(用于均值和对数方差)。重参数化技巧直接使用算术运算和随机数生成(例如 randn!)来实现。损失函数 (loss function)结合了重构项(例如 Flux.Losses.mse)和一个自定义的 KL 散度项。训练包括优化这个组合损失,同时考虑编码器和解码器两部分的参数。
Flux.jl 的设计使其非常适合生成模型有时非传统的架构和训练过程。
Dense、Conv、ConvTranspose 等标准层和各种激活函数 (activation function),轻松定义生成器、判别器、编码器和解码器的自定义网络结构。Flux.train! 循环更复杂的方法。您可能需要编写自定义训练循环来管理 GANs 中的交替更新,或者正确计算和组合 VAEs 中的损失组成部分。您对前面章节中梯度、优化器和参数 (parameter)更新的理解将直接应用于此处。虽然本节只是介绍,但实际实现和训练生成模型需要耐心和反复尝试。与判别模型相比,它们通常对超参数 (hyperparameter)和初始化更敏感。然而,生成新数据的能力为深度学习 (deep learning)带来了许多创意和实际的可能。随着您在深度学习方面的学习,您会发现这些模型能出色地完成多种任务。参考论文和开源实现将为特定的架构和训练技术提供更多指导。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•