news 2026/4/18 10:39:22

大模型教我成为大模型算法工程师之day16: 生成模型基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型教我成为大模型算法工程师之day16: 生成模型基础

Day 16: 生成模型基础 (Generative Models Basics)

摘要:在前面的课程中,我们学习的分类、检测、分割任务都属于判别式模型(判断“是什么”)。而今天,我们将进入生成式模型(创造“有什么”)的奇妙世界。从“左右互搏”的 GAN 到“概率重构”的 VAE,本文将带你推开 AI 内容生成(AIGC)的大门。


1. 判别式 vs 生成式

在深入具体模型之前,先搞清楚两种建模思路的区别:

模型类型英文核心逻辑例子比喻
判别式模型Discriminative学习条件概率 $P(YX)$分类、回归
生成式模型Generative学习联合概率P ( X , Y ) P(X,Y)P(X,Y)或分布P ( X ) P(X)P(X)图像生成、文本生成画家(从白纸画出一幅画)

简单来说,判别式模型在乎决策边界,生成式模型在乎数据分布


2. GAN:生成对抗网络 (Generative Adversarial Networks)

2014年,Ian Goodfellow 提出了 GAN,被 Yann LeCun 誉为“过去十年机器学习领域最有趣的想法”。

2.1 核心思想:零和博弈

GAN 由两个网络组成,它们就像造假币的团伙警察

  • 生成器 (Generator, G):负责“造假”。输入随机噪声z zz,输出假图片G ( z ) G(z)G(z)。目标是骗过判别器。
  • 判别器 (Discriminator, D):负责“打假”。输入图片x xx,判断它是真的(来自数据集)还是假的(来自G GG)。

2.2 训练过程

两者交替训练,最终达到纳什均衡:

  1. 固定 G,训练 D:让 D 能尽可能区分真图和假图。
  2. 固定 D,训练 G:让 G 生成的假图能被 D 误判为真。

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_{z}(z)}[\log (1 - D(G(z)))]GminDmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

2.3 训练的痛点

  • 模式崩塌 (Mode Collapse):G 发现生成某种特定的图很容易骗过 D,于是它就一直生成这一种图,失去了多样性。
  • 训练不稳定:两者很难平衡,如果 D 太强,G 梯度消失学不动;如果 G 太强,D 随便猜,也没法指导 G。

3. 经典 GAN 变体

为了解决原始 GAN 的问题,无数变体涌现:

3.1 DCGAN (Deep Convolutional GAN)

  • 贡献:把 CNN 引入 GAN,并给出了一系列工程实践建议(如去掉 Pooling 用 Strided Conv,用 BatchNorm,用 LeakyReLU 等)。
  • 地位:GAN 走向实用化的第一步。

3.2 WGAN (Wasserstein GAN)

  • 贡献:从理论上解决了训练不稳定的问题。用Wasserstein 距离(推土机距离)代替原来的 JS 散度来衡量分布差异。
  • 特点:训练超稳定,不用小心翼翼调节 D 和 G 的平衡。

3.3 StyleGAN

  • 贡献:生成人脸的霸主。
  • 核心:引入了Style Transfer的思想,通过映射网络(Mapping Network)把噪声解耦,控制生成的不同层级特征(粗糙特征控制脸型,精细特征控制发色)。

3.4 BigGAN

  • 贡献:简单粗暴,“大”就是好。更大的模型、更大的 Batch Size,生成了高分辨率、高质量的 ImageNet 图像。

4. VAE:变分自编码器 (Variational Autoencoders)

如果说 GAN 是“无中生有”,VAE 则是“先压后解”。它基于贝叶斯推断,是一个有着严谨数学推导的模型。

4.1 结构

  1. Encoder (推断网络):输入图片x xx,输出隐变量z zz的分布(均值μ \muμ和方差σ \sigmaσ)。
  2. Decoder (生成网络):从分布中采样z zz,重构出图片x ^ \hat{x}x^

4.2 核心技巧:重参数化 (Reparameterization Trick)

  • 问题:直接从N ( μ , σ 2 ) N(\mu, \sigma^2)N(μ,σ2)采样这个操作是不可导的,没法反向传播。
  • 解决:把采样变成z = μ + σ ⋅ ϵ z = \mu + \sigma \cdot \epsilonz=μ+σϵ,其中ϵ ∼ N ( 0 , 1 ) \epsilon \sim N(0, 1)ϵN(0,1)。这样ϵ \epsilonϵ是常数,μ \muμσ \sigmaσ就可以求导了。

4.3 损失函数

L o s s = Reconstruction Loss + KL Divergence Loss = \text{Reconstruction Loss} + \text{KL Divergence}Loss=Reconstruction Loss+KL Divergence

  • 重构损失:生成的图要像原图。
  • KL 散度:隐变量z zz的分布要尽可能接近标准正态分布N ( 0 , 1 ) N(0, 1)N(0,1)(为了方便采样)。

4.4 GAN vs VAE

  • GAN:生成的图清晰度高,但多样性可能差,训练难。
  • VAE:生成的图容易模糊(因为是概率分布的均值),但分布特性好,训练稳定。

5. Flow-based Models (流模型)

这是一个比较小众但优雅的流派(如 Glow)。

  • 核心:设计一系列可逆的变换函数f ff
  • 优点:可以精确计算似然概率P ( x ) P(x)P(x),生成的隐变量极其平滑。
  • 缺点:为了保证可逆,网络结构受限,计算量巨大。

6. 代码实践:PyTorch 实现最简单的 GAN

这里用 MNIST 数据集演示一个全连接层的 GAN。

importtorchimporttorch.nnasnn# 1. 生成器classGenerator(nn.Module):def__init__(self,z_dim=64,img_dim=784):super().__init__()self.gen=nn.Sequential(nn.Linear(z_dim,256),nn.LeakyReLU(0.01),nn.Linear(256,img_dim),nn.Tanh()# 输出归一化到 [-1, 1])defforward(self,z):returnself.gen(z)# 2. 判别器classDiscriminator(nn.Module):def__init__(self,img_dim=784):super().__init__()self.disc=nn.Sequential(nn.Linear(img_dim,128),nn.LeakyReLU(0.01),nn.Linear(128,1),nn.Sigmoid()# 输出概率)defforward(self,img):returnself.disc(img)# 3. 训练循环伪代码# for epoch in epochs:# for real_imgs, _ in dataloader:## ### 训练判别器 #### noise = torch.randn(batch_size, z_dim)# fake_imgs = gen(noise)## real_score = disc(real_imgs)# fake_score = disc(fake_imgs.detach()) # 注意 detach,不传梯度给 G## d_loss = -torch.mean(torch.log(real_score) + torch.log(1 - fake_score))# opt_disc.zero_grad()# d_loss.backward()# opt_disc.step()## ### 训练生成器 #### # G 希望 D 判定 fake_imgs 为真 (score 接近 1)# fake_score = disc(fake_imgs)# g_loss = -torch.mean(torch.log(fake_score))## opt_gen.zero_grad()# g_loss.backward()# opt_gen.step()

7. 总结

  • GAN是生成领域的“摇滚明星”,效果惊艳但脾气暴躁(难训练)。
  • VAE是“数学教授”,理论优美但有时过于平滑(图像模糊)。
  • Flow是“精密仪器”,精确但昂贵。
  • 预告:虽然 GAN 统治了一段时间,但明天我们要介绍的扩散模型 (Diffusion Model)才是当今 AIGC 真正的王者。它结合了概率生成的稳定性(像 VAE)和生成质量的高保真度(超越 GAN)。

思考:为什么 GAN 的 Loss 很难指示训练进度?(因为它是两个网络的博弈,Loss 下降不代表生成质量变好,可能只是对手变弱了。)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 9:30:44

快速集成外部API:Kotaemon插件架构释放无限扩展可能

快速集成外部API:Kotaemon插件架构释放无限扩展可能 在企业智能化转型的浪潮中,越来越多公司开始尝试将大语言模型(LLM)引入客服、运营和内部协作系统。然而现实往往不如预期——尽管模型能流畅对话,却常常“答非所问”…

作者头像 李华
网站建设 2026/4/18 8:53:54

图像自回归生成(Auto-regressive image generation)实战学习(二)

相关项目下载链接 训练框架 在开始实现相应模块功能之前,首先熟悉训练框架train.py。 1. 导入与模型字典构建 import inspect import math from datetime import datetime from pathlib import Pathimport torch import ae, autoregressive, bsq # 自定义模型模…

作者头像 李华
网站建设 2026/4/18 6:30:12

AcFun视频下载终极指南:2025年最全离线保存解决方案

还在为无法离线观看A站精彩视频而烦恼吗?今天为大家带来一款功能强大的免费工具——AcFunDown,让你轻松实现视频批量下载、多格式支持、断点续传等实用功能,彻底告别网络限制!这款专为AcFun用户设计的下载工具采用直观的图形操作界…

作者头像 李华
网站建设 2026/4/18 3:46:16

5步快速掌握机器人仿真:从零搭建Go2四足机器人的终极指南

5步快速掌握机器人仿真:从零搭建Go2四足机器人的终极指南 【免费下载链接】go2_ros2_sdk Unofficial ROS2 SDK support for Unitree GO2 AIR/PRO/EDU 项目地址: https://gitcode.com/gh_mirrors/go/go2_ros2_sdk 想要在虚拟世界中安全地测试机器人算法吗&…

作者头像 李华
网站建设 2026/4/18 7:57:18

Foobar2000 逐字歌词终极配置:让每句歌词都精准同步

还在为传统歌词的粗糙同步而烦恼吗?想象一下,当你聆听心爱的歌曲时,每个字词都如同跳动在屏幕上的音符,与旋律完美契合——这就是 ESLyric-LyricsSource 为 Foobar2000 用户带来的沉浸式歌词体验。 【免费下载链接】ESLyric-Lyric…

作者头像 李华
网站建设 2026/4/18 5:41:50

G-Helper终极硬件优化完整指南:快速提升华硕设备性能

G-Helper终极硬件优化完整指南:快速提升华硕设备性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…

作者头像 李华