当前位置: 首页 > news >正文

李宏毅深度学习教程 第8-9章 生成模型+扩散模型

【2025版】12 生成式对抗网络GAN 一 – 基本概念介紹_哔哩哔哩_bilibili

目录

1. GAN生成式对抗网络

2. GAN的训练 散度差异

3.WGAN

4.训练GAN

5. 如何客观评估GAN

6. 条件型生成(按照要求)

7. Cycle GAN(互转配对)

8. diffusion model 扩散模型


1. GAN生成式对抗网络

生成式问题:模型的创造力  没有标准答案 就像大家头脑风暴各自围绕话题说一说,

比如问模型想吃一个水果  机器人会回答 苹果、梨、草莓等等,

又比如让模型根据描述 生成更多的文字/图片/视频。

在监督学习下会存在问题:比如一个预测下一帧的游戏图像 给网络过去几帧的游戏画面,

但因为训练数据对同一个转角 有向左走、向右走这样不同且矛盾的数据,所以训练的结果网络会学会“两面讨好”,输出“又要接近向左走 又要接近向右转”。

我可以给一个二项分布 让机器可能学到 0则左转 1则右转,这样就不会冲突。

总的操作为:输入x 并在一个随机分布(通常用正态分布)获得采样值z 一起送到网络中,然后产生最后的输出y,这样就可以实现输出结果的分布是非固定,不冲突的。

2. GAN的训练 散度差异

把原始样本和生成器生成的样本混在一起,辨别器discriminator需要从中挑出生成器生成的样本。(就像图灵测试 一方尝试装得像 一方尽量区分) 进行“骗”与“找”的对抗,二者一起越来越强。

原始数据的分布p 和生成数据分布q,生成器要让这两个分布尽可能接近,判别器做二分类操作。 

训练过程:固定生成器G 训练辨别器D ; 再固定辨别器D 训练生成器G;二者交替。

需要设置 生成数据q(x) 参考数据p(x) 的差异度量divergence,

相当于最小最大博弈过程,可用Conjugate共轭对偶的知识 设置差异函数。 经典差异函数有KL JS.

3.WGAN

JS散度的问题:原始 GAN 中,当生成分布与真实分布几乎没有重叠时,JS 散度为常数 log 2。这意味着基于 JS 散度构建的判别器损失对于生成器参数梯度几乎为零,导致生成器难以更新参数。

如果要构建一张人物头像,对于一组随机像素,几乎不可能恰好就是一张人物头像。

所以人物头像的分布,在高维的空间中其实是非常狭窄的,就算是这两个分布实际上很相似,也很难有任何的重叠的部分。

WGAN 使用 Wasserstein 距离(推土机距离),可以衡量两个分布之间的真实 “距离”,即使两个分布没有重叠,仍然能够提供有意义的梯度信息,使得生成器能够在训练初期也能稳定地更新参数,避免了梯度消失问题,从而让训练过程更加稳定和可控

Wasserstein 距离:所有边缘分布为Pr Pg 的最小联合分布距离。

对偶问题为

这个条件限制(可以使用梯度惩罚/谱归一化的操作) 保证训练的平滑收敛

   

本来两个分布 p和 q 距离非常遥远,要它一步从开始就直接跳到结尾,这是非常困难的。但是如果用 Wasserstein 距离,可以让 它们慢慢挪近到一起,最后就可以让它们对齐在一起。所以在训练时它可以让我们的生成器一步一步地变好,而不是一下子就变好。

4.训练GAN

训练难点是 需要生成器和判别器同时训练 互相一步一步一起变强

1. 假设一方突然太强 另一方就会很难进行判别/生成操作 导致训练停止

2. 文本生成时,生成器输出的词是离散的 微小参数变化可能不改变最终输出词 导致梯度无法回传

技巧:1. 生成器与判别器交替训练几步 保持二者势均力敌

2. 标签平滑:判别器对真实样本标签 标1.0会使得判别过于自信 可以缩减改标为0.9

3. 使用 VAE(变分自编码器) Flow-based Generative Model 等其它算法

5. 如何客观评估GAN

主观上:人眼看这张图是否合乎常理 像现实中真的物品        但需要找客观的评估指标

一个想法:训练一个图像的分类系统 会输出生成的这张图片是某一类别的概率分布

如果某样概率特别特别大 那说明就是这个类别;否则四不像 说明生成的质量比较差

比如一个专门生成“辛普森一家”的生成器 生产了下面两张图片 哪张图生成的更符合要求呢?

丢到分类系统里 这个“霸子”概率特别高 说明就是“霸子”;下面这张几个都不太属于,则不符合要求

但会出现模式坍塌的问题 多样性降低 生成数据的分布只是原来真实数据分布的一小部分

比如说我给了它一堆各种品类苹果的样本 模式坍塌值生成器只会拼命生成某一类苹果

但判别器会觉得它生成的图片都没问题 但检测不出多样性太少

(这会导致看几张它生成的图片不觉得有问题,但看多了很多雷同的 就知道生成器有问题)

度量多样性:看之前分类系统 概率分布的平均分布,如果平均分布很集中说明多样性比较差;

如果平均分布比较分散 说明有较好的多样性。

评估的难点:1.同时考虑生成图片的质量和多样性     2.定量评估一个 对于人来说主观的东西

FID(Frechet Inception Distance)使用预训练的Inception-v3网络提取生成图像和真实图像的高维特征,然后计算两个分布之间的Frechet距离(即均值和协方差的差异)。

距离越小,生成数据越接近真实数据的多样性

6. 条件型生成(按照要求)

生成器根据条件x 与随机变量z 生成y

提出文字要求(条件) 可以用 Transformer 把文字转成向量,再喂给生成器。

普通判别器只看生成的图片真不真实,条件型判别器则要 "双查",还要看图片和条件对不对得上(比如 "红眼睛" 的条件,不能生成蓝眼睛)。

训练时,可以故意搞些 "错题"(比如用 "黑头发" 的文字配 "黄头发" 的图)让判别器练手,确保它能精准判断 "内容是否符合条件"。

除了文字条件外,条件型生成还能做 "图片变图片"(Pix2pix),原理和文字变图一样,只是 "条件 x" 从文字换成了图片。

例如:给张素描,生成实景;给张白天的街景,生成夜景;给张房屋设计图,生成 3D 效果图。

7. Cycle GAN(互转配对)

如果没有成对的 pariwise训练数据(比如有一堆真人照片和动漫头像,却没有 "同一个人" 的真人 - 动漫对照图),怎么让 AI 把真人转成动漫风格?

Cycle GAN  ——在没有 "配对数据" 的情况下,学会两种风格的转换。

核心思路:用 "循环一致性" 逼 AI 学规律 就像学翻译时,把中文译成英文,再把英文译回中文,两次翻译后要和原文差不多 ——Cycle GAN 用了同样的 trick: 训练两个生成器:G 负责把 "真人域" 转成 "动漫域",F 负责把 "动漫域" 转回 "真人域"。

强制要求:一张真人照片经 G 转成动漫后,再经 F 转回真人,结果必须和原图几乎一样。

这样一来,G 不敢乱生成(否则 F 转不回去),只能学到 "保留原图特征 + 转换风格" 的规律(比如把真人的五官保留,换成动漫的线条和色彩)。

Cycle GAN 还能双向工作:既能把真人转动漫,也能把动漫转真人。每个方向都配一个判别器,确保转换后的图片符合目标域的风格(比如动漫转真人时,结果要像真实照片)。

文字风格、语音文字互转、缩句与扩充也同理可用Cycle GAN操作。

8. diffusion model 扩散模型

去噪扩散概率模型(Denoising Diffusion Probabilistic Model,DDPM)

“塑像就在石头里,我只是把不需要的部分去掉”——米开朗基罗

我要生成一张猫的图像 就是从一张随机像素点开始,重复用噪声预测器去噪 越来越接近一只猫。

Q:为啥不直接端到端 从噪声图直接到结果

A:使用一个噪声预测器 比端到端产生一个带噪声的猫的图片 简单的多

训练数据:第n步去噪应该去成什么样子呢?

用一只猫的图像 一步一步加噪声;第n步去噪的训练参考 就是这个第n次加噪("前向扩散")

就像老师故意把作业弄脏,让学生练习 "擦掉脏东西"—— 练熟了,模型自然会在生成时反向操作,从纯噪声里 "擦掉" 所有噪声

想实现“文生图” 只需给去噪模块加个 "文字理解" 功能

目标:噪声预测器会结合文字,判断该保留哪些特征(比如 "帽子" 的形状)、去掉哪些噪声

训练时,用 "图片 + 对应文字" 的数据:先给图片加噪声,再让模型结合文字预测噪声

http://www.lryc.cn/news/608804.html

相关文章:

  • 【Unity3D实例-功能-镜头】俯视角
  • JVM-垃圾回收器与内存分配策略详解
  • [创业之路-530]:创业公司五维架构设计:借鉴国家治理智慧,打造敏捷型组织生态
  • 智变时代:AI 如何重构工作边界与行业生态?
  • 【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单
  • 计算机网络:如何在实际网络中进行子网划分
  • 从零开始学Express,理解服务器,路由于中间件
  • C#模式匹配用法与总结
  • Supergateway教程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)
  • 玩转 Playwright 有头与无头模式:消除差异,提升爬虫稳定性
  • LLM - 智能体工作流设计模式
  • 小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
  • 【设计模式】5.代理模式
  • [LeetCode优选算法专题一双指针——有效三角形的个数]
  • Python 程序设计讲义(60):Python 的函数——递归函数
  • 从“配置地狱”到“云端乐园”——Nacos 如何成为分布式微服务配置中心的“定海神针”
  • 【MySQL】MySQL中锁有哪些?
  • ethtool,lspci,iperf工具常用命令总结
  • 26李林880高数第一章 函数、极限、连续
  • Shell脚本-变量的定义规则
  • 西门子PLC基础指令4:输出指令、立即输出指令
  • JavaScript 性能优化实战指南:从运行时到用户体验的全面提升​
  • adb 与pad 交互方法
  • MyBatis动态SQL精要:从<if>到<foreach>的灵活拼接之道
  • Go语言声明变量
  • 怎么修改论文格式呢?提供一份论文格式模板
  • 【Bluedroid】btif_av_handle_event 流程源码解析
  • 面向智能体的上下文工程:策略、实现与 LangGraph 实践
  • LangChain4J入门:接入大模型