GAN网络

gan的种类有很多,到目前(2018年)已经有接近三百种GAN网络。

img

1. GAN网络的基础思想

1.1GAN网络基础架构

1.1.1 Genator生成器

在影像领域,我们使用GAN来产生图片,在语言领域,我们通过GAN来产生干扰句子。

在图像领域,我们传入不同的语句,把信息传入到生成器中(Generator)中,让GAN产生不同的图片/句子。

img

我们输入的是一个容器,里面包含向量,我们通过生成器输出的是一个高纬容器(也就是一张图片)。

我们向量中,每一个参数都代表着图片的一个属性,例如第一个代表头发长度,倒数第二个代表头发颜色,最后一个代表表情,我们可以根据对应参数的大小来修改生成图片的结果。

img

1.1.2 Discriminator辨别器

他是一个功能/神经网络,他通过吃掉一张图片/句子,来产生一个参数。(下图根据图片的美观程度生成得分)

img

1.1.3生成器与辨别器关系

就是生成器与辨别器就是类似捕食者与猎物之间的关系,一开始生成器生成图片,然后辨别器通过辨别来让自己的性能提升,而生成器在被辨别器识别之后,他自己也会不断更新,两者相互竞争,不断提高自己的性能。

img

就是一开始generator生成图片,然后discriminator去判断,把错误打回去,然后generator再去修改自己的策略,不断往复,循环不止。

img

img

具体运行步骤

第一步:(固定生成器,更新辨别器)把生成器固定住,让后吧一大堆真实图片丢到生成器中,然后生成器就会产生一大堆图片。然后我们需要使用辨别器训练和挑选生成器生成的图片与真实图片,并给虚假的图片进行打分,并调整辨别器。

img

第二步:(固定辨别器,更新生成器)我们把辨别器固定住,根据辨别器的得分,然后去调整生成器。最后通过梯度下降去更新生成器。(为什么需要固定辨别器,因为我们想让最后的得分越高越好,如果我们不固定最后几层,(举个不恰当的例子,我们直接最后一层得分加个0.几,那最后的输出得分肯定是爆炸的,也就不能达到我们想要的效果))

img

他们的具体计算与更新公式如下:

img

generation生成结果:

迭代一百次的结果:

img

迭代以前次的结果:

img

迭代五千次:

img

迭代一万次:

img

迭代五万次:

img

GAN网络也可以应用于三维头像生成,并且可以生成我们从来没有见过的结合。(比如 输入往左看的向量和往右看的向量,机器可以生成正脸照。)

img

1.2.GAN的原理

1.2.1Structured Learning(结构化学习)

在机器学习中,我们找到一个函数F(x)=Y,我们需要解决的问题有:

回归问题:输出结果为一个数值,类似房价预测。

分类问题:输出结果为一个分类类别,输出是哪一类。

结构化预测问题:它的输出是一个非常复杂的输出,类似输出一个句子,输出一个图,一个矩阵,输出一个树等等。。。这些都叫做结构化预测。

img

输出为句子:

img

输出为一个矩阵:(输出一张图)

img

为什么节后会学习有挑战性?

如果说有的类别只有很少的范例.我们可能做不起来,(举一个极端的例子,就是每个类只出现一次)。如何才能生成数据集中不存在的图片。机器需要更高的智商。

img

想要解决数据量少的问题。

机器必须要有归一化概念,要有大局观。他必须要考虑全局结果。

在衡量输出结果的优劣时,我们必须考虑全局变量。也就是我们输出一个点,我们必须考虑输出各个点之间的关系。而不是只考虑一个单个的点。

img

1.2.2传统的Structured Learning方法

传统structured learning包含两种方法,一种是bottom up 另一种是top down

bottom up,我们要产生一个完整的部件,bottom up是一个一个生成,最后的结果。但是这种情况很容易失去大局观。

top down是产生一个完整的部件之后,再来整体看这个全局是否合适。

第一个Bottom up就是Generator,第二个Top down就是Discriminator方法。两个组合起来就是我们所了解的GAN网络。

img

1.3 为什么Generator不能自己学习?

NNGenerator它的输出是一个图片,而标准NNC,它是输出一个向量。

img

auto-encoder 自动编码器

我们把图片使用auto-encoder编译成向量,然后再使用decoder去进行解码。

img

我们希望最后输出的图片与原图越相近越好。

我们在经过训练之后,我们可以输入向量,然后它输出图片。

img

怎么判断图片生成的结果。 制作一个坐标轴,把原图的向量与生成的向量写入,并且计算距离。

img

img

但是这种仍然存在一些问题:

比如我们的a代表1向左的方向,b代表1向右的方向,但是我们的a和b各取0.5它的结果会是一个笔直的1么?答案是否定的,由于我们的NNGenerator它的函数是非线性的,所以输出结果并不一定是笔直的1。

img

怎么解决这个问题?:使用VAE方法(Variational Auto-encoder(变分自编码器)&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值