GAN 开山之作论文

https://blog.csdn.net/weixin_26735933/article/details/108925232

https://zhuanlan.zhihu.com/p/378521383

GAN 架构包含两个子模式,分别称为 Generator (G) 和 Discriminator (D) ,它们相互竞争,目的是通过训练过程达到 Nash 平衡。 生成器学习将潜在空间 (例如,噪声〜N (0,1) ) 映射到在其上分发给定数据样本的数据空间,鉴别器评估生成器完成的映射。 生成器的主要作用是生成模仿训练数据集的合成数据,以使鉴别器无法将合成数据与真实数据区分开。

生成器的输入是随机噪声矢量_x'_ (通常是均匀或正态分布)。 噪声向量通过 Generator 映射到新的数据空间,以获得伪样本_G (x')_ ,它是多维向量。 鉴别器是一个二进制分类器,它吸收了生成的数据集和训练的数据集,并学习将它们分类为假的和真实的。** 当判别器无法确定数据来自真实数据集还是生成器时,便会达到 GAN 模型的最佳状态 **


# 可解释的生成对抗网络:InfoGAN

https://zhuanlan.zhihu.com/p/55945164

生成对抗网络 (GAN) 背后的数学理论 提到,generator 和 discriminator 的对抗学习,它的目标其实是得到一个与 real data 分布一致的 fake data 分布。

但是由于 generator 的输入是一个连续的噪声信号,并且没有任何约束,导致 GAN 将 z 的具体维度与 output 的语义特征对应起来,可解释性很差。

它的原理很简单,在 info GAN 里面,把输入向量 z 分成两部分,c 和 z'。c 可以理解为可解释的隐变量,而 z 可以理解为不可压缩的噪声。希望通过约束 c 与 output 的关系,使得隐变量 c 的维度对应 output 的语义特征,以手写数字为例,比如笔画粗细,倾斜度等。

为了引入 c,作者通过互信息的方式来对 c 进行约束,也可以理解成自编码的过程。具体的操作是,generator 的 output,经过一个分类器,看是否能够得到 c。其实可以看成一个 anto-encoder 的反过程。其余的 discriminator 与常规的 GAN 是一样的。

img

图片来自李宏毅老师生成对抗网络视频 https://www.youtube.com/watch?v=DMA4MrNieWo&list=PLJV_el3uVTsMq6JEFPW35BCiOQTsoqwNw&index=5

在实际过程中,classifier 和 discriminator 会共享参数,只有最后一层是不一样的,classifier 输出的是一个 vector, discriminator 输出的是一个标量。


# 第一章:

生成器的优点在于生成很容易,但只学习了真实样本的表象,只学到了 component 和 component 像素和像素之间的相似度,而没有学到图像和图像的关联。可以用生成器取代下面方程,产生负样本,产生 x~

以往是通过高斯混合模型定义 PG 然后用最大似然估计算出最优分布 PG 下的参数 sita,但这个模型可能更复杂,不用高斯…… 又难以计算。而现在用生成器找到一个分布,也就是用生成器可以生成一个很复杂的分布 PG。生成器 G 意图让生成的样本 PG 和真实样本 Pdata 之间的散度越小越好

PG 可以通过生成器的向量中生成,一张张图片,Pdata 可以通过真实数据集采样得到 那么如何通过生成器计算 PG 和 Pdata 的散度呢

判别器优点在于能够学到整个图像的关联,但很难生成图像,需要解 x~=arg max D (x)方程

1. 如何训练判别器 D 呢,首先固定 G,寻找让 max V (G,D) 的 D,。对每一个 x,都可以找一个不同的 D 让式子最大

<img src="生成对抗网络 / GAN3.png" alt="GAN3" style="zoom:50%;" />

<img src="生成对抗网络 / GAN4.png" alt="GAN4" style="zoom:50%;" />

第一步:固定 G,寻找 D,让 V 函数 max
第二步:在寻找到的 D 基础上固定不动,寻找让 maxV 最小的 G

# 第四章:基础理论

首先给定 G,找到 D 并求出 V 对 sitaG 的梯度,用于更新 sitaG 找一个 D 从而 maxV 的过程就是找到 Pdata 和 PG 之间的 JS 散度 V (G1,D1*) 的过程

关键是:当更新 G0 后函数 V 可能会变化,而此时的 D*(使 V 最大的横坐标位置)可能就变了,再用之前的 D * 训练就不靠谱。因此只能每次更新 G 一点点,假设每次更新后函数变化很小和之前是类似的,因此不太可能出现右图情况。 因此生成器 G 不能训练太多,通常只更新一次

期望 E 计算:实际上只能通过离散叠加求均值的方法来计算 V,实际上是从 Pdata 和 PG 中采样出一堆 x 来代替期望 E,训练一个二分类分类器→最小化交叉熵 = maxV

训练判别器的目的是:为了评估 JS 散度 从 Pdata 中采用出一堆 x 作为正样本,从 PG 中采样出一堆 x 作为负样本

每轮训练迭代过程:

1. 根据 Pdata(x)中采样 m 个 x,从先验分布中采样 m 个噪声向量 z→输入生成器→得到 m 个生成样本,更新判别器参数 sitad 从而→maxV

训练判别器目的:为了估计 JS 散度才训练判别器,而用于估计 JS 散度的最优判别器的目标函数 V 是最大的,为了使其最大必定需要多轮重复迭代训练→直到收敛→可以更新 k 次

** 训练生成器目的:** 为了最小化 JS 散度,而由于生成器每次训练会导致目标函数变化,因此每次只训练更新一次


# fGAN 框架

用不同 f - 散度量生成样本和真实样本的差距 p (x) 和 q(x)分别代表从 x 从 p 分布和从 q 分布采样出来的几率 p 和 q 之间的散度:


# Info GAN,VAE GAN, BiGAN

编码器和解码器输入输出不相连,判别器输入 z 和图像,判断是来自编码器还是解码器