首页 > 编程语言 >生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法

生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法

时间:2022-11-01 18:00:29浏览次数:40  
标签:入门 卷积 矩阵 生成器 batch 算法 DCGAN 判别


DCGAN

  • ​​DCGAN​​
  • ​​原理​​
  • ​​改进​​
  • ​​网络架构​​
  • ​​ImprovedDCGAN​​
  • ​​训练增强手法​​
  • ​​特征匹配​​
  • ​​批次判别​​
  • ​​常见问题​​
  • ​​原理​​
  • ​​实现​​
  • ​​历史平均​​
  • ​​单侧标签平滑(one-sided label smoothing)​​
  • ​​虚拟批次正态化(virtual batch normalization)​​

DCGAN

原理

把上述的 G和D 换成了两个卷积神经网络(CNN)。但不是直接换就可以了,DCGAN 对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度

改进

  1. 取消所有pooling 层。G网络中使用微步幅度卷积(fractionally strided convolution)代替pooling层,D网络中使用步幅卷积(strided convolution)代替 pooling层。
  2. 在D和G中均使用 batch normalization
  3. 去掉FC层,使网络变为全卷积网络
  4. G网络中使用ReLU 作为激活函数,最后一层使用tanh
  5. D网络中使用LeakyReLU 作为激活函数

网络架构

生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_生成对抗网络


生成器的输入是一个 100 维的噪声,中间会通过 4 层卷积层,每通过一个卷积层通道数减半,长宽扩大一倍 ,最终产生一个 64643 大小的图片输出。值得说明的是,在很多引用 DCGAN 的 paper 中,误以为这 4 个卷积层是 deconv(反卷积)层,但其实在DCGAN 的介绍中这 4 个卷积层是 fractionally strided convolution(微步幅度卷积),二者的差别如下图所示:

生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_cnn_02


上图左边是反卷积,用 33 的卷积核把 22 的矩阵反卷积成 44 的矩阵;而右边是微步幅度卷积,用 33 的卷积核把 33 的矩阵卷积成 55 的矩阵,二者的差别在于,反卷积是在整个输入矩阵周围添 0,而微步幅度卷积会把输入矩阵拆开,在每一个像素点的周围添 0。 接下来我们再看一下 DCGAN 中 D 网络的结构,由于原论文中没有给出相关图,我找了一篇近似论文中的图说明:

生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_算法_03


D 可以看成是 G 结构反过来的样子,那具体结构也没什么好说的了,简言之不断地做卷积,最终得到一个 0,1 之间的结果。

ImprovedDCGAN

训练增强手法

GANs 的主要问题之一是收敛性不稳定,尽管 DCGAN 做了结构细化,训练过程仍可能难以收敛。我们先来分析一下为什么会出现收敛性不稳定。 GANs 的优化就是寻找两玩家非合作博弈的纳什均衡点。这里的两玩家指的就是生成器和判别器。

特征匹配

为了不让生成器尽可能地去蒙骗鉴别器,ImprovedDCGAN 希望以特征作为匹配标准,而不是图片作为匹配标准,于是提出了一种新的生成器的目标函数,即:
生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_卷积_04
其中 f(x)是指的生成器把判别器的中间层输出 f(x)作为目标(一般中间层都是 D 最后几层,f(x)实际上是 feature map),这样可以让生成的中间层输出和真实数据的中间层输出尽可能相同。这种做法虽然不能保证到达均衡点,但是收敛的稳定性应该是有所提高。

批次判别

常见问题

收敛到同一个点,并没有什么机制可以让生成器生成不一样的内容。

原理

用 minibatch 判别器。也就是说每次不是判别单张图片,而是判别一批图片。

实现

将一个中间层 f(x)乘以一个 tensor,得到一个新的矩阵 M,计算 M 每一行之间的 L1 距离 o,以此为 f(x)下一层的输入
生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_cnn_05
假设 x 是从生成器生成的,并且收敛到同一点,那么对应的 f(x)必然很相似,由 f(x)生成的 M也必然非常相似。而这些 M 每一行的 L1 距离c(xi,xj)也就会非常接近 0,这也导致 o(X)几乎是 0 向量。相对的,如果 x 是真实数据,那么 o(X)一般不会太接近 0 向量,这样判别器就可以更简单的区分生成数据或真实数据(在生成器收敛到一点的情况下)。

历史平均

在更新参数值时,把它们过去的值也纳入考虑:
生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_算法_06

单侧标签平滑(one-sided label smoothing)

  • 判别式的目标函数中正负样本的系数不再是 0-1,而是α和β,这样判别式的目标就变成了下面这个式子。这相当于,原本判别器的目标数出值是[0=假图像,1=真图像],现在可能变成了[0=假图像,0.9=真图像]
    生成对抗网络实战入门到精通——DCGAN算法以及训练增强手法_生成器_07

虚拟批次正态化(virtual batch normalization)

batch normalize 在神经网络领域有广泛应用,但是也有一些问题,比如特定样例 x 在神经网络上的输出会受到 minibatch 上其他的样本影响。文中提出了一种 virtual batch normalization(VBN),会在训练前提取一个 batch,以后就根据这个 batch 做 normalize,不过由于这样的计算成本很高,所以它仅仅被用在生成器当中。


标签:入门,卷积,矩阵,生成器,batch,算法,DCGAN,判别
From: https://blog.51cto.com/u_13859040/5814637

相关文章