背景:在监督学习中,训练集需要大量的人工标注数据,并且需要人工判断生成结构好坏,这个过程是高成本且低效率的;GAN能自动完成这个过程,效率高成本低。
定义:生成对抗网络(GAN,generative adversarial network),是一种常用于学习类别特征的神经网络结构;主要有两部分组成,分别是生成网络、判别网络。
生成对抗网络GAN让机器能作诗、作曲、作画。
GAN 的应用十分广泛,它的应用包括图像合成、图像编辑、风格迁移、图像超分辨率以及图像转换,数据增强等。
图像风格迁移是将图像A的风格转换到图像B中去,得到新的图像,取个名字为new B。其中new B中即包含图像B的内容,也包含图像A的风格。
图像生成的目的是生成与训练样本图像类似的图像,其中被广泛应用的一种网络结构是深度卷积对抗网络(DCGAN,Deep Convolutional Generative Adversarial Network)
比如:动漫头像生成、人脸生成等等。
通过学习各种类型音乐的特点,深度学习网络可以创作出对应类型的音乐。
Maddelta是一个在线AI音乐生成的网站,可以通过选择歌曲类型来随机生成对应类型的音乐。
目录
前言
生成对抗网络应用
1)风格迁移
2)图像生成
3)音乐创作
生成学习算法
生成对抗网络
GAN的简要实现流程
GAN算法实现要点
MNIST 案例
GAN优点
GAN缺点
文献学习
1. Generative Adversarial Networks
2. Conditional GANs
3. DCGAN
4. Improved Techniques for Training GANs
5. Pix2Pix
6. CycleGAN
7. Progressively Growing of GANs
8. BigGAN
9.NAS
温故而知新
参考:
开源代码
判别式学习:人工神经网络ANN、卷积神经网络CNN、循环神经网络RNN 这些神经网络模型均属于判别式学习算法。该类算法根据改定特征x,计算样本属于y的概率。
生成式学习:生成对抗网络GAN 这种神经网络模型属于生成式学习算法。该类算法先从训练集中总结出各个类别的特征,即先得到,再把待预测样本的特征与各个类别的特征进行比较,以判断出其所属的类别。
生成式学习算法的核心在于求解;生成式算法能够获取类别本身的特征,这使得算法具有创造出新样本的可能。
生成对抗网络(GAN,generative adversarial network),是一种常用于学习类别特征的神经网络结构;主要有两部分组成,分别是生成网络、判别网络。
生成网络(也称:生成器 Generator):用于生成(合成)数据,目的是“骗过”判别器。
判别网络(也称:判别器 Discriminator):用于判别生成的数据是否真实,目的是找出生成器做的“假数据”。
两个网络同时训练,直到判别网络不能鉴别生成数据的真假。
GAN原理图:
生成网络和判别网络,两者的训练目的是为了打败彼此,两者有互相对抗。
1、初始化生成器G和判别器D
2、开始迭代训练:
训练技巧
1、一个模型训练K次、另一个模型训练1次;
2、单边标签平滑:正则化、防止判别器梯度过大。
对于MNIST,判别器网络是一个标准的卷积网络,可以对馈送到其的图像进行分类,二项式分类器将图像标记为真实或伪造。
从某种意义上说,生成器是逆卷积网络:虽然标准卷积分类器获取图像并对其进行下采样以产生概率,但生成器获取随机噪声的向量并将其上采样至图像。第一个通过诸如maxpooling之类的下采样技术丢弃数据,第二个生成新数据。
生成器和判别器相互博弈,随着判别器改变,生成器也随之变化;判别器需要判断是真实图片,还是假图片(生成器生成的);生成器需要尽可能生成真实的图片,以骗过判别器。
论文名称:Generative Adversarial Nets
论文地址: https://arxiv.org/abs/1406.2661
“GAN之父” Ian Goodfellow 发表的第一篇提出 GAN 的论文,提出了 GAN 这个模型框架,讨论了非饱和的损失函数,然后对于最佳判别器(optimal discriminator)给出其导数,然后进行证明;最后是在 Mnist、TFD、CIFAR-10 数据集上进行了实验。
论文名称:Conditional Generative Adversarial Nets
论文地址:https://arxiv.org/abs/1411.1784
cGAN 在生成器部分添加了类别标签这个输入,通过这个改进,缓和了 GAN 的一大问题--训练不稳定。
“引入先验知识的做法”,这种思想,在如今大多数非常有名的 GAN 中都采用这种做法,后面介绍的生成图片的 BigGAN,或者是图片转换的 Pix2Pix,都是这种思想, cGAN 的提出非常关键。
论文名称:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
论文地址:https://arxiv.org/abs/1511.0643
采用 CNN 结构成功实现 GAN 模型,它介绍如何使用卷积层,并给出一些额外的结构上的指导建议来实现。采用反卷积构建生成器和判别器,添加BN驾驶学习和收敛过程。
它还讨论如何可视化 GAN 的特征、隐空间的插值、利用判别器特征训练分类器以及评估结果。
论文名称:Improved Techniques for Training GANs
论文地址:https://arxiv.org/abs/1606.0349
介绍了很多如何构建一个 GAN 结构的建议,它可以帮助你理解 GAN 不稳定性的原因,给出很多稳定训练 DCGANs 的建议,比如特征匹配(feature matching)、最小批次判别(minibatch discrimination)、单边标签平滑(one-sided label smoothing)、虚拟批归一化(virtual batch normalization)等等,利用这些建议来实现 DCGAN 模型是一个很好学习了解 GANs 的做法。
论文名称:Image-to-Image Translation with Conditional Adversarial Networks
论文地址:https://arxiv.org/abs/1611.0700
用原始图片生成新风格的图片;这个模型在训练时候需要采用成对的训练数据,并对 GAN 模型采用了不同的配置。
论文名称:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
论文地址:https://arxiv.org/abs/1703.1059
这篇论文提出了一个非常好的方法--循环一致性(Cycle-Consistency)损失函数;CycleGAN仅仅需要准备两个领域的数据集即可,但不需要一一对应。
论文名称:Progressive Growing of GANs for Improved Quality, Stability, and Variation
论文地址:https://arxiv.org/abs/1710.10196
它取得非常好的结果以及对于 GAN 问题的创造性方法;它利用一个多尺度结构,从 4*4
到 8*8
一直提升到 1024*1024
的分辨率。
论文名称:Large Scale GAN Training for High Fidelity Natural Image Synthesis
论文地址:https://arxiv.org/abs/1809.11096
BigGAN 应该是当前 ImageNet 上图片生成最好的模型了,它的生成结果非常的逼真,但这篇论文比较难在本地电脑上进行复现,它同时结合了很多结构和技术,包括自注意机制(Self-Attention)、谱归一化(Spectral Normalization)等,这些在论文都有很好的介绍和说明。
论文名称:AdversarialNAS: Adversarial Neural Architecture Search for GANs
论文地址:https://arxiv.org/abs/1912.02037
代码地址:https://github.com/chengaopro/AdversarialNAS
提出一种专门针对生成对抗网络(GAN)量身定制的Adversarial NAS方法,以搜索无条件图像生成任务中的高级生成模型。网络架构自动化设计的神经架构搜索(NAS),在许多计算机视觉领域取得了可喜的成果。
这里收集了大量 GAN 论文的 Github 项目,并且根据应用方向划分论文:https://github.com/zhangqianhui/AdversarialNetsPapers
一篇文章“简单”认识《人工神经网络》
人工神经网络 (Artificial Neural Network, ANN),由人工神经元构成的网络,模拟人类的大脑;它模拟生物过程以反映人脑某些特征的计算结构。
神经元及其突触是神经网络的基本器件;模拟生物网络首先模拟生物神经元。
一篇文章“简单”认识《卷积神经网络》
卷积神经网络(Convolutional Neural Network, CNN),在计算机视觉中得到了广泛的应用。
卷积神经网络通过卷积层与池化层的叠加实现对输入数据的特征提取,最后连接全连接层实现分类。
卷积神经网络是前馈网络;前馈神经网络是一个静态网络,信息的传递是单向的,网络的输出只依赖于当前的输入,不具备记忆能力。即:处理的数据是一个一个输入的,前后数据没有关系的。实际生活中,很多数据都是有上下文相关性的,这些数据称为序列数据;处理的时候,不能只考虑当前的输入就进行判断,需要考虑前后输入之间的关系。
一篇文章“简单”认识《循环神经网络》
循环神经网络(Recurrent Neural Networks,RNN),是一种反馈网络,模拟“人脑记忆功能”,常用于语言识别、机器翻译、视频分析、生成图像描述等。
RNN能有效处理序列特性的数据,它能挖掘数据中的时序信息以及语义信息。
1)西安电子科技大学《人工智能导论》课程;
2)北京交通大学《图像处理与机器学习》课程;
3)上海交通大学《人工智能技术》课程;
4)https://zhuanlan.zhihu.com/p/80128600
如有错误,欢迎指出;欢迎交流~
声明:本篇文章,未经许可,谢绝转载。
3 个复现多种 GANs 模型的 github 项目,分别是目前主流的三个框架,TensorFlow、PyTorch 和 Keras:
搜索论文:大佬们的优秀成果都喜欢放在arxiv上,不妨直接去arxiv网站上找,http://cn.arxiv.org/