赞
踩
本博客是个人学习的笔记,讲述的是生成对抗网络(generate adversarial network ) 的一种架构:深度生成对抗网络 的简单介绍,下一节将使用 tensorflow 搭建 DCGAN网络实现 手写数字的生成任务。
生成对抗网络是在15-16年提出来的一种新的深度学习的算法,在此之前,图像的分类问题使用卷积神经网络得到了很好的解决,准确率甚至已经超过了人类,神经网络之所以有如此强大的能力,一个重要的因素是有足够多的训练数据,这些良好的训练数据,使得数据驱动的神经网络分类算法得到很好的发展,但也引发了一个问题:如果没有足够的数据如何?最先想到的办法是使用图像变换来扩充数据集,这不失为一个好办法,经过旋转,平移,仿射变换的图像加盟的数据集,可以使神经网络学习到平移不变性,旋转不变性等,但是依旧是隔靴搔痒,无法解决数据缺乏的问题,模型的泛化能力比较差。这就需要一种可以生成图像的神经网络来生成对应的图像来扩充数据集,生成对抗网络因此诞生。
对抗生成网络的应用十分广泛,包括但不局限于:图像超清化,换脸,图像修复,图像转换为漫画,漫画上色等有趣的应用。对于解决图像生成,数据生成问题具有十分重要的作用。
常见的深度学习任务,比如分类,物体检测等,本质上都是判别问题,可以使用 Dropout,Batch Normalization 等手段达到很好的训练效果。而生成模型则是一种无中生有的模型,无法直接使用判别模型的诸多技术。对抗生成网络就是借鉴判别模型的优势,在解决生成模型问题上的一种新的方法。
猫捉老鼠的例子:猫要不断的提升自己的敏捷度,奔跑速度,侦查等能力,这样才可以捉住老鼠。老鼠要提升自己的躲闪,逃跑,警戒,隐蔽能力来躲避猫的攻击,猫和老鼠互相提升,各自的能力越来越强。
注意点: 1)力量要均衡,如果猫太强大,把老鼠都捉光了,则猫就无法继续提高自己的能力了。如果老鼠太强大,猫一个都捉不到,灭绝了,没有了猫,老鼠的能力也不能继续提高了。2) 生成和对抗过程要交替进行,防止一方过度强大。
结构包括生成器和判别器,在训练的时候交替进行。
生成器的目标是生成仿真的数据,判别器的目标是判断样本的真实性。
对抗生成网络的目标是训练出一个强大的生成器,可以生成逼真的数据 (判别器也很强大,和生成器相互促进,共同进步)
缩写即英文第一个首字母组合,输入为一个随机向量作为变量,生成一个仿真的图像。
定义一个GAN网络主要包含以下几个方面:
定义GAN网络的目标
定义生成器的输入和输出
定义判别器的输入和输出
定义生成器和判别器的网络架构
我们希望输入一个随机向量作为自变量,输出一张仿真的图像作为结果。
最终的效果就是判别器和生成器相互提升,判别器认证真假的能力和生成器生成图片的真实性都越来越高,得到一个可以生成高质量仿真图像的生成器。
生成器的输入为一个随机变量,输出为生成的图片。每当随机变量变化的时候,生成的图像就会变化。(实际山就是建立了随机向量和图片的一个映射)
判别器的作用是判断一个输入的图像是真实的图像还是假的图像,输入为真实的图像和假的图像,输出为输出的图像是真是图像的概率。
生成器的网络结构如图所示,从左到右分别是输入和输出。输入为一个随机向量z ,输出为生成的图像。
随机向量z 首先进行全连接映射到一个比较长的向量,然后进行 reshape 操作生成大小为 4 × 4 通道数木为1024的三维矩阵,此时这个矩阵就可以当做某个卷积层的输出。之后对这个矩阵进行反卷积操作,逐渐倍增矩阵的长和宽,同时通道数目逐渐减少,到最后只有3个通道,代表图像 RGB 三个通道。
对于一般的卷积操作,假设输入图像为 4 × 4 大小,卷积核大小为 3 × 3 ,在不加padding 的情况下,根据卷积的定义,易得最终的结果是 2 × 2 的一个 feature map。
假设输入图片为:
A00 | A01 | A02 | A03 |
---|---|---|---|
A10 | A11 | A12 | A13 |
A20 | A21 | A22 | A23 |
A30 | A31 | A32 | A33 |
卷积核为:
W00 | W01 | W02 |
---|---|---|
W10 | W11 | W12 |
W20 | W21 | W22 |
卷积的结果为:
B00 | B01 |
---|---|
B10 | B11 |
则有如下对应关系:
B00= A00 × W00 + A01 ×W01 + A02 × W02+ A10 × W10 + A11 × W11 +A12 × W12 + A20 ×W20 + A21×W21 +A22×W22。 根据卷积的定义,B01,B10,B11 也可以很轻易的写出表达式。
我们将输入的图像(4 ×4 )展开为 一个一维列向量 X(16× 1) ,将卷积核表示为下面的矩阵 W(4 × 16):
[
W
00
W
01
W
02
0
W
10
W
11
W
12
0
W
20
W
21
W
22
0
0
0
0
0
0
W
00
W
01
W
02
0
W
10
W
11
W
12
0
W
20
W
21
W
22
0
0
0
0
0
0
0
0
W
00
W
01
W
02
0
W
10
W
11
W
12
0
W
20
W
21
W
22
0
0
0
0
0
0
W
00
W
01
W
02
0
W
10
W
11
W
12
0
W
20
W
21
W
22
]
可以验证一下,
W
×
X
T
W × X^T
W×XT 就是 [B00,B01,B10,B11]
上面的步骤将一个卷积操作转换为了两个矩阵的乘法,实际上反卷积的计算也可以表示为矩阵,所不同的是对于同一个卷积核,反卷积的矩阵的 卷积操作的转置,读者可自行验证,实际上,卷积层的梯度传播也是使用的反卷积,卷积的反向传播其实就是反卷积的正向传播。
以上是生成对抗网络和 深度卷积生成对抗网络的简介,下面的博客介绍一个简单的生成例子:使用深度卷积生成对抗网路生成手写数字。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。