GAN动机、原理及缺陷

GAN的动机

要了解GAN,要从名字出发:Generative Adversarial Network 对抗生成网络

  • 生成:描述了GAN能解决的问题,生成一张图片或者一段话等。
  • 对抗:描述了GAN网络的运作方式。

**GAN的两个核心组件:生成器Generator,判别器Discriminator。**生成器的目标是尽量生成真实的图片去欺骗判别器,而判别器的目标是尽量把生成器生成的图片和真实的图片区分开,是一个二分类过程。

二者之间的关系体现着GAN中的对抗关系。打个比方,**这就像我们投稿论文,我们是Generator,审稿人是Discriminator。**一篇论文就像我们要学习的模型,我们每一次投稿相当于Generator的一次输出,审稿人作为Discriminator评判着我们的作品。审稿人是有自己的评判标准的,所以我们作为Generator每次修改论文就是去向审稿人的标准靠拢,经过几轮审稿和修改,直到审稿人满意。注意这一过程中,当我们改论文时,审稿人不能再评审我们的文章;而审稿人评审时,我们不能同时修改文章。

现在我们描述GAN的基本流程。Generator( G G G),Discriminator( D D D)

  • 初始化 G G G的参数 θ g \theta_g θg D D D的参数 θ d \theta_d θd

  • 迭代:

    • ​ 在数据集中采集 m m m个样本(向量) { x 1 , x 2 , … x m } \{ {x^1},{x^2}, \ldots {x^m}\} { x1,x2,xm}

    • ​ 在某种分布(如正态分布)下采样 m m m个噪声样本 { z 1 , z 2 , … z m } \{ {z^1},{z^2}, \ldots {z^m}\} { z1,z2,zm}

    • ​ 通过 G G G生成数据 { x ~ 1 , x ~ 2 , … x ~ m } ,   x ~ i = G ( z i ) \{ { {\tilde x}^1},{ {\tilde x}^2}, \ldots { {\tilde x}^m}\},\ {\tilde x}^i=G(z^i) { x~1,x~2,x~m}, x~i=G(zi)

    • ​ 通过最大化以下目标函数更新 D D D的参数 θ d \theta_d θd,此时 G G G的参数固定:

    • V ~ = 1 m ∑ i = 1 m log ⁡ D ( x i ) + 1 m ∑ i = 1 m log ⁡ ( 1 − D ( x ~ i ) ) \tilde V = \frac{1}{m}\sum\limits_{i = 1}^m {\log D({x^i}) + } \frac{1}{m}\sum\limits_{i = 1}^m {\log (1 - D({ {\tilde x}^i}))} V~=m1i=1mlogD(xi)+m1i=1mlog(1D(x~i))

    • θ d ← θ d + η ∇ V ~ ( θ d ) {\theta _d} \leftarrow {\theta _d} + \eta \nabla \tilde V({\theta _d}) θdθd+ηV~(θd)

    • 目标函数第一项:增大 D D D对数据集中的样本的评分,也就是树立审稿人心中的标杆。

      目标函数第二项:减少 D D D G G G生成的样本的评分,也就是审稿人不断的给我们的稿子提建议(挑毛病)。

    • ​ 在某种分布(如正态分布)下采样 m m m个噪声样本 { z 1 , z 2 , … z m } \{ {z^1},{z^2}, \ldots {z^m}\} { z1,z2,zm},此处采样不需要与上一次采样相同。

    • ​ 通过最大化以下目标函数更新 G G G的参数 θ d \theta_d θd,此时 D D D的参数固定:
      V ~ = 1 m ∑ i = 1 m log ⁡ D ( G ( z i ) ) \tilde V = \frac{1}{m}\sum\limits_{i = 1}^m {\log D(G({z^i}))} V~=m1i=1mlogD(G(zi))

      θ g ← θ g + η ∇ V ~ ( θ g ) {\theta _g} \leftarrow {\theta _g} + \eta \nabla \tilde V({\theta _g}) θgθg+ηV~(θg)

      目标函数:增大 D D D G G G生成的样本的评分,也就是我们要努力修改自己的文章使审稿人更加满意。

为什么 G G G不可以自己学习,而非要依赖于 D D D的评判呢?

我们假设这个方案可行且希望 G G G学习输出数字8的图像,就意味着 G G G需要对任意的输入都可以正确的输出数字8的图像。但是,面对如此随机的输入向量, G G G很难控制好自己的输出。所以我们进一步希望所有的数字8的图像能够拥有相似的向量表示。为达目的,可以通过另一个网络来学习,最后希望 G G G生成的图像能够与原图足够相似。即:

在这里插入图片描述

其实这个 D e c o d e r Decoder Decoder就像 G A N GAN GAN中的 G e n e r a t o r Generator Generator上图中的结构(搬运自《百面深度学习》),也就是经典的可微生成网络 A u t o E n c o d e r , A E AutoEncoder,AE AutoEncoder,AE

以下内容搬运自《百面深度学习》

标准的 A E AE AE由编码器 e n c o d e r encoder encoder和解码器 d e c o d e r decoder decoder两部分组成,如上图所示。整个模型可以看作一个“压缩”和“解压”的过程:首先编码器将真实数据(真实样本) x x x压缩为低维隐空间中的一个隐向量 z z z,该向量可以看作输入的“精华”。然后解码器将这个隐向量 z z z解压,得到生成数据(生成样本) x ~ {\tilde x} x~。在训练过程中,会将生成样本 x ~ {\tilde x} x~与真是样本 x x x进行比较,朝着减小二者之间差异的方向去更新编码器和解码器的参数,最终目的是期望由真是样本 x x x压缩得到的隐向量 z z z能够尽可能地抓住输入的精髓,使得用其重建出的生成样本 x ~ {\tilde x} x~与真实样本 x x x尽可能接近。

这里补充一点理解,即为什么这个隐变量 z z z如此重要。

我们知道一张图片在计算机中是以矩阵的形式存储的。比如数字8的图像,每个人写出来的8都不一样,那么它的矩阵就会差别很大且很难找到什么规律。隐变量 z z z希望做的事情就是用最简单的向量表征图像的所有特征,比如我们有一个2维的向量来表征数字图像,那么理想的表征是:[这是数字8,向左偏24度]。大概是这个意思。

回到 A E AE AE的讨论上, A E AE AE会有什么问题呢?观察它的训练框架可以发现,它只能针对当前给定的图像生成一个隐变量 z z z和一个生成数据 x ~ {\tilde x} x~。所以 A E AE AE很有可能无法泛化到未见过的图片上。换句话说,即只会模仿而不会创造,无法生成任意的新样本。

作为 A E AE AE的升级, V a r i a t i o n a l A u t o E n c o d e r , V A E Variational AutoEncoder, VAE VariationalAutoEncoder,VAE要解决的就是 A E AE AE只会模仿不会创造的问题。下图为 V A E VAE VAE框架,搬运自《百面深度学习》

在这里插入图片描述

以下内容搬运自《百面深度学习》

V A E VAE VAE的主要优势在于能够产生新的隐向量 z z z,进而生成有效的新样本。 V A E VAE VAE能够生成新样本(与 A E AE AE最大区别)的原因是, V A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值