GAN算法学习1

1 基本概念

 GAN的全称是Generative adversarial network,中文翻译过来就是生成对抗网络。生成对抗网络其实是两个网络的组合:生成网络(Generator)负责生成模拟数据;判别网络Discriminator)负责判断输入的数据是真实的还是生成的。生成网络要不断优化自己生成的数据让判别网络判断不出来,判别网络也要优化自己让自己判断得更准确。二者关系形成对抗,因此叫对抗网络。

1.1 Generator

拿生成图像举例,generator会将将用户输入的一维向量生成高维的向量(这里指图像)。

 GAN算法学习1_第1张图片

1.2  Discriminator

同样拿生成二次元图像举例, Discriminator以生成的图像作为输入,输出一个数值,数值越高表示生成的图像越逼真。

GAN算法学习1_第2张图片

1.3 两者关系 

本例中,generator一代生成一组二次元图像,discriminator一代将其与真实图像比较并给出评分。收到discriminator的反馈后,generator二代将通过调整再次生成图像,同理discriminator也将调整参数生成二代后给出评分,如此迭代下去使得generator生成的图像更接近真实图像而discriminator得到的评分更接近真实评分。

GAN算法学习1_第3张图片

1.4 大致流程

step1: 固定generator G,训练discriminator D。

从真实图像中利用generator G生成一堆样本,然后训练discriminator D使得真实图像的评分接近1而样本评分接近0(可看作分类或者回归问题)

GAN算法学习1_第4张图片

step 2: 固定discriminator D,训练generator G。

 将generator和discriminator看作是一个巨大的神经网络(中间有多个隐藏层),固定后面的几个隐藏层,通过修改前面隐藏层的参数使得output的值越大越好(Gradient Acent)GAN算法学习1_第5张图片

 具体公式:

GAN算法学习1_第6张图片

 2 GAN as Structured Learning

2.1 Structured Learning

结构学习指的是输入和输出都是具有结构化的对象(数列、列表、树、边界框等)。 

例如:Machine Translation, Speech Recognition,Chat-bot

训练难点:将components有效结合起来

训练方法:Bottom up(由下至上,先生成小组件,但容易失去大局观)+Top Down(先生成整个物件,再逐个生成组件)=GAN

2.2 Can Generator learn by itself?

GAN算法学习1_第7张图片

问题1:初始向量如何产生? 

可事先训练一个Auto-encoder,它包含两个部分。第一部分是NN Encoder,将输入图片转化为code。第二部分为 NN Decoder,它利用转化的code生成图片,这里的NN decoder即可视作generator。训练目的是使得生成图片与初始图片越接近越好。

GAN算法学习1_第8张图片

问题2:向量变换后输出的结果可能是noise

使用VAE(Variational Auto-encoder),NN Encoder输出的除了一般的向量之外还有每一个维度的variance,然后从normal distribution中生成一堆noise,相加后生成最后的code。

利用这个技术可以使decoder更加稳定,对于任何输入的向量都能生成合理的图片而不是noise

GAN算法学习1_第9张图片

问题3:一个network很难同时包含components之间的关系

所以要用GAN、、、

2.3 Can Discriminator generate?

相较于generator的优势,容易以由上至下的角度观察到components之间的关系

方法:在每次迭代中

  • 训练discriminator D使得它能区分positive examples和negative examples,即给positive examples高分,给negative examples低分
  • 利用discriminator D生成negative examples使生成的negative examples:

 缺点:negative examples很难生成合适的,解argmax问题超级困难。

你可能感兴趣的:(人工智能,生成对抗网络,人工智能,神经网络)