生成对抗网络(GAN)

1️⃣ gan介绍

GAN包括一个生成器和一个判别器

生成器:

  • 输入是n维度的向量
  • 输出是图片像素大小的图片
    判别器:
  • 输入是图片
  • 输出是图片的真伪标签

2️⃣ GAN原理分析

GAN的大致训练过程为:

先训练判别器(固定生成器)

  • 从真实数据集中采样,x∼pdata(x)x \sim p_{data}(x)x∼pdata(x)
  • 从噪声分布采样,z∼pz(z)z \sim p_z(z)z∼pz(z)
  • 生成假样本,xg=G(z)x_g = G(z)xg=G(z)
  • 用真实和生成样本训练判别器,损失函数在下面介绍

再训练生成器(固定判别器)

  • 采样噪声,z∼pz(z)z \sim p_z(z)z∼pz(z)
  • 生成样本,xg=G(z)x_g = G(z)xg=G(z)
  • 通过判别器计算,D(G(z))D(G(z))D(G(z))
  • 使用损失函函数更新生成器参数

接下来看一下具体的损失函数可简化为:
min⁡Gmax⁡DV(D,G)=Ex∼pdata(x)log⁡D(x)+Ez∼pz(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)=Ex∼pdata(x)logD(x)+Ez∼pz(z)log(1−D(G(z)))

其中:

  • pdata(x)p_{data}(x)pdata(x) 是真实数据的分布,x 是真实样本;
  • pz(z)p_z(z)pz(z) 是随机噪声(如高斯分布)的分布,z 是噪声输入,G(z)G(z)G(z) 是生成器输出的 "假样本";
  • D(x)D(x)D(x) 表示判别器判定 "真实样本x为真" 的概率,D(G(z))D(G(z))D(G(z))是判别器判定 "假样本G(z)为真" 的概率

原论文在参数的更新过程,是对D更新k次后,才对G更新1次。上式中的minmax可理解为当更新D时,需要最大化上式,而当更新G时,需要最小化上式,详细解释如下:

(1)更新判别器D

在对判别模型D的参数进行更新时,固定G的参数。目标是能够区分出来真实图片和生成的图片。对于真实数据,希望D(x)D(x)D(x)接近1;对假数据,希望D(G(z))D(G(z))D(G(z))接近0。为了实现这一目标,损失函数需要最大化上式:

  • 第一部分:Ex∼pdata(x)log⁡D(x)\mathbb{E}{x \sim p{\text{data}}(x)}\\log D(x)Ex∼pdata(x)logD(x)

    最大化第一部分就是让log⁡D(x)\log D(x)logD(x)尽可能的大,即希望判别器的输出结果D(x)D(x)D(x) 接近 1,符合判别器的目标

  • 第二部分:Ez∼pz(z)log⁡(1−D(G(z)))\mathbb{E}_{z \sim p_z(z)}\\log(1 - D(G(z)))Ez∼pz(z)log(1−D(G(z)))

    最大化第二部分,就是让log⁡(1−D(G(z)))\log(1 - D(G(z)))log(1−D(G(z)))尽可能的大,即希望1−D(G(z))1 - D(G(z))1−D(G(z))尽可能的大,即希望D(G(z))D(G(z))D(G(z))尽可能的小,符合判别器的目标。

(2)更新生成器G

此时 D 已优化为 "当前最优判别器",G 的目标是 "生成更逼真的假数据欺骗 D",D(G(z))D(G(z))D(G(z))接近 1,对应 "最小化 V(D,G)V(D,G)V(D,G)" ------ 但需注意:
V(D,G)V(D,G)V(D,G) 中的第一部分 Ex∼pdata(x)log⁡D(x)\mathbb{E}{x \sim p{\text{data}}(x)}\\log D(x)Ex∼pdata(x)logD(x)与G无关(G 不影响真实数据),优化时可视为常数,因此 G 只需最小化第二部分的 "负项":

  • 原目标中 G 需最小化的部分等价于:
    min⁡GEz∼pz(z)log⁡(1−D(G(z)))\min_G \mathbb{E}_{z \sim p_z(z)}\\log(1 - D(G(z)))minGEz∼pz(z)log(1−D(G(z)))

    最小化这一部分, 即让log⁡(1−D(G(z)))\log(1 - D(G(z)))log(1−D(G(z)))越小越好,即1−D(G(z))1 - D(G(z))1−D(G(z))接近 0,即D(G(z))D(G(z))D(G(z))接近 1(让 D 误以为假数据是真实的),符合生成器的目标

(3)minmax 的最终收敛目标

当 G 和 D 经过多轮对抗训练后,会达到纳什均衡(Nash Equilibrium)------ 此时:

  • D 无法再提升判别能力:对真实数据和 G 生成的假数据,D 的输出均为 0.50.50.5 (完全无法区分),即 D(x)=D(G(z))=0.5D(x) = D(G(z)) = 0.5D(x)=D(G(z))=0.5。
  • G 无法再提升生成能力:生成数据的分布 pg(x)p_g(x)pg(x) 完全匹配真实数据的分布 pdata(x)p_{\text{data}}(x)pdata(x),即 pg(x)=pdata(x)p_g(x) = p_{\text{data}}(x)pg(x)=pdata(x)。

此时目标函数 V(D,G)V(D,G)V(D,G) 达到 "G 最小化、D 最大化" 的稳定状态,minmax 优化完成 ------ GAN 的核心目标(获得能生成逼真数据的 G)也就实现了


相关推荐
HyperAI超神经4 小时前
扰动实验+迁移学习,MIT团队推出IRIS,用「指纹」重建单细胞信号传导历史
人工智能·深度学习·机器学习·迁移学习
Rocky Ding*4 小时前
一文读懂MiniCPM5-2B:端侧 Agent 的突破,不是“小模型打赢大模型”,而是训练系统开始开源
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·minicpm5-2b
葫三生5 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
2601_962300816 小时前
机器学习贴士:使用Python编写MapReduce
hadoop·python·机器学习·mapreduce·数据处理
liliangcsdn6 小时前
因子分析指标概念与示例
算法·机器学习
陈年老古董7 小时前
PyTorch食物图像分类实战:从数据集制作到CNN模型训练全流程详解
pytorch·深度学习·学习·机器学习·分类·cnn
早睡早起身体好1238 小时前
用 XGrammar 约束大模型工具调用:解决参数为空的问题
android·人工智能·神经网络·机器学习·自然语言处理·vllm
王红臣同学8 小时前
Microduck 强化学习源码拆解:一只 800g 的机器鸭怎么学会走路
人工智能·机器学习·ai
nagualky1238 小时前
AI Agent 别只返回“已完成”:用五字段验收契约定义任务终点
人工智能·机器学习·软件工程
2601_962301018 小时前
深入探索 TensorFlow 2.0:Python 中的强大深度学习框架
深度学习·分布式训练·keras·tensorflow2.0·eagerexecution