【知识星球】有三AI 10月新主题,千奇百怪GAN上线!
欢迎大家来到《知识星球》专栏,这里是网络结构1000变小专题,GAN是当前深度学习领域里最火热的技术之一,从这个十月开始,我们星球就开始更新GAN相关的内容了,理论和实践结合噢,至少100期以上!先上三期抛砖引玉吧!
作者&编辑 | 言有三
1 DCGAN
DCGAN第一个全卷积GAN,麻雀虽小,五脏俱全,最适合新人实践。
有三AI知识星球-网络结构1000变
DCGAN
DCGAN是第一个使用全卷积网络做数据生成的GAN,生成器和判别器都采用了4层的网络结构。
作者/编辑 言有三
生成器网络结构如上图所示,输入为1×100的向量,然后经过一个全连接层学习,reshape为4×4×1024的张量,再经过4个上采样的反卷积网络,生成64×64的图,各层的配置如下:
判别器输入64×64大小的图,经过4次卷积,分辨率降低为4×4的大小,每一个卷积层的配置如下:
判别器和分类器的损失函数都采用了sigmoid_cross_entropy_with_logits,即sigmoid分类损失。
下面我们采用开源项目进行实践,GitHub地址如下:https://github.com/carpedm20/DCGAN-tensorflow/。
由于MNIST任务作者已经做过,我们来完成一个新的任务,生成嘴部表情,样本如下:
下图分别是判别器和生成器损失图:
由于生成对抗网络的判别器和生成器是交替训练相互对抗,所以它们各自的损失曲线不可能像通常的图像任务一样一直下降直到很低的水平,而是有一个先下降再上升的过程。
对于判别器来说,刚开始没有学习,因此性能很差,随着训练进行,判别器的损失降低。但是因为生成器的性能在不断提升,所以一段时间之后,判别器的损失可能又会增加,不过在这个实验中不明显。
对于生成器来说,刚开始没有学习,性能很差,随着训练进行,性能越来越好,在本实验中,生成器损失下降到一定程度后又增加了,说明继续迭代无法再改善性能。
总的来说,两者相互对抗,直到达到一个较好的平衡,但是光从损失曲线本身,我们仍然难以分辨出模型的性能好坏,因此还要看真正生成的样本。
从左到右分别是第2,10,50,100个epoch的结果。从上图结果来看,随着训练的进行,逐渐生成了许多有意义且非常逼真的样本。不过最终生成的图像仍然有一部分效果很差,这是因为DCGAN本身模型性能所限,后续可以使用更好的模型进行改进。
DCGAN的原始论文中总结了很多的技巧,但是随着技术的发展,其中的一些技巧不再必要或者通用,因此这里我们先不总结,以后再回过头来一起看。
DCGAN模型非常浅,原理简单,生成分辨率低,所以简单的任务仍然不能完美地完成,后面会有更多模型从各个方向来进行改进。
参考文献
[1] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.
2 CGAN
条件GAN的诞生,才是GAN真正大展拳脚的开始,不管往后的变种多么牛,万变不离其宗都是CGAN。
有三AI知识星球-网络结构1000变
CGAN
标准的GAN如DCGAN等并不能控制生成的图片的效果,条件GAN(CGAN)则使用了条件控制变量作为输入,是几乎后续所有性能强大的GAN的基础。
作者/编辑 言有三
网络结构如上,其中的y就是条件变量。对于生成器来说,输入包括z和y,两者会进行拼接后作为输入。对于判别器来说,输入包括了x和y,两者会进行拼接后作为输入,当然为了和z以及x进行拼接,y需要做一些维度变换,即reshape操作。
相应的,损失函数也略有不同。
可以看到其实就是加入了条件,网络结构本身和损失函数的表达式本身没有变化。
因此,我们同样使用之前的DCGAN结构和开源项目,https://github.com/carpedm20/DCGAN-tensorflow/。
对MNIST数据集进行实验,下图每一行表示一类。
可以看到这时候可以精确地对需要生成的类别进行控制,这就是CGAN的初体验,条件GAN的出现使得基于GAN的图像编辑,图像风格化等任务得到了长足的发展,成为了非常流行的一类GAN的模型结构。
参考文献
[1] Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.
3 LAPGAN
多尺度技术是计算机视觉里的核心技术,GAN也不会例外,LAPGAN作为鼻祖,自然是最适合拿来学习的。
有三AI知识星球-网络结构1000变
LAPGAN
DCGAN为代表的网络生成的图片分辨率太低,收敛过程容易不稳定,LAPGAN是一个级连的结构,可以从粗到精生成更高分辨率的图像。
作者/编辑 言有三
DCGAN生成的图片分辨率太低,不超过100×100,难以一次性学习到生成高分辨率的样本,收敛过程容易不稳定。
基于此问题,金字塔GAN结构被提出。它参考图像领域里面的金字塔结构由粗到精一步一步生成图像,并添加残差进行学习。
从上图可以看到从低分辨率z3开始,逐级提升,最终生成I0,这是一个金字塔形状的结构。
我们仔细看其中一个block的原理图如下:
I0是64*64图,I1是I0下采样的32*32图,l0是I1上采样的结果,同时被用于产生真实与仿真的样本。判别器D0的输入包括两个残差和I0,两个残差分别是真实图与l0以及生成图与l0的残差。因此生成器用于生成残差,判别器用于判别残差。
这样的结构有几个好处:
(1) 针对残差的逼近和学习相对容易,减少了每一次 GAN 需要学习的内容,也就从而增大了 GAN 的学习能力。
(2) 逐级独立训练提高了网络简单记忆输入样本的难度,许多高性能的深度网络都面临着这样的问题。
使用开源项目,https://github.com/kozistr/Awesome-GANs/tree/master/LAPGAN,结果如下,包括3个判别器和生成器的损失曲线以及最终的生成结果。
原始论文中的LAPGAN虽然仍然只能生成分辨率较小的图,但是这样的级连结构对后面的Progressive GAN等结构有很大的借鉴意义。
参考文献
[1] Denton E L, Chintala S, Fergus R. Deep generative image models using a laplacian pyramid of adversarial networks[C]//Advances in neural information processing systems. 2015: 1486-1494.
4 关于有三AI知识星球
有三AI知识星球是我们继公众号之后重点打造的原创知识学习社区,有需要的同学可以阅读下文了解生态。