引言
2016年3月,AlphaGO横空出世,击败人类顶尖职业棋手,引爆了人工智能热潮。之后AlphaGO Master和AlphaGO Zero更是无情的碾压人类棋手,人们终于认识到,人类迎来了可怕的对手。在这之前,人类还抱有一点幻想,某个英雄会应运而生,为人类而战,然而现实很残酷。人工智能最可怕的地方在于,其进步神速,在突破了一个瓶颈后,会引起裂变。
人工智能的出现,也普遍引发了人类的恐惧。比如著名的“钢铁侠”特斯拉创始人马斯克直言:“AI将是人类文明面临的最大风险”。而普通民众,则更担心人工智能会取代人,每年都会有“10大会被AI取代的工作以及10大不会被取代的工作”这样的话题。
在讨论人工智能无法取代的人类工作时,大家普遍认为具有创造性的工作将不会被人工智能所取代,比如作家、画家、艺术家。然而,真是这样的么?来看一组消息。
2016年3月22日,日本共同社报道了由人工智能创作的小说作品《机器人写小说的那一天》入围日本第三届“星新一文学奖”初审的消息。这一奖项是以被誉为“日本微型小说之父”的科幻作家星新一命名的。提交小说的是“任性的人工智能之我是作家”(以下简称“我是作家”)团队。该项目团队负责人是公立函馆未来大学教授松原仁。
来源:《中国计算机学会通讯》2017年第1期《专栏》
根据《Gigazine》报导,由于能使AI藉由GANs方式学习大量的图像,NVIDIA研究团队正在研发一款「名流风肖像」自动产生器。为了让在实验中所开发的生成器网络与判别器网络双方渐渐成长茁壮,设计成最初仅能生成低解析度的马赛克图像,随着训练进行,渐渐生成高解析度的图像。
来源:人工智能学习网
在综艺节目《机智过人》中,微软的聊天机器人小冰以一曲中国风歌曲《桃花梦》“险胜”人类对手。当歌手唱出“茫茫夜雨中,往事如风,耳边桃花笑春风,梦里你我相逢”这般古风浓郁的句子,很多观众以为这是人类所作。
来源:新华网
写诗、作曲、绘画,人工智能创作的春天悄然到来……
生成对抗网络(Generative Adversarial Networks,GAN)
近年来,人工智能的飞速发展,离不开深度神经网络,深度学习的核心思想就是不断的增加层级、增加模型的深度,在图像分类、语音和文本识别等监督学习领域得到了广泛的应用,但这些还谈不上具有创造性。
但是生成对抗网络(GAN)的出现,让事情发生了变化。GAN采用半监督学习的方式,自动从源数据中学习。从维基百科的词条学习专业知识,然后写出一个令普通人可以理解的科普文章,模仿知名画家的作品并学习他们的风格进行再创作,这种看似只有人类才会做的事情,人工智能现在真的可以做到了!
GAN在刚提出时并没有晦涩的数学推演,可以想象成造假币者与警察间展开的一场猫捉老鼠游戏,造假币者试图造出以假乱真的假币,警察试图发现这些假币,对抗使二者的水平都得到提高。
GAN契合了东方哲学中的太极图 - 万物在相生相克中演化。“太极生两仪”,“两仪”好比生成器和判别器,生成器负责生,判别器负责灭,一生一灭间有了万物。生成器在初始混沌中孕育有形万物,判别器甄别过滤有形万物,扮演一种末日审判的角色。
GAN的组成
GAN的主要框架如下图所示:
它包括生成器(Generator)和判别器(Discriminator)两个部分。其中,生成器以随机的噪声作为输入并试图生成样本数据。判别器以真实数据或者生成数据作为输入,并试图预测当前输入是真实数据还是生成数据。生成器和判别器是一对“冤家”,生成器尽可能造出样本迷惑判别器,而判别器则尽可能识别出来自生成器的样本。理想情况下,生成器和判别器最终能达到一种平衡,双方都趋于完美。
GAN的训练过程
具体训练时,采用生成器和判别器交替优化的方式。
- 在训练判别器时,先固定生成器G; 然后利用生成器随机模拟产生样本G(z)作为负样本,并从真实数据集中采样获得正样本X; 将这些正负样本输入到判别器D中,根据判别器的输出(即D(X)和D(G(Z)))和样本标签来计算损失; 最后根据反向传播算法来更新判别器D的参数。
- 在训练生成器时,先固定判别器D; 然后利用当前生成器G随机模拟产生样本G(z),并输入到判别器D中; 根据判别器的输出D(G(Z))和样本标签来计算损失,最后利用反向传播算法来更新生成器G的参数。
小结
仅从原理上看,GAN比较容易理解,实际上GAN还是有数学理论基础的,但没有一定数学基础的人,估计也很难理解。本着从工程的角度,我还是想探讨其实现以及在现实中的应用。
在后续的文章中,我将从一个最简单的生成手写数字开始,探索GAN的应用,预期将包含如下内容:
- 采用DCGAN(深度卷积生成对抗网络)优化手写数字的生成
- 使用SSGAN(半监督学习生成对抗网络)实现图像生产生成
- 利用CGAN(条件生成对抗网络)生成时尚衣柜
- 利用CycleGAN(循环一致生成网络)实现图像风格的转换
- 从文本构建逼真的图像
我的数学能力有限,因此主要以代码实例为主,不会过多深入理论,敬请关注。