当前位置:   article > 正文

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

dcgan模型训练方法

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 作为激活函数

网络架构

在这里插入图片描述
生成器的输入是一个 100 维的噪声,中间会通过 4 层卷积层,每通过一个卷积层通道数减半,长宽扩大一倍 ,最终产生一个 64643 大小的图片输出。值得说明的是,在很多引用 DCGAN 的 paper 中,误以为这 4 个卷积层是 deconv(反卷积)层,但其实在DCGAN 的介绍中这 4 个卷积层是 fractionally strided convolution(微步幅度卷积),二者的差别如下图所示:
在这里插入图片描述
上图左边是反卷积,用 33 的卷积核把 22 的矩阵反卷积成 44 的矩阵;而右边是微步幅度卷积,用 33 的卷积核把 33 的矩阵卷积成 55 的矩阵,二者的差别在于,反卷积是在整个输入矩阵周围添 0,而微步幅度卷积会把输入矩阵拆开,在每一个像素点的周围添 0。 接下来我们再看一下 DCGAN 中 D 网络的结构,由于原论文中没有给出相关图,我找了一篇近似论文中的图说明:
在这里插入图片描述
D 可以看成是 G 结构反过来的样子,那具体结构也没什么好说的了,简言之不断地做卷积,最终得到一个 0,1 之间的结果。

ImprovedDCGAN

训练增强手法

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

特征匹配

为了不让生成器尽可能地去蒙骗鉴别器,ImprovedDCGAN 希望以特征作为匹配标准,而不是图片作为匹配标准,于是提出了一种新的生成器的目标函数,即:
∥ E x ∼ p data  f ( x ) − E z ∼ p z ( z ) f ( G ( z ) ) ∥ 2 2 \left\|\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}} \mathbf{f}(\boldsymbol{x})-\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})} \mathbf{f}(G(\boldsymbol{z}))\right\|_{2}^{2} Expdata f(x)Ezpz(z)f(G(z))22
其中 f(x)是指的生成器把判别器的中间层输出 f(x)作为目标(一般中间层都是 D 最后几层,f(x)实际上是 feature map),这样可以让生成的中间层输出和真实数据的中间层输出尽可能相同。这种做法虽然不能保证到达均衡点,但是收敛的稳定性应该是有所提高。

批次判别

常见问题

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

原理

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

实现

将一个中间层 f(x)乘以一个 tensor,得到一个新的矩阵 M,计算 M 每一行之间的 L1 距离 o,以此为 f(x)下一层的输入
o ( x i ) b = ∑ j = 1 n c b ( x i , x j ) ∈ R o ( x i ) = [ o ( x i ) 1 , o ( x i ) 2 , … , o ( x i ) B ] ∈ R B o ( X ) ∈ R n × B

o(xi)b=j=1ncb(xi,xj)Ro(xi)=[o(xi)1,o(xi)2,,o(xi)B]RBo(X)Rn×B
o(xi)bo(xi)o(X)=j=1ncb(xi,xj)R=[o(xi)1,o(xi)2,,o(xi)B]RBRn×B
假设 x 是从生成器生成的,并且收敛到同一点,那么对应的 f(x)必然很相似,由 f(x)生成的 M也必然非常相似。而这些 M 每一行的 L1 距离c(xi,xj)也就会非常接近 0,这也导致 o(X)几乎是 0 向量。相对的,如果 x 是真实数据,那么 o(X)一般不会太接近 0 向量,这样判别器就可以更简单的区分生成数据或真实数据(在生成器收敛到一点的情况下)。

历史平均

在更新参数值时,把它们过去的值也纳入考虑:
∥ θ − 1 t ∑ i = 1 t θ [ i ] ∥ 2 \left\|\theta-\frac{1}{t} \sum_{i=1}^{t} \theta[i]\right\|^{2} θt1i=1tθ[i]2

单侧标签平滑(one-sided label smoothing)
  • 判别式的目标函数中正负样本的系数不再是 0-1,而是α和β,这样判别式的目标就变成了下面这个式子。这相当于,原本判别器的目标数出值是[0=假图像,1=真图像],现在可能变成了[0=假图像,0.9=真图像]
    D ( x ) = α p data  ( x ) + β p model  ( x ) p data  ( x ) + p model  ( x ) D(\boldsymbol{x})=\frac{\alpha p_{\text {data }}(\boldsymbol{x})+\beta p_{\text {model }}(\boldsymbol{x})}{p_{\text {data }}(\boldsymbol{x})+p_{\text {model }}(\boldsymbol{x})} D(x)=pdata (x)+pmodel (x)αpdata (x)+βpmodel (x)
虚拟批次正态化(virtual batch normalization)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/712580
推荐阅读
相关标签
  

闽ICP备14008679号