[PyTorch][chapter 55][GAN- 2]

前言:

      这里面结合纳什均衡,分析GAN损失函数优化的原理

  1.     优化目标
  2.     纳什均衡-D
  3.     JS 散度
  4.    纳什均衡-G
  5.     DCGAN 

   


目录:

    1: 纳什均衡-D

    2:    纳什均衡-G

    3:  JS 散度缺陷


一  训练方法

      1.1  损失函数

              min_{G}max_{D} V(D,G)=E_{x \sim p_r(x)}[log D(x)]+E_{z \sim p_z(z)}[log(1-D(z))]

                                                     =E_{x\sim p_r(x)}[log D(x)]+E_{x \sim p_g(x)}[log(1-D(x))]

         1.2  训练方法

[PyTorch][chapter 55][GAN- 2]_第1张图片


二  纳什均衡-G

     问题: 固定编码器G,鉴别器D的最优解是什么

  解:

   maxV(G,D)=E_{x \sim p_{r}(x)}[log D(x)]+E_{x\sim P_z}[log(1-D(x)]

 j简写形式:p_r=p_r(x),p_g =p_g(x)

       因为编码器G 固定了,p_z(x)\sim p_g(x),所以

            =\int_x p_{r} log D(x)dx+\int p_g log(1-D(x))dx

       因为编码器固定,则可以认为两个分布都是常数

        设 p_{r}(x)=a, p_{g}(x)=b

      对鉴别器D,微分求极值点

      \frac{1}{ln10}\frac{a}{D^*(x)}-\frac{1}{ln10}\frac{b}{(1-D^*(x))}=0

     D^*(x)=\frac{a}{a+b}

                  =\frac{p_{r}}{p_{r}+p_g}

固定编码器G后,根据最优的鉴别器D^*(x),此刻的

V(D,G^*)=\int_x p_rlog \frac{p_r}{p_r+p_g}+\int_x p_g log (1-\frac{p_r}{p_r+p_g})

                          =\int_x p_rlog \frac{p_r}{p_r+p_g}+\int_x p_g log (\frac{p_g}{p_r+p_g})


三      JS 散度

      KL 散度:    D_{KL}=\int p(x)log \frac{p(x)}{p(x)+q(x)}

      JS 散度:   D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||\frac{p+q}{2})+\frac{1}{2}D_{KL}(q||\frac{p+q}{2})

        在0到1之间,JS散度的值越接近于0则意味着两个概率分布越相似,而值越接近于1则意味着两个概率分布越不相似。JS散度值在0.1以下可以认为两个分布相似性较高,而在0.5以上则可以认为两个分布差异较大。

      性质:

           非负性

            非对称性

非负性证明

利用  琴生不等式性质

[PyTorch][chapter 55][GAN- 2]_第2张图片

 因为

 \sum_x p(x) =1, \sum_x q(x)=1, \sum \frac{p(x)+q(x)}{2}=1

t=\frac{p+q}{2}

 所以\frac{1}{2}D_{KL}(p||\frac{p+q}{2})=\sum_x p log \frac{p}{t}

                                   =-\sum_x p log \frac{t}{p}

                      利用Jensen 不等式展开

                                    \geq -log \sum_x p \frac{t}{p}

                                      \geq -log \sum t

                                     \geq -log1

 JS 散度是由两个最小为0的KL 散度组成,所以最小值也是0


二  纳什均衡-G

    前面已经得到鉴别器D的最优解,在得到最优鉴别器D后,

生成器G的最优解是什么?

  G^*=V_{min}(D^*,G)=2D_{JS}(p_r||p_g)-2log2 =-2log2

 证明:

   D_{JS}(p_r||p_g)=\frac{1}{2}D_{KL}(p_r||\frac{p_r+p_g}{2})+\frac{1}{2}D_{KL}(p_g||\frac{p_r+p_g}{2})

                          =\frac{1}{2}[log2+\int_x p_r log\frac{p_r}{p_r+pg}]+\frac{1}{2}[log2+\int_x p_g log\frac{p_g}{p_r+pg}]

                          =\frac{1}{2}[2log2+V(D^*,G)]

  所以,固定鉴别器D后,生成器G最优解如下:

   V(D^*,G)=2D_{JS}(p_r||p_g)-2log2

   生成器的优化目标是求最小值,当

  p_r=p_g, D_{JS}(p_r||p_g)=0

  V_{min}(D^*,G^*)=-2log2


三 DCGAN 

     全称是Deep Convolution Generative Adversarial Networks(深度卷积生成对抗网络)。是2014年Ian J.Goodfellow 的那篇开创性的[GAN论文](之后一个新的提出将GAN和卷积网络结合起来,以解决GAN训练不稳定的问题的一篇paper.

      GAN 网络主要由 编码器G 和鉴别器D 组成

     3.1  编码器G结构

     [PyTorch][chapter 55][GAN- 2]_第3张图片

  • 使用ReLU作为激活函数,最后一层使用Tanh作为激活函数。
  • 去掉了FC层,使网络变为全卷积网络。

    3.2 鉴别器D 结构

[PyTorch][chapter 55][GAN- 2]_第4张图片

       D中取消所有的池化层,使用转置卷积(transposed convolutional layer)并且步长大于等于2进行上采样。
        D网中也加入stride的卷积代替pooling。
        在D网和G网中均使用批量归一化(batch normalization)

         最后一层时通常不会使用batch normalization:这是为了保证模型能够学习到数据的正确均值和方差。
        D网络中使用LeakyReLU作为激活函数。
        DCGAN中换成了两个卷积神经网络(CNN)的G和D,可以刚好的学习对输入图像层次化的表示,尤其在生成器部分会有更好的模拟效果。DCGAN在训练过程中会使用Adam优化算法
 


对抗神经网络(二)——DCGAN_全部梭哈一夜暴富的博客-CSDN博客。

理论篇:快速了解Jensen's Inequality与KL散度 - 知乎

GAN入门|第二篇:人脸图像生成(DCGAN) - 知乎



 

  

你可能感兴趣的:(生成对抗网络,人工智能,神经网络)