Code Monkey home page Code Monkey logo

gan's Introduction

生成对抗网络

对抗式生成网络(Generative Adversarial Network)

arXiv:https://arxiv.org/abs/1406.2661

条件生成对抗网络(Conditional Generative Adversarial Nets)

arXiv:https://arxiv.org/abs/1411.1784

github

通俗语言解释如何训练

我们共同训练生成器和辨别器,让他们变得强壮,通过反复训练防止其中一个网络比另一个网络强大太多。

为什么轮回训练网络使双方共同变强而不是单独训练让他们的性能更强大?

如果其中一个网络太强大,另外一个会因能力太差而导致两个网络性能都弱化。一个网络不知道自己在跟低级的网络竞争而导致其认为自己很高级。自作聪明的网络就会对低级的网络过拟合。

训练辨别器

给它一张训练集中的图片和一张生成器生成的图片,如果得到的是生成图片辨别器应该输出 0,如果是真实的图片应该输出 1。

从技术性的角度:交叉熵的损失可以由最优控制器弥补,小菜一碟!

训练生成器

生成器必须努力让辨别器在得到它生成的图片后输出 1。

现在,这有一个有趣的部分。

假设生成器生成了一张图片,辨别器认为这张图片有 0.4 的概率是真实图片。生成器如何调整它生成的图片来增加这个概率,比如说增加到 0.41?

答案就是:

为训练生成器,辨别器不得不告诉生成器如何调整从而使它生成的图片变得更加真实。

生成器必须向辨别器寻求建议!

直观来说,辨别器告诉生成器每个像素应调整多少来使整幅图像更真实一点点。

技术上来说,通过反向传播辨别器输出的梯度来调整生成图片。以这种方式训练生成器,你将会得到与图片形状一样的梯度向量。

如果你把这些梯度加到生成的图片上,在辨别器看来,图片就会变得更真实一点。

但是我们不仅仅把梯度加到图片上。

相反,我们进一步反向传播这些图片梯度成为组成生成器的权重,这样一来,生成器就学习到如何生成这幅新图片。

我重复一遍,为生成好的图片,你必须向老师展示你的工作,得到反馈!

如果辨别器不帮助生成器的话,那就太残酷了,因为生成器实际做的工作比辨别器更艰难,它生成图片!

这就是生成器如何被训练的。

就像这样,来回训练生成器和辨别器,直到达到一个平衡状态。

如果你很困惑,这是在初期盲目状态下,两个网络努力学习对话的直观感受:

G:我有一张人脸图片,它跟你以前见过的相比,足够真实吗?

D:比较真实但也比较像是你生成的图片。(对真实图片,辨别器产生 0.4 的概率) 我不太确定但我猜你给我的应该是一张生成的图片。

G:你猜对了!是我生成的一张图片。我应该怎样调整来让它更真实呢?

D:让我想一下 (实际上在大脑里在做反向传播运算) 我认为你应该往图片里添加一对眼睛,人脸图片通常会包含眼睛。

(技术上来说:我认为你应该增加第 0 号像素的灰度值增加 1,第 1 号像素的灰度值减少 5 个,..., 第 4095 个像素的灰度值增加 8 个)

G:收到 (反向传播那些梯度给所有的权重)

Dumbness

以上是一段比较初级的对话。双方都很白目。辨别器甚至不确定面部是否应该包含眼睛。它甚至说生成的没有眼睛的图片真实!(一个高级的辨别器对这张图片一定会说不,因为一张人脸图片肯定会包含眼睛!)

经过一段时间的训练,它们会变得越来越聪明,直到他们达到非常高级的最优状态。

这里是两网络在最优高级状态学习时对话的直观感受:

G:我有一张人脸图片,它跟你以前见过的人脸图片相比足够真实吗?  

D:这张图片真的很真实 (对真实图片,辨别器会产生 0.5 的概率) 但是这张图片是不是真的,我完全没有头绪。因为显而易见的是,你在生成真实图片上做的太好了。

G:这是我生成的一张图片。我知道这已经是真实的了但是我想要更多,我应该如何调整来使它变的更真实?

D:让我想一下 (实际上大脑里在做反向传播) 我认为你的图片已经有了我认为需要有的部分。我看起来非常真实。显然你的图片包含眼睛,嘴巴,耳朵,头发,图片里是一张年轻男孩的脸。我不认为我有建议的东西。但是如果你想的话,可以把年轻男孩的胡须去掉。

(技术上来说,我认为你第 0 个像素灰度值增加 6,第 1 个像素灰度值减少 7,...,第 4095 个像素灰度值增加 2。)

G:收到 (反向传播那些梯度给所有的权重)

Cleverness

它们变的高级之后,生成器会生成真实的图片,辨别器不再能辨别生成的图片。

它们在无人监督的情况下也都能理解胡须,眼睛,嘴巴,头发,年轻的脸庞。

你已经达到了一种平衡。

如果你持续不断的教导生成器如何使照片更加真实,就会很可能过拟合,就像辨别器会认为一个小男孩根本就不应该有胡子一样。辨别器会产生这样的想法,但是这可能不对。就像你不应太过依赖老师的意见一样。继续训练也不会得到任何东西。

结论

两个网络并不是一直都在斗争,它们不得不协同合作以达到共同的目标。在整个训练过程中,辨别器不得不教导生成器如何在生成的数据上微做调整。同时它也一直都在学习如何做一个更好的老师。

它们共同变强,在理想状态下,会达到一种平衡。

训练收敛性问题

GAN的主要问题之一就是它的收敛性问题。即使优化了GAN的架构,也不能保证训练的稳定性。随着训练轮数的增多,并不能保证模型的效果越来越好,你不知道何时停止训练。也就是说损失函数和图像质量不相关。

gan's People

Stargazers

Z0ser avatar Lawliet avatar JeeShao avatar zx_llc001 avatar

Watchers

James Cloos avatar ywsun avatar paper2code - bot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.