20. ⽣成对抗⽹络 GANS 的基本原理

⼤⽩话版本

知乎上有⼀个很不错的解释,⼤家应该都能理解:

假设⼀个城市治安混乱,很快,这个城市⾥就会出现⽆数的⼩偷。在这些⼩偷中,有的可能是盗窃⾼⼿,有的可能毫⽆技术可⾔。假如这个城市开始整饬其治安,突然开展⼀场打击犯罪的「运动」,警察们开始恢复城市中的巡逻,很快,⼀批「学艺不精」的⼩偷就被捉住了。之所以捉住的是那些没有技术含量的⼩偷,是因为警察们的技术也不⾏了,在捉住⼀批低端⼩偷后,城市的治安⽔平变得怎样倒还不好说,但很明显,城市⾥⼩偷们的平均⽔平已经⼤⼤提⾼了。

警察们开始继续训练⾃⼰的破案技术,开始抓住那些越来越狡猾的⼩偷。随着这些职业惯犯们的落⽹,警察们也练就了特别的本事,他们能很快能从⼀群⼈中发现可疑⼈员,于是上前盘查,并最终逮捕嫌犯;⼩偷们的⽇⼦也不好过了,因为警察们的⽔平⼤⼤提⾼,如果还想以前那样表现得⻤⻤祟祟,那么很快就会被警察捉住。

为了避免被捕,⼩偷们努⼒表现得不那么「可疑」,⽽魔⾼⼀尺、道⾼⼀丈,警察也在不断提⾼⾃⼰的⽔平,争取将⼩偷和⽆辜的普通群众区分开。随着警察和⼩偷之间的这种「交流」与「切磋」,⼩偷们都变得⾮常谨慎,他们有着极⾼的偷窃技巧,表现得跟普通群众⼀模⼀样,⽽警察们都练就了「⽕眼⾦睛」,⼀旦发现可疑⼈员,就能⻢上发现并及时控制——最终,我们同时得到了最强的⼩偷和最强的警察。

⾮⼤⽩话版本

⽣成对抗⽹络(GANs)由2个重要的部分构成:

  1. ⽣成器(Generator):通过机器⽣成数据(⼤部分情况下是图像),⽬的是“骗过”判别器
  2. 判别器(Discriminator):判断这张图像是真实的还是机器⽣成的,⽬的是找出⽣成器做的“假数据”

下⾯详细介绍⼀下过程:

  • 第⼀阶段:固定「判别器D」,训练「⽣成器G」
    • 我们使⽤⼀个还 OK 判别器,让⼀个「⽣成器G」不断⽣成“假数据”,然后给这个「判别器D」去判断。
    • ⼀开始,「⽣成器G」还很弱,所以很容易被揪出来。
    • 但是随着不断的训练,「⽣成器G」技能不断提升,最终骗过了「判别器D」。
    • 到了这个时候,「判别器D」基本属于瞎猜的状态,判断是否为假数据的概率为50%。
  • 第⼆阶段:固定「⽣成器G」,训练「判别器D」
    • 当通过了第⼀阶段,继续训练「⽣成器G」就没有意义了。这个时候我们固定「⽣成器G」,然后开始训练「判别器D」。
    • 「判别器D」通过不断训练,提⾼了⾃⼰的鉴别能⼒,最终他可以准确的判断出所有的假图⽚
    • 到了这个时候,「⽣成器G」已经⽆法骗过「判别器D」。
  • 循环阶段⼀和阶段⼆
    • 通过不断的循环,「⽣成器G」和「判别器D」的能⼒都越来越强。最终我们得到了⼀个效果⾮常好的「⽣成器G」,我们就可以⽤它来⽣成我们想要的图⽚了。
    • 下⾯的实际应⽤部分会展示很多“惊艳”的案例。