GAN模型初步总结

对之前学习的TFGAN库中的各种GAN做一个理论上的总结。

GAN

  论文地址是Generative Adversarial Nets,提出了GAN模型的基本结构和优化目标。基本结构包括两个网络结构——生成模型Generator和判别模型Discriminator。G网络尽可能生成满足正样本分布的假样本,而D网络则尽可能辨别出真假样本,在这个博弈过程中2种网络的性能都越来越好。GAN模型结构如下:

GAN.jpg
网络要优化的目标是
\min_G \max_D V(D,G)=E_{x \sim p_{data}(x)}[\log D(x)]+E_{z \sim p_z(z)}[\log(1-D(G(z)))]
具体一点就是对于G网络而言优化目标(代码)
L=\log(1-sigmoid(D(G(z)))) \approx -\log(sigmoid(D(G(z))))
对于D网络而言优化目标(代码)
L=-\log(sigmoid(D(x)))+\log(1-sigmoid(D(G(z)))) \approx -\log(sigmoid(D(x)))-\log(sigmoid(D(G(z))))
  初代GAN模型有个很大的缺陷在于训练很困难,一不小心loss就会变成NaN。G网络和D网络的训练必须要处于一个平衡过程,如果一方训练得太好,就会导致另外一方无法训练下去(loss太小,反向传播梯度过小导致训练无法进行下去)。后来提出的WGAN针对GAN模型的训练进行了理论上的分析,详细说明了初代GAN不好训练的原因。

DCGAN

  论文地址是UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS,该文章从实践的角度对初代GAN模型提出了一些改进:

  1. 用大步长的convolutional layer替代pooling layer
  2. 在D网络和G网络中均使用batch normalization
  3. 去掉全连接层
  4. G网络中的激活函数使用ReLU,最后一层使用Tanh
  5. D网络中的激活函数使用LeakyReLU
CGAN

  论文地址是Conditional Generative Adversarial Nets,提出了给D网络和G网络的输入加入辅助信息y,这样G网络的输出就是可控的,而不像初代GAN模型那样输出是随机的。CGAN的优化目标是\min_G \max_D V(D,G)=E_{x \sim p_{data}(x)}[\log D(x|y)]+E_{z \sim p_z(z)}[\log (1-D(G(z|y)))]CGAN对应的网络模型结构如下:

CGAN.png

InfoGAN

  论文地址是InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets,论文出发点和CGAN相似,InfoGAN也提出了加入新信息c(论文中称为latent code)来控制G网络的具体输出。不过在训练方式上InfoGAN和CGAN不一样,CGAN只是将条件信息直接拼接在输入噪音信息和真实信息上,而InfoGAN则是额外创建了一个网络用来保证G网络的输出和真实样本之间的互信息最大化。InfoGAN的优化目标是\min_G \max_D V(D,G)=E_{x \sim p_{data}(x)}[\log D(x)]+E_{z \sim p_z(z)}[\log(1-D(G(z)))]+\lambda I(c;G(z,c))其中,I(c;G(z,c))就是G网络输出和相应类别之间的互信息损失(代码)I(c;G(z,c))=H(c)-H(c|G(z,c))难以优化,因为我们不知道后验概率P(c|x)(x是G网络的输出,我们是没法知道训练过程中G网络输出与c之间的概率关系),所以InfoGAN采用变分推断的思想,用一个可调的已知分布去尽可能靠近未知的后验概率分布P(c|x)。简单的说就是保证新加入的模型的输出向量和c对应的向量的交叉熵尽可能小。

LSGAN

  论文地址是Least Squares Generative Adversarial Networks,LSGAN指出初代GAN模型的损失函数很可能导致梯度消失问题,所以LSGAN提出将GAN模型的损失函数由sigmoid cross entropy loss改为least square loss。LSGAN中D网络(代码)和G网络(代码)的优化目标是\begin{align} \min_D V_{LSGAN}(D) &= \frac{1}{2}E_{x \sim p_{data}(x)}[(D(x)-b)^2]+\frac{1}{2}E_{z \sim p_z(z)}[(D(G(z))-a)^2] \\ \min_G V_{LSGAN}(G) &= \frac{1}{2}E_{z \sim p_z(z)}[(D(G(z))-c)^2] \end{align}其中,a是G网络输出对应的label,b是真实样本对应的label,c是G网络希望D网络对虚假样本的判别值。比如我们可以按照原始GAN中那样将a设置为0,b设置为1,c设置为1。论文指出,least square loss有2个优势,一是对于那些被判定为真实样本,但是距离分界线较远的虚假样本依然会贡献损失,二是训练过程更加稳定,loss出现NaN的概率比较少。同时论文还指出当满足b-c=1,b-a=2时,LSGAN的优化目标其实就相当于皮尔逊卡方检验,从而在理论上证明了least square loss对于拉近p_gp_{data}的有效性。一般的LSGAN模型结构如下:

一般的LSGAN结构.png
(a)图是G网络,(b)图是D网络,LSGAN网络的设计遵循了DCGAN提出的各种改进。但是对于类别很多的任务,LSGAN结合CGAN设计了一个新的LSGAN结构,此时模型的优化目标是
\begin{align} \min_D V_{LSGAN}(D) &= \frac{1}{2}E_{x \sim p_{data}(x)}[(D(x|\Phi(y))-1)^2]+\frac{1}{2}E_{z \sim p_z(z)}[(D(G(z)|\Phi(y)))^2] \\ \min_G V_{LSGAN}(G) &= \frac{1}{2}E_{z \sim p_z(z)}[(D(G(z)|\Phi(y)))^2] \end{align}
对应的模型结构图如下:
带有condition的LSGAN.png

WGAN(WGAN-GP)

  WGAN论文地址是Wasserstein GAN,WGAN-GP论文地址是Improved Training of Wasserstein GANs。WGAN的主要工作是从理论上证明了传统GAN模型的loss给训练带来的弊端,并提出新的基于wasserstein distance(也称为推土机距离)的loss函数,而WGAN-GP则是对WGAN提出的一点改进再次进行了改进。具体如下:

  1. WGAN提出了4点改进:
    1. 判别器最后一层去掉sigmoid
    2. 生成器和判别器的loss不取log
    3. 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
    4. 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
  2. WGAN-GP则是对上面的第3点提出改进,提出用梯度惩罚来代替梯度裁剪

WAGN中D网络(代码)和G网络(代码)的优化目标是\begin{align} \min_D V_{WGAN}(D) &= -E_{x \sim p_{data}(x)}[D(x)]+E_{z \sim p_z(z)}[D(G(z))] \\ \min_G V_{WGAN}(G) &= -E_{z \sim p_z(z)}[D(G(z))] \\ \end{align}而WGAN-GP的优化目标是\begin{align} \min_D V_{WGAN}(D) &= -E_{x \sim p_{data}(x)}[D(x)]+E_{z \sim p_z(z)}[D(G(z))]+\lambda E_{x \sim p_{\hat{x}}}[||\nabla_xD(x)||_p-1]^2 \\ \min_G V_{WGAN}(G) &= -E_{z \sim p_z(z)}[D(G(z))] \end{align}其中Gradient penalty的实现可看代码。如果想更加详细的了解WGAN和WGAN-GP,可以看下面这两篇博客:

  1. 令人拍案叫绝的Wasserstein GAN
  2. Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法
ACGAN

  论文地址是Conditional Image Synthesis with Auxiliary Classifier GANs,从模型结构上看,ACGAN做的工作就是将CGAN和InfoGAN结合起来。ACGAN中G网络的输入是将噪音和label拼接起来(CGAN),有X_{fake}=G(c,z),同时设计了一个辅助分类网络对真假样本进行分类(InfoGAN),可见ACGAN是将辅助信息使用到了极致。ACGAN模型的优化目标如下:\begin{align} L_S &= E[\log P(S=real|X_{real})]+E[\log P(S=fake|X_{fake})] \\ L_C &= E[\log P(C=c|X_{real})]+E[\log P(C=c|X_{fake})] \end{align}其中,通过最大化L_C+L_S来训练D网络,最大化L_C-L_S来训练G网络。ACGAN的实现可看代码。ACGAN并没有多少理论上的创新性改进,但是它在ImageNet上做了大量的实验,如下:

  1. 合成不同分辨率的图像并计算其可判别性,发现当合成图像分辨率越高时质量也越高(将合成图像传入到Inception网络中,高分辨率合成图像其对应的准确率越高,从而反映了图片质量越高)。
  2. 使用MS-SSIM来衡量生成图像的多样性。结构相似性(structure similarity)原本是衡量两张图片相似性的指标,这里作者将其用来衡量生成图像的多样性,MS-SSIM值越低说明生成的图像多样性越高。
  3. 对合成图片的Inception模型输出准确性和相应的MS-SSIM值进行了分析,发现如果GAN模型输出的合成图片多样性越高,那么这些图片的Inception模型的准确率也要高一些。
  4. 探索了模型是否过拟合(是学会了相关图片的分布还是只是“记住了”训练图片)。最简单的方法就是从训练集中找到“距离”合成图片最近的真实图片,发现这些真实图片并不能代表合成图片,说明了模型不是只是“记住了”真实图片的分布。作者还提出了其他验证方法,一种是对模型的潜在空间进行线性插值,看是否会出现discrete transition(个人理解就是插值后的图片很不连贯),另外一种就是保持输入的额外信息z不变,看合成图片对应的Inception模型输出的类别(大部分类别都不一样说明模型没有过拟合)。
  5. 探索了类别数量对模型性能的影响,如果训练集中真实图片所属类别越多,那么最后模型的MS-SSIM值也相对越高,也就是合成图片更加单调,但是论文中指出增加模型参数可以改善这个影响。(个人意见)我认为这说明了要想合成更多不同种类且多样化的图片,还是需要更大的模型才行。
CycleGAN

  论文地址是Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks,CycleGAN在结构上做了很大的改进,CycleGAN是将两个普通GAN模型结合起来进行训练,两个GAN模型的G网络输入都是真实图片(不再是噪音)。CycleGAN所做的工作就是对两类真实图片进行图像风格迁移,将G网络输入的真实图片的风格转换成另外一种图片的风格。此时模型优化目标是L(G,F,D_X,D_Y) = L_{GAN1}(G,D_Y,X,Y)+L_{GAN2}(F,D_X,Y,X)+\lambda L_{cyc}(G,F)其中,XY是两类不同风格的图片,模型GAN1是将输入图片X的风格转换成图片Y的风格,模型GAN2是将输入图片Y转换成图片X的风格。上式中一、二项都是GAN模型的损失,而第三项是论文的关键——循环一致性损失。首先看下该损失对应的公式:L_{cyc}(G,F)=E_{x \sim p_{data}(x)}[||F(G(x))-x||_1]+E_{y \sim p_{data}(y)}[||G(F(y))-y||_1]单看第一项,数据x输入到GAN1的生成网络中,并将输出结果输入到GAN2的生成网络中,最后计算输出结果与原始数据x的距离。第二项做的工作也是一样的。对这一项进行优化就是要保证图片经过两次转换后发生的变化尽可能小,其实就是为了保证生成网络能更好的拟合风格X到风格Y之间和风格Y到风格X之间的映射关系,防止GAN模型的合成图片太单调(mode collapse)。Cycle loss的实现可见代码 。CycleGAN的模型表示如下:

CycleGAN模型结构.png

StarGAN

  论文地址是StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation,从论文名就可以看出,StarGAN的任务是多领域的图到图的翻译(multi-domain image-to-image translation),改进是将多个GAN模型统一为一个(unified generative adversarial networks)。具体改进如下图:

传统cross-domain models和StarGAN的对比.png
(a)图中,假设base model选择是CycleGAN,那么共需要
4*3/2=6
个base model,但是(b)图中的StarGAN只需要一个就可以完成不同领域的图片的转换。StarGAN模型结构图如下:
StarGAN模型结构训练图.png
我的理解:StarGAN模型就是带有condition的CycleGAN,模型中G网络的输入不再是
x
,而是带有condition的
(x,c)
。模型中D网络输出向量组成和目标检测one-stage模型的输出组成很像,都有置信度和类别信息,不同点在于目标检测中置信度用于判断box中是否含有object,而这里置信度判断输入图片是real还是fake。同时为了保证图到图的转换过程中保留了输入图片的content,StarGAN的loss中也加入了CycleGAN的cycle loss。StarGAN模型的优化目标如下:
\begin{align} L_D &=-L_{adv}+\lambda_{cls}L_{cls}^r \\ L_G &=L_{adv}+\lambda_{cls} L_{cls}^f+\lambda_{rec}L_{rec} \end{align}
其中有,
\begin{align} L_{adv} &= E_x[\log D_{src}(x)]+E_{x,c}[\log (1-D_{src}(G(x,c)))] \\ L_{cls}^r &= E_{x,c^{'}}[-\log D_{cls}(c^{'}|x)] \\ L_{cls}^f &= E_{x,c}[-\log D_{cls}(c|G(x,c))] \\ L_{rec} &= E_{x,c,c^{'}}[||x-G(G(x,c),c^{'})||_1] \end{align}
但是在实际实现中StarGAN将原始GAN的loss改为WGAN-GP的loss,也就是:
L_{adv} = E_x[D_{src}(x)]-E_{x,c}[D_{src}(G(x,c))]-\lambda_{gp}E_{\hat{x}}[(||\nabla_{\hat{x}}D_{src}(\hat{x})||_2-1)^2]
不过有一点我有点疑惑,那就是StarGAN中是怎么将c和输入图片拼接起来的?CGAN中输入的是一维噪音向量,所以科技直接将
c
拼接在噪音向量后面,但是StarGAN的输入是图片,那么如何将
c
拼接到3维图片信息中呢?待解决。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容