目录
Network As Generatpr(神经网络作为生成器)
Generative adversarial network(生成对抗网络)
Unconditional generation(无条件生成)
摘要
Generative adversarial network(生成对抗网络)其实是两个网络的组合,生成网络负责生成模拟数据;判别网络负责判断输入的数据是真实的还是生成的。生成网络要不断优化自己生成的数据让判别网络判断不出来,判别网络也要优化自己让自己判断得更准确。二者关系形成对抗,因此叫对抗网络。这周首先学习GAN的基本思想以及训练过程,通过真实例子了解GAN的用途。
Abstract
The Generative adversarial network is actually a combination of two networks, and the generative network is responsible for generating simulation data; The discriminant network is responsible for determining whether the input data is real or generated. To generate a network, it is necessary to continuously optimize the data generated by oneself so that the discriminative network cannot make judgments, and the discriminative network should also optimize itself to make judgments more accurate. The relationship between the two forms an adversarial network, hence it is called an adversarial network. This week, we will first learn the basic ideas and training process of GAN, and use real examples to understand its purpose.
Network As Generatpr(神经网络作为生成器)
Generator(生成器)
输入一个x,再加上一个随机的输入z,它要求来自同一个简单的分布(如正态分布、均匀分布等),输出得到的结果y是一个复杂的分布,这样的Network就称之为生成器。
为什么需要分布的输出?
下面是小精灵游戏画面,有很多小精灵在“迷宫”里走动。现给出一个需求,需要通过当前的游戏画面,预测下一帧的画面。传统神经网络的做法是,将前面一帧或几帧的画面图片作为特征,当前画面图片作为标签进行训练
当小精灵走到拐角的位置,学习得到的结果可能是向左转,也可能是向右转,对于network而言,向左转和向右都是对的,但是同是向左向右是错误的,那有什么可能性处理这个问题呢?一个可能性就是让机器的输出是有几率的,让输出不再是单一的,而是几率的分布。
什么时候需要这种生成模型呢?
当任务需要“创造力”的时候
①绘画
同样要画一个红眼睛的角色,不同人想到的人物都是不一样,这时候就需要让机器帮模型输出一个分布。
②机器对话
输入一个问题可以得到不同的答案
生成模型中比较知名的就是Generative adversarial network(GAN)
Generative adversarial network(生成对抗网络)
GAN的全称是Generative adversarial network(生成对抗网络)。生成对抗网络其实是两个网络的组合:生成网络(Generator)负责生成模拟数据;判别网络(Discriminator)负责判断输入的数据是真实的还是生成的。
Unconditional generation(无条件生成)
什么是无条件生成?
原本输入的应该是X+Z经过一个Generator得到最后的概率分布Y,但是在无条件生成里面删去了X,只保留Z的输入
假设z是从一个normal distribution里采样出来的向量,这个向量通常会是一个 low-dimensional 的向量,一般定位50,100维,它的大小是由你自己决定的。
从Normal Distribution里面sample出一个低维度的vector丢到Generator里面,产生一个对应的输出(二次元人脸)。怎么得到这个图片呢?其实一张图片就是一个非常高维的向量。假设这是一个64×64的彩色图片,那么Generator输出就是64×64×3长的向量,整理一下就得到一个图片,这就是Generator要做的事情。
Normal Distribution里面sample出不同的向量作为输入,就会得到不同的输出,但是不管输入是什么,都希望输出都是一个动漫人物的人脸图片。
Discriminator(辨别器)
除了Generator之外还需要训练一个Discriminator,Discriminator本身是一个neural network,一个输入对应一个输出,discriminator的作用是,输入一张图片,输出是一个数值,这个数值越大就代表现在输入的这张图片越像是真实的二次元人物的图像。
而discriminator的架构完全是你自己设计的,你可以用CNN,也可以用 transformer 等等,只要能够产生出你想要的输入输出,就可以了。在这个例子里面,因为discriminator的输入是一张图片,CNN在处理影像上有很多优点,因此选择CNN很比较有优势。
Basic Idea of GAN(GAN的基本思想)
例如生物的进化过程,枯叶蝶最开始是五颜六色,而它的天敌波波就专门识别这种特征,为了避免被捕捉,它慢慢进化成棕色,而这时波波也进化成为识别纹路判断是否是枯叶蝶,接着枯叶蝶就进化成枯叶的花纹,而波波也跟着进一步进化成可以识别的枯叶蝶。
generator与discriminator的关系就类似于生物的进化,生成网络要不断优化自己生成的数据让判别网络判断不出来,判别网络也要优化自己让自己判断得更准确。二者关系形成对抗,因此叫对抗网络。
GAN的全过程如下:
现实问题需求→建立实现功能的GAN框架(编程)→训练GAN(生成网络、对抗网络)→成熟的GAN模型→应用。
这周先学习GAN的训练
GAN的训练
generator和discriminator都是neural network,因此需要初始化参数。初始化完成之后训练步骤如下:
Step1:固定generator,更新discriminato
discriminator训练的目标是要分辨真正的二次元人物跟generator产生出来的二次元人物之间的差异,具体一点来说,实际上我们可能会把这些真正的人物都标1,Generator产生出来的图片都标0。
接下来对于discriminator来说,这就是一个分类的问题,你就把真正的人脸当作类别1,Generator产生出来的图片当作类别2,然后训练一个classifier就结束了。或者看做一个回归的问题,输出的值越接近1,就代表越接近真实图片;而越接近1,就代表越接近假的图片,这两种办法都可以。
Step2:固定Discriminator,训练generator。
那Generator训练的目标就是学习如何“骗”过Discriminator,让Discriminator输出的值越大越好,如果Generator调整参数之后输出的图片可以蒙骗Discriminator,也就是Discriminator会给予高分,那意味着Generator产生出来的图片是比较真实的。
StepN:重复Step1和Step2。
GAN的真实例子
左边右边的都是真人,取两边的图片的向量值得中间值,依次递进,生成机器学习得到的图片。例如脸向左和脸向右的图片可以得到脸朝前的图片,从严肃的表情逐步到笑颜大开的表情。
总结
这周对GAN有了初步学习了解,认识了什么是GAN,以及generator与discriminator两者的关系,下周将继续学习GAN的理论。