Bootstrap

深度学习 —— 生成对抗网络(GAN)—— 一文读懂GAN的原理

生成对抗网络GAN


1. GAN的主要思想


概述

GAN训练了两个网络

一个是生成器(generative)一个是判别器(discriminative)

生成器负责学习数据分布

判别器负责区分数据到底是由生成器产生还是由真实数据产生


生成器

生成器的输入数据是一组随机噪声X(简单理解就是一个随机向量, 或者说是随机数种子)

生成器去学习一个映射F, 将随机噪声X映射为一个结果Y, 这个结果就是我们想要生成的图片

也就是通过学习来的F, 生成器能将一个随机向量的空间映射到训练数据的分布上, 通过一个随机向量能通过映射F生成一个符合训练数据分布的数据


判别器

判别器的输入数据是生成器的输出Y或是训练数据X, 判别器是一个分类器, 判断输入数据是来自生成器还是训练数据




2. GAN的训练目标


训练目标(人话)

生成器尽量骗过判别器

判别器尽量区分数据来源

理想模型

生成器完全学习到了训练数据的分布

判别器输出恒为1/2




3. GAN的损失函数


总损失函数(泛函functional)

m i n G    m a x D    V ( D ,   G ) = E x [   l o g D ( x )   ]   +   E z [   l o g (   1 − D ( G ( z ) )   )   ] . min_G\ ~max_D\ ~V(D,~G) = E_{x}[~logD(x)~]~ + ~E_z[~log(~1-D(G(z))~)~]. minG  maxD  V(D, G)=Ex[ logD(x) ] + Ez[ log( 1D(G(z)) ) ].


符号解释

D:判别器

G:生成器

x:来自训练数据的样本数据

z: 随机噪声

说明:

对于单个数据输入

输入数据来自训练数据x ,则D(x) = 1

输入数据来自生成器G( z ),则D( G( z ) ) = 0




判别器D的优化目标

m a x D    V ( D )   =   E x [   l o g ( D ( x ) )   ]   +   E z [   l o g (   1 − D ( G ( z ) )   )   ] max_D~~V(D) ~=~ E_x[~log(D(x))~]~+~E_z[~log(~1-D(G(z))~)~] maxD  V(D) = Ex[ log(D(x)) ] + Ez[ log( 1D(G(z)) ) ]

解释:

​ 判别器越完美, 越能区分数据来源, 则第一个期望越接近0, 第二个期望越接近0

​ 完美的判别器V(D)优化为0




生成器G的优化目标

m i n G V ( G )   =   E z [   l o g (   1 − D ( G ( z ) )   )   ] min_G V(G)~=~E_z[~log(~1-D(G(z))~)~] minGV(G) = Ez[ log( 1D(G(z)) ) ]

解释:

​ 因为总损失函数中, 第一个期望不含G, 所以只用考虑第二个期望

​ 生成器越完美, 越能骗过判别器, 第二个期望越接近负无穷

​ 完美的生成器V(G)优化为负无穷




4. GAN的训练过程

在这里插入图片描述

算法过程

在这里插入图片描述




训练过程:

在一次迭代里

先采随机噪声, 再采集训练数据

先训练k轮判别器D ,再训练生成器




解释:

k是一个超参数,这里k是一个超参数, 不能把D训练的太好也不能太坏

梯度下降的时候是对D,G的损失函数分别进行梯度下降, 不对总损失剃度下降

;