生成对抗网络入门指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-01 05:47:33

点击下载

作者:史丹青

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

生成对抗网络入门指南

生成对抗网络入门指南试读:

前言

生成对抗网络(GAN)毫无疑问是当下热门的人工智能技术之一,被美国《麻省理工科技评论》评为2018年“全球十大突破性技术”。从2014年至今,与GAN有关的论文数量急速上升,网络上有人整理了近年来的GAN模型,截至2018年2月已经有超过350个不同形态的变种,并且数量仍然在持续增加中。在图像生成模型的质量上,生成对抗网络技术可以说实现了飞跃,很多衍生模型已经在一定程度上解决了特定场景中的图像生成问题。此外,诸如文本到图像的生成、图像到图像的生成等应用研究也让工业界与学术界都非常“兴奋”,为人工智能行业带来了非常多的可能性。

目前网络上关于生成对抗网络的介绍林林总总,越来越多的人对它的出现感到好奇,想知道计算机是如何通过博弈的方法来进行自我优化的。我也曾在知乎上写过一篇介绍性文章,但写完之后总觉得不够尽兴,希望有机会把这个领域相对完整的知识体系呈现在初学者面前,并帮助那些对人工智能技术感兴趣的朋友,让他们尽量少走一些弯路,更直观地了解这个前沿的新兴领域。

本书面向机器学习从业人员、高校相关专业学生以及具备一定基础的人工智能领域爱好者,书中包含了生成对抗网络的理论知识与项目实践。通过本书的学习,读者可理解生成对抗网络的技术原理,并通过书中的代码实例了解技术细节。本书尽量避免出现需要高性能计算设备才可以运行的项目,希望读者在感受到生成对抗网络的魅力之后,有机会在自己的设备上尝试运行一些项目。只有通过不断实践,才能真正理解生成对抗网络,并将其应用到自己的学习与工作中。本书主要内容

本书共10章。第1章为入门章节,介绍了人工智能领域目前的发展状况,以及生成对抗网络的基本概念及其在整个研究领域中的状况。由于第1章不涉及机器学习与深度学习的理论与实践细节,但在之后的生成对抗网络学习中会用到相关概念,因此希望读者自己补全这些基础知识。

第2章是编程基础章节,是对机器学习与深度学习编程语言、框架以及工具的介绍,涉及的内容包括Python语言及第三方工具、TensorFlow框架、Keras框架以及深度学习云平台Floyd。如果读者已经具备深度学习领域的编程基础,可以选择性地跳过本章部分内容。

第3章讨论生成对抗网络的整体理论框架,本书会按照基础概念、理论推导、可视化理解以及具体工程实践的顺序来带领大家认识GAN。最后的代码部分使用TensorFlow实现,由于不会涉及大量的运算,读者可以按照书中的示例直接在笔记本电脑上运行代码,以帮助加深对知识的理解。

第4章到第6章在原始GAN的基础上介绍各种不同结构,但都是具有标志性特点的GAN。正因为有这样的多样性,才使得该领域一直充满活力。

第4章介绍基于深度卷积神经网络的生成对抗网络(DCGAN),这是一种在图像生成领域非常流行的框架结构,由于对于卷积层的使用以及一些其他的优化,使得模型在图像生成的时候具有更高的质量。本书会使用Keras框架的代码来搭建面向手写数据集的DCGAN整体框架以及训练代码。在Keras的帮助下,我们可以比较简便地完成整个模型,这也是深度学习框架带来的便利。由于使用了卷积层,在笔记本电脑上运行可能需要花费一些时间,如果希望快速得出结果,读者可以使用第2章介绍的云平台进行云端的GPU运算。最终,这一章还会给出DCGAN的一些创新性应用,这也为之后GAN在多媒体领域的应用打下了基础。

第5章首先介绍了目前GAN结构存在的问题,并由这个问题出发提出了业界非常著名的模型WGAN。WGAN的理论推导看起来有些复杂,但是最终得出的优化方法却简单得令人吃惊。本章的实践部分是在DCGAN的Keras代码基础上进行修改的,最终读者会发现只需要几处代码调整就可以完成理论上更优的模型设计。这也从另一个侧面反映了理论研究的重要性,只有真正懂得事物背后的道理,才能给出优秀的方案。这一章最后会给出对于WGAN算法本身的改进——WGAN-GP,官方也给出了开源代码,WGAN-GP属于业界比较优秀的方案,大量的论文都拿它作为比较对象。

第6章涉及一些不同结构的GAN,将它们大致分为三个部分,包括监督式学习、半监督式学习与无监督式学习。在这一章中我们也可以看到GAN各种各样的可能性,比如在有标签的条件式生成对抗网络(cGAN)的帮助下,我们可以根据设定好的标签来进行具体分类图片的生成,而通过无标签生成的InfoGAN可以让隐含编码(latent code)中的每一维都具有实际意义,并通过调节输入的参数对生成内容进行定制。

第7章与第8章的核心思想建立在条件式GAN研究的基础上,但是方法和网络都做了进一步的改进。第7章为文本到图像的生成,用户只需输入一句话就可以得到想要的图像。而第8章则是用户根据自己提供的图像最终呈现出图像中的理想画面,其中涉及知名的算法Pix2Pix以及CycleGAN等。这些项目的源码大多是开源的,感兴趣的读者可以根据官网或书中提供的方法对这些模型应用进行试验。

上面的章节大多从理论出发,但是最终都会涉及具体的应用场景。第9章希望为读者更具体地介绍GAN的应用层面,从多媒体领域到艺术与设计领域,展示GAN在这些行业的发展中提供了怎样的帮助。由于GAN还是一项非常“年轻”的技术,因此也希望通过这一章的内容来启发读者,在实际工作与科研过程中进一步思考还有什么更好的应用场景,也许它会成为你使用人工智能技术改变的下一个行业。

第10章为收尾章节,希望能够为初次学习GAN或者对GAN技术有着浓厚兴趣的读者提供一些行业研究的热点方向。生成对抗网络是当下深度学习领域的研究热点,也是一项正在飞速发展的技术,考虑到内容的时效性,本书网站https://ganbook.org会持续更新科研方向与动态。致谢

首先要感谢学术界数不清的优秀科研人员耕耘在科学技术的前沿,正是他们产出的高质量研究成果以及论文推动着时代的发展,带来了这个全新的人工智能时代。本书也是站在巨人的肩膀上,大量参考了相关的文献材料,没有这些研究者就没有本书的诞生。也要感谢互联网上愿意分享的优秀技术博主和开发者,我从他们的分享中学到了太多太多。感谢开源平台GitHub聚集了数不清的开发者,开源精神让开发变得更加便捷,也让知识传播变得更加高效。

感谢机械工业出版社华章公司的朱捷先生对我的支持,在我写作的过程中提供了非常多的思路与帮助,正是他对我的认可和鼓励促使我完成本书。感谢蔚馨女士对本书的校对和编辑,并为本书提供了大量高质量的素材。此外也感谢所有为本书的出版付出努力的工作者。

最后感谢我的父母以及教导我的老师们,是他们的栽培成就了现在的我,在这里再一次感恩他们对我的付出。与我联系

读者可以通过知乎(https://www.zhihu.com/people/shidanqing)与我取得联系,很乐意收到你的私信,并与你进行相关技术的交流。另外我也会维护一个收集读者与专家建议及反馈的网站(https://ganbook.org),一些源码以及未来的技术更新会同步在这个网站上。敬请各位读者与行业专家对本书不足的地方予以批评和指正。  第1章 人工智能入门1.1 人工智能的历史与发展

2017年被称为“人工智能元年”,这一年,被称为“人类最后的希望”的围棋天才柯洁与AlphaGo的进阶版Master鏖战三轮,最终以总比分0∶3败于AlphaGo(见图1-1)。这是谷歌DeepMind团队的AlphaGo深度学习的第二次亮相。也是这一年,据PitchBook统计,全球人工智能和机器学习领域共获得风险投资超过108亿美元,而2010年才不足5亿美元。也是这一年,“得AI人才者得天下”,在美国,深度学习领域的人工智能博士生都已被Google、Facebook、亚马逊、微软、英特尔席卷一空,AI人才的起步年薪达到百万。一时间,仿佛身边的人都开始习惯性地讨论几句“人和机器谁更厉害”的话题。图1-1 柯洁惜败Master,泪洒现场

人工智能的热浪乘风而上,技术圈和投资界欢欣鼓舞,似乎一个可以媲美100年前的电力、20年前的互联网的机会正在到来(见图1-2)。但真正了解这个领域的学术圈却保持镇定,因为这个蛰伏了大半个世纪的复杂学科,早已经历了一次又一次的繁荣与低谷,2017年也许是新一轮的波峰。图1-2 2017年美国人工智能投资爆发

古希腊诗人荷马在公元前8世纪曾描述过“锻造之神”赫菲斯托[1]斯,《伊利亚特》史诗中写到他曾经设计并制作了一组金制的女机器人,这些机器人可以帮助他在铁匠铺做事,甚至能开口说话,并完成很多高难度工作。这可能是能够追溯到的最早的人工智能诞生的传说,人们开始想着不再仅仅把创造力放在静物上,而是有自我意识的个体,这是思维的突破,是最本质的变化。

稍微对人工智能有所了解的人都知道图灵(见图1-3)。艾伦·麦席森·图灵(Alan Mathison Turing),距离我们大半个世纪前的英国数学家,被称为“计算机科学之父”,又被称为“人工智能之父”。至今,图灵奖(A.M.Turing award)作为“计算机界的诺贝尔奖”,依旧是最负盛名、最崇高的奖项。“如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能。”这就是里程碑式的人工智能图灵测试。图1-3 图灵

其实在图灵测试提出前,其他学科上伟大的突围同样为人工智能学科的建立奠定了坚实的理论基础。人工智能简而言之是打造“人工大脑”,那么有三个问题需要解答。

·大脑是如何运转的?

·大脑的运行机制是否可以拆分成差异性极低的可衡量单元?

·是否有其他人工产物可以等价体现这一单元粒度的价值或功能?

其中,第二个问题由神经学家揭开谜团,第三个问题由信息学家给出答案,第一个问题至今仍在探索。

[1] https://baike.baidu.com/item/赫菲斯托斯/26047871.1.1 人工智能的诞生

1872年在意大利的阿比亚泰格拉索疗养院里,29岁的卡米洛·高尔基(Camillo Golgi)在一次意外中创建了铬酸盐-硝酸银染色法。在相隔1300公里的西班牙,一位同样年轻的神经学家圣地亚哥·拉蒙-卡哈尔(Santiago Ramón Y Cajal)借助这种技术,在1888年发表了单个神经细胞存在的证据,由此创建了神经元理论,被后世认为是现代[1]神经科学的起源。这两位在1906年获得了诺贝尔生理学或医学奖。

神经系统由神经元(见图1-4)这样的基本单位构成,其激励电平只存在“有”和“无”两种状态,不存在中间状态。神经元二元论的观察和电子信号的0和1之间竟有如此美妙的契合度,当然这个时候数字信号的二进制还没有提出。另一个观察是神经信号的传导大多是单向的,由树突到神经元细胞体再到轴突。基于简单的两个规律,神经网络的雏形已经跃然纸上,如果我们现在乘坐“时光机”回去,肯定会站在上帝视角疯狂吼叫:“结合起来!这就是神经网络!我们可以做人造大脑了!”但科学研究的步伐何其艰难,这临门一脚的突破蛰伏了50多年。图1-4 神经元

在50多年后的1940年,受神经学科奠基理论影响的42岁的沃伦·麦卡洛克(Warren McCulloch)和刚满18岁的“罗素信徒”沃尔特·皮茨(Walter Pitts)相遇,3年后他们提出将数学和算法结合,建立了神经网络和数学模型(见图1-5),模仿人类的思维活动,从此划开现代深度学习的序章。图1-5 神经元模型

至此,神经元作为可拆分的差异性极低的可衡量单元出现,并通过麦卡洛克和皮茨的努力,可以用数理化的方式进行描述。但存在于纸面算法的逻辑如何变成真正可执行的工程产物?克劳德·艾尔伍德·香农(Claude Elwood Shannon,信息论创始人)对继电器的全新解读登场了(见图1-6)。图1-6 香农利用继电器完成老鼠自助走迷宫实验

继电器是一种电子控制器件,通过电磁铁来吸引一块铁片,以控制线路的开关。如果电源没有接通,信息的流通量为0,如果电源接通,绝对理想情况下信息全部输送。香农在《继电器与开关电路的符号分析》中将逻辑代数的思想运用到了电路的设计上,用电子开关模拟布尔逻辑运算,解决了实际问题。

至此,“是否有其他人工产物可以等价体现这一单元粒度的价值或功能”这一问题也有了答案:继电器或者晶体管,或者任何能够输出0和1这两个信息符号的组件,都可以成为承载人工大脑信息传输的载体。

1943年,图灵拜访贝尔实验室,与香农共进午餐,讨论人造思维机器的设想,大有英雄所见略同之感。1950年,图灵提出一个关于判断机器是否能够思考的著名试验:“如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能。”

图灵测试至今也很少完整地应用于辨别人类和机器,原因很简单:机器还无法蒙混过关。但在一些影视作品里面可以看到完整的应用。1982年上映的《银翼杀手》被视为有史以来最佳科幻电影之一,里面有一段经典的测试,叫作维特甘测试(Voight-Kampff test)。为了区分人类和复制人,会进行类似于“图灵测试”的检验——被试者会被询问几十个不同的问题,检测机器会通过查看他们的眼球运动等生理活动判断是否符合人类的正常反应,或者通过观测他们的回答方式、身体动作和即时反应来区分是否是真实人类。大部分复制人[2]在这样的测试下很快就会露出马脚。感兴趣的读者可以去看看这部电影,见图1-7。图1-7 《银翼杀手》中的维特甘测试

1956年Dartmouth会议历经两个月的激烈讨论,提出“人工智能”这一名称,以及对应的学科任务。此会议也被称为人工智能正式诞生的一大标志。至此,人工智能作为一个令人痴迷的科学学科正式登上历史舞台。

[1] http://daixiaoyu.com/ai-3.html

[2] 巴塞君的文章,见知乎,https://zhuanlan.zhihu.com/p/305747321.1.2 人工智能的两起两落

从1956年开始,人工智能的研究进入全盛时代,至此开始的十年也称为“黄金十年”。这十年有很多成功的AI程序和新的研究方向出现,包括推理搜索的算法研究、自然语言处理、微世界研究等。AI学者构造出了一系列计算机程序。当时,人工智能研究者甚至认为:“二十年内,机器将能完成人能做到的一切工作”;“在三到八年的时[1]间里我们将得到一台具有人类平均智能的机器”。

然而好景不长,很快到了20世纪70年代,盛极一时的学术圈“宠儿”人工智能开始遭受如潮的质疑和批评。人们渐渐发现仅仅具有逻辑推理能力远远不能实现人工智能,许多难题并没有随着时间推移而被解决,很多AI系统一直停留在“玩具”阶段。1974~1980年是人工智能研究的第一个“寒冬”,研究者的理论方向漫无目的是因素之一,更大的原因在于当时落后的计算机运算能力和数据收集能力。当时上限48KB内存的第四代计算机只能允许用一个含二十个单词的词汇表来演示在自然语言方面的研究结果,计算机离智能的要求还差上百万倍。

很快,对AI提供资助的机构(如英国政府、DARPA和NRC)开始逐渐停止了资助,AI研究者也遭到了学术圈的冷遇。在此阶段,学者内部也对人工智能的研究本质产生了争执,并逐渐划分为认为人工智能应该是解题机器的简约派和坚持AI应具有与人类一样的非逻辑性联想能力的芜杂派(the scruffies)。

1980年,简约派的研究成果之一“专家系统”面市,这是人工智能的一个研究分支,它具有一种仿真决策能力。卡内基·梅隆大学为DEC(一家数字设备公司)设计并制造出一个专家系统,命名为XCON。DEC的VAX型计算机可以根据用户的需求组装不同的组件,有很多销售人员并不是技术专家,所以难免出现配件购买错误的问题。XCON支持自动选择组件,从1980年到1986年,每年为公司省下四千万美元。一直被称为研究玩具的人工智能因此扫除颓势,进而获得了1980年到1987年的第二个繁荣发展期。

许多公司纷纷效仿,开始研发和应用专家系统。知识工程作为专家系统的基础,也成为当时AI研究的热门方向。紧接着,日本提出第五代计算机计划,注入大量的人才和财力,旨在创造出能够与人交流、翻译各国语言、识别图像、具有一定推理逻辑能力的机器系统。也在同样的时期,David Rumelhart提出著名的反向传播算法(BP算法),解决了多层神经网络学习过程中遇到的诸多问题。由于这个算法的提出,神经网络开始作为主流算法广泛应用于机器学习的各大领域,比[2]如模式识别、预测和智能控制等。AI迎来了又一轮高潮。

然而泡沫的破灭就在顷刻之间,人工智能研究的第二个寒冬伴随[3]着个人消费电脑的快速崛起而到来。从1987年到1993年,短短6年时间,苹果和IBM在PC市场的发力为人们带来便捷计算工具的同时,却为高昂的Lisp电脑带来巨大的生存压力。而后者作为人工智能硬件的基础,它的破灭也阻挡了人工智能本身的发展。墙倒众人推,研发节奏的缓慢导致质疑声卷土重来,应用狭窄、知识系统建立困难、维护成本高昂等诟病压得研究人员喘不过气来。十年前日本提出的第五代计算机计划也宣布失败。AI遭遇了一系列财政问题,进入第二次低谷。

至此人工智能经历两起两落,从初见雏形至此已经经过了快60年,“二十年内,机器将能完成人能做到的一切工作”的豪言壮语并没有变成现实。然而中国有句古话叫“甲子一轮回”,跌跌撞撞的60年走来,人工智能在不断的起伏中艰难前行。柳暗花明,人工智能的下一个60年开始变得豁然开朗。

[1] https://sites.google.com/site/lessonofartificialintelligence/

[2] https://zhuanlan.zhihu.com/p/25774614

[3] http://intl.ce.cn/specials/zxgjzh/201610/31/t20161031_17368008.shtml1.1.3 新时代的人工智能

1965年,英特尔创始人之一戈登·摩尔(Gordon Moore)提出著名的摩尔定律——“当价格不变时,集成电路上可容纳的元器件的数目约每隔18~24个月便会增加一倍,性能也将提升一倍”。这一定律揭示了信息技术进步的速度。关于人工智能第一次低谷的原因,其中之一便是当时落后的计算机运算能力,但在1990年后,算力已不再是阻挡人工智能腾飞的障碍。20世纪90年代开始,计算机处理器的性能更新程度越来越快,伴随而至的人工智能也开始出现令人惊叹的成就,掀起新一轮高潮,直到今时今日。其中有四次著名的人机大战,从每一次比拼的变化中可以看到人工智能发展之迅猛让人瞠目结舌。

第一场:1997年,美国IBM公司的“深蓝”超级计算机挑战博弈树复杂度为10的123次方的国际象棋,以2胜1负3平战胜了当时世界排名第一的国际象棋大师卡斯帕罗夫,引起世界范围内的轰动(见图1-8)。相较于卡斯帕罗夫可以预判10步,“深蓝”依靠每秒可运算2亿步的强大的计算能力,穷举所有路数来选择最佳策略,高下立判。图1-8 “深蓝”大战卡斯帕罗夫

第二场:2006年,浪潮天梭挑战博弈树复杂度为10的123次方的中国象棋,在比赛中,同时迎战柳大华、张强、汪洋、徐天红、朴风波5位大师。比赛按照2局制的规则进行,反复博弈后,浪潮天梭最终凭借每步66万亿次的棋位分析与检索能力,发挥出平均每步棋27秒的速度,以11∶9的总比分取得胜利。从那场比赛开始,象棋软件蓬勃发展,人类棋手逐渐难以与之抗衡。

第三场:2011年,“深蓝”的同门师弟“沃森”在美国老牌智力[1]问答节目《危险边缘》中挑战两位人类冠军。比赛过程中,“沃森”展现出惊人的自然语言理解能力,不但能够准确识别题目内容,还能够分析线索的微妙含义,并理解讽刺反语等深层次的表达方式,再加上它3秒内检索数百万条信息的运算速度,最终轻松战胜两位人类冠军。

第四场:2016年,谷歌Deep Mind公司的深度学习AlphaGo挑战世界冠军韩国职业棋手李世石九段。这场比赛举世瞩目,博弈树复杂度为10的360次方的围棋一直被认为是人类最后的智力竞技高地。据估算,围棋的可能下法数量超越了可观测宇宙范围内的原子总数,显然1997年的“深蓝”式硬算在围棋上行不通。正因如此,人们长久以来一直认为只有人类擅长下围棋。但AlphaGo最终以4∶1战胜李世石(见图1-9)。更可怕的是,2016年到2017这个跨年夜,AlphaGo进阶版Master在某围棋网络对战平台上挑战中韩世界冠军,留下超过60盘连胜零负的成绩后绝尘而去,包括对当今世界围旗第一人柯洁连胜三局。图1-9 AlphaGo对战李世石

四场比赛,20年的时间,体现人类智慧的竞技游戏,已被人工智能彻底占领高地,甚至有人戏称李世石将是最后一个可以战胜AI的棋手。与此相伴的是,人工智能在多个领域的全面繁荣成长。

[1] http://www.xinhuanet.com/science/2016-07/09/c_135171112.htm1.2 机器学习与深度学习

2012年以后,随着信息爆炸带来的数据量猛增、计算机算力的高速提升和深度学习的出现以及运用,人工智能的研究领域不断扩展,迎来大爆发。除了传统的专家系统、机器学习等,进化计算、模糊逻辑、计算机视觉、自然语言处理、推荐系统也接二连三有了里程[1]碑式的成果,见图1-10。图1-10 人工智能的分支

机器学习属于人工智能的分支之一,且处于核心地位。顾名思义,机器学习的研究旨在让计算机学会学习,能够模拟人类的学习行为,建立学习能力,实现识别和判断。机器学习使用算法来解析海量数据,从中找出规律,并完成学习,用学习出来的思维模型对真实事件做出决策和预测。这种方式也被称为“训练”。深度学习是机器学习的一种实现技术,在2006年被Hinton等人首次提出。深度学习遵循仿生学,源自于神经元以及神经网络的研究,能够模仿人类神经网络传输和接[2]收信号的方式,进而达到学习人类的思维方式的目的。

简而言之,机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术,而本书的主角生成对抗网络则是深度学习中的一种分类。它们之间的关系可以通过图1-11清晰地表示。图1-11 人工智能、机器学习、深度学习与生成对抗网络四者的关系

[1] https://www.msra.cn/zh-cn/news/features/ai-hot-words-20171010

[2] https://blog.csdn.net/Michaelwubo/article/details/796252121.2.1 机器学习分类

在机器学习或者人工智能领域,有几种主要的学习方式,分为监督式学习、无监督式学习、强化学习。监督式学习主要用于回归和分类,无监督式学习主要用于聚类。[1]

监督式学习是从有标签训练集中学到或建立一个模式,并根据此模式推断新的实例。训练集是由输入数据(通常是向量)和预期输出标签所组成。当函数的输出是一个连续的值的时候称为回归分析,而当预测的内容是一个离散标签的时候,我们称它为分类。[2]

无监督式学习是另外一种比较常用的学习方法,与监督式学习不同的是,它没有准确的样本数据进行训练。举个例子,比如我们去看画展,如果我们对艺术一无所知,是很难直接区分出艺术品的流派的。但当我们浏览完所有的画作后,可以有一个大概的分类,哪怕不知道这些分类对应的准确的绘画风格是什么,但是却可以把观看过的两个作品归为一个类型。这就是无监督式学习的流程,即并不需要人力来输入标签,适用于聚类,把相似的东西聚在一起,而无所谓这一类到底是什么。[3]

强化学习是另外一种重要的机器学习方法,强调如何基于环境而行动,以取得最大化的预期利益。在这种模式下,输入的样本数据也会对模型进行反馈,不过不像监督式学习里面那样直接告诉正确的分类,强化学习的反馈仅仅检查模型的对错,模型会接收到类似于奖励或者惩罚的刺激后,逐步做出调整。相比于监督式学习,强化学习更加专注于规划,需要在探索未知领域和遵从现有知识之间找到一个合理的平衡点。监督式学习、无监督式学习和强化学习的区别见图1-12。图1-12 监督学习、无监督学习和强化学习的区别

[1] https://zh.wikipedia.org/wiki/监督式学习

[2] https://zh.wikipedia.org/wiki/非监督式学习

[3] https://zh.wikipedia.org/wiki/强化学习1.2.2 神经网络与深度学习

神经网络是一种实现机器学习的技术,旨在模拟人脑神经网络的运作机制。1943年,抽象的神经元模型被首次提出。1949年心理学家Hebb提出了“学习率”这一概念,即信息在人脑神经细胞的突触上传递时,强度是可以变化的。于是研究人员们开始用调整权值的方法进化机器学习算法。1958年,计算科学家Rosenblatt提出了由两层神经元组成的单层神经网络,可以完成线性分类任务。

1986年,BP算法的提出解决了两层神经网络所需要的复杂计算量问题,这个算法在两层神经网络(输入层和输出层)中增加了一个中间层。但尽管使用了BP算法,一次神经网络的训练仍然耗时太久,局部最优解问题作为困扰训练优化的一大问题使得神经网络的优化较为困难。

2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了“深度学习”的概念,并增加了两个优化技术——“预训练”(pre-training)和“微调”(fine-tuning)。这两个技术的运用可以让神经网络的权值找到一个接近最优解的值,并使得对整个网络进行优[1]化训练的学习时间大幅度减少。

深度学习实际上指的是深度神经网络学习,普通神经网络由于训练代价较高,一般只有3~4层,而深度神经网络由于采用了特殊的训练方法加上一些技术算法,可以达到8~10层。深度神经网络能够捕捉到数据中的深层联系,从而能够得到更精准的模型,而这些联系不容易被普通的机器学习方法所发觉。见图1-13。图1-13 从单层、两层到多层神经网络

[1] 计算机的潜意识,https://www.cnblogs.com/subconscious/p/5058741.html1.2.3 深度学习的应用

目前,深度学习神经网络(见图1-14)在人工智能界占据统治地位,但凡有关人工智能的产业报道必然离不开深度学习。深度学习的引入也确实让使用传统机器学习方法的各个领域都取得了突破性进展。图1-14 深度学习神经网络

2000年开始,人们开始用机器学习解决计算机视觉问题,可以很好地实现车牌识别、安防、人脸识别等技术。在深度学习出现以前,大多数识别任务要经过手工特征提取和分类器判断两个基本步骤,而深度学习可以自动地从训练样本中学习特征。深度学习扩大了其应用场景,如无人车、电商等领域。Mobileye及NVIDIA公司把基于深度卷积神经网络的方法用于汽车的视觉系统中,率先将深度学习应用于无人驾驶领域,为无人驾驶提供了硬件基础。2018年2月2日,谷歌宣布将于2018年启动无人驾驶出租车服务,无人驾驶首次开启商业运营(见图1-15)。除此之外,通用、特斯拉、百度、Uber、苹果等公[1]司也进入无人驾驶赛道。图1-15 Google无人驾驶车

在语音技术上,2010年后深度学习的广泛应用使语音识别的准确率大幅提升,成熟产品如苹果的Siri、亚马逊的Echo(见图1-16)等,可以很轻松地识别出用户说出的一段话,并可以协助完成一些任务,比如开关应用、搜索甚至帮助预定晚餐座位。与图像相比,语音的识别更加复杂,不同语言有不同口音,甚至充满暗喻,对机器的理[2]解能力提出很高的要求。图1-16 亚马逊智能音箱Echo

在自然语言处理上,目前取得最大突破的成熟产品就是机器翻译。Google的翻译系统可以理解原文的连贯语义,给出完整的翻译结果,这是人工智能的一个标杆性事件。2016年,谷歌翻译升级为谷歌神经网络翻译系统(Google neural machine translation),谷歌的翻译系统又一次完成了与人工智能的联合提升。

[1] http://www.sohu.com/a/226424941_465591

[2] https://blog.csdn.net/qq_41020134/article/details/806128721.3 了解生成对抗网络1.3.1 从机器感知到机器创造

机器学习与深度学习在过去几年取得了重大的突破,尤其是深度学习的发展让计算机具备了非常强大的感知能力,计算机可以感知物体、识别内容,甚至理解人们说的话。从机器学习到深度学习的不断发展过程中,机器一直在不停模仿人类的思维方式,希望能像人一样思考。但仅仅具备感知能力似乎是不够的,人类思维能力的迷人之处更在于它的创造能力,我们希望计算机能够自己写诗、谱曲、作画、创作艺术作品等。

越来越多的研究者将自己的研究方向从机器感知转向了机器创造,希望通过生成技术能够让计算机具备生成新事物的能力。在生成技术的研究中,本书的主角“生成对抗网络”应运而生,它不仅打破了人们对传统生成模型的理解,同时也具备了非常令人满意的效果。[1]

要了解生成对抗网络,不得不首先认识一下“生成对抗网络之父”Ian Goodfellow(见图1-17,以下简称Ian)。Ian本科与研究生在斯坦福大学计算机科学专业就读,博士时期在蒙特利尔大学研究机器学习,师承深度学习的顶级大师Yoshua Benjo(业界公认他与Geoffrey Hinton、Yann LeCun并列为深度学习领域的“三驾马车”),而生成对抗网络正是Ian在蒙特利尔大学博士期间提出的想法。Ian在毕业后先后在Google和OpenAI进行深度学习相关的研究,在此期间对GAN的持续发展做出了非常大的贡献。图1-17 GAN发明者:Ian Goodfellow

Ian发明生成对抗网络是出于一个偶然的灵感,当时他正在蒙特利尔大学和其他博士一起进行生成模型的研究,他们想通过该生成模型让计算机自动生成照片。当时他们的想法还是希望使用传统的神经网络方法,希望通过模拟人的大脑思考方式来进行图片的生成。但是事实是生成的图像质量始终不理想,出现了图片模糊的情况,如果需要继续对现在的模型进行优化,需要大量的训练数据集,而且最终的可行性也是不得而知。

当时的Ian对使用传统神经网络的方式本身产生了怀疑,他认为也许这并非最理想的解决方案。一天晚上,他突然想到一种全新的思路,如果不是只用一个神经网络,而是同时使用两个神经网络会不会有更好的效果呢?

这一想法为他打开了一种全新的思路,在Ian的构思中两个神经网络并非是合作关系而是一种博弈与对抗的关系(见图1-18),这也就是生成对抗网络最初的思想。就如同人类自身在发展过程中经历的那样,只有在与同类的竞争环境下对于某项技能的学习才会更加快速,比如各类比赛尤其是体育类竞赛,每年的成绩都在不断逼近人类极限,这其中有很大一部分原因在于比赛选手之间的比拼与较劲。图1-18 图片来自《麻省理工科技评论》的2018十大技术突破

如果从仿生学的角度来看,在生物的发展过程中也有着类似的状态,在与其他物种尤其是天敌的对抗中自身会不断进化,从而向着一个更完善的状态转变。这一理论是由进化生物学家Leigh Van Valen在1973年的时候总结提出的,称为“红皇后假说”,是一种关于生物协同进化的假说,物种间为了争夺有限的资源,不得不持续优化自身以对抗自身种族的捕食者与竞争者。同样地,对于该物种的捕食者与竞争者来说,也同样需要不断进化来获取相应的资源。

Ian Goodfellow是一个非常果敢的执行派,同时也是一个代码高手,在基础理论大致清晰了之后他立刻就开始了实践,并且在最初的几次实践过程中,这种对抗的思想就在实验数据的图像生成上取得了非常理想的效果。

生成对抗网络这种全新的技术在生成方向上带给了人工智能领域全新的突破。在之后的几年中生成对抗网络成为深度学习领域中的研究热点,近几年与GAN有关的论文数量也急速上升(见图1-19),网络上有人整理了近年来的GAN模型,截至2018年2月份已经有了350[1]多个,数量仍然在持续增加中。图1-19 GAN论文数量趋势图“深度学习三驾马车”的另外一位顶级专家Yann LeCun(纽约大学教授,前Facebook首席人工智能科学家)称赞生成对抗网络是“过去20年中深度学习领域最酷的思想”,而在国内被大家熟知的前百度首席科学家Andrew Ng也把生成对抗网络看作“深度学习领域中一项非常重大的进步”。在机器学习顶级会议NIPS2016上,为Ian Goodfellow专门开设了关于GAN的教程演讲(见图1-20)。在2018年,这一对抗式神经网络的思想被《麻省理工科技评论》评选为2018年“全球十大突破性技术”(10 Breakthrough Technologies)之一。图1-20 Ian在NIPS2016的分享

[1] https://deephunt.in/the-gan-zoo-79597dc8c3471.3.2 什么是生成对抗网络

让我们先用一个小例子来认识一下生成对抗网络。首先我们来认识一下生成对抗网络的双方——生成器与判别器,在训练过程中两者的配合非常重要。我们可以把生成器想象成一个古董赝品制作者(虽然比喻可能并不太合适),他的成长过程是从一个零基础的“小白”慢慢成长为一个“仿制品艺术家”。而判别器则担任的是一个古董鉴别专家的角色,当然一开始也许他也仅仅是一个普通等级的鉴别师,在与赝品制作者的博弈中逐渐成长为一个技术超群的鉴别专家(见图1-21)。图1-21 生成对抗网络:创作者与鉴别师

生成对抗网络的内部比赛现在就开始了。让我们来看一下最初的情况是怎样的:赝品制作者还是一个什么都不懂的“小白”,也不懂得真实的古董到底应该是什么样子,完全凭借自己的心意随意制作产品。

面对如此简单可分辨的仿制品,虽然自身功力也不深,但是此时的初级鉴别者却还是能够一眼就能分辨孰真孰假。在分辨完成的同时,鉴别者会将自己的判断结果写成报告:比如做工不精细、颜色不协调等。

最初的第一次对抗就这么完成了,似乎离我们期待的目标还非常远,但是没关系,这才刚刚开始。现在进入第二阶段,仿造者通过一些渠道,拿到了鉴别者的判断报告,他认真研读了里面的每一条信息,根据这些信息重新制作赝品,虽然他依然不知道真实古董到底是什么样子,但他希望能够通过这份报告的信息来“骗过”鉴别者。

这一次创作的赝品比起之前的来说确实要成熟不少。到了鉴别者这边,当他再次拿到赝品和真品时,要重新判断作品的真假,这一次他也发现了赝品制造者的能力有所提升了,为了区分真假作品,他需要花时间去寻找一些更深入的区别点。当然,在一番努力过后,鉴别师顺利完成了任务,同时他也如第一次一样,将他区分真假的理由写成报告(之后依然会流出到赝品制造者手里)。第二次对抗到这里也完成了。

当然对抗远远没有结束,如同上述的故事一直持续了很多很多次……

在经历了N次的互相博弈以后,两者在整个训练过程中都变得非常强,其中的造假者一方几乎能制作出以假乱真的作品,而鉴别者一方也早已是“火眼金睛”的鉴别专家了。最后一次博弈是这样的:赝品制作者已经完全摸透了鉴别师的心理,虽然他还是没有见过真的古董是什么样子,但是对古董应该具备什么样的特性已经十拿九稳,对于鉴别师可能的分辨过程也全都了然于心。对于如此以假乱真的赝品,虽然鉴别者拥有“火眼金睛”,但已然是无能为力了,他可以做的只能是凭运气猜测是真是假,而无法用确定的理由进行判断。

这也就是生成对抗网络最终的目的,而我们所需要的就是培养出这个能够以假乱真的生成器。在之后的第3章开始,本书会详细介绍生成对抗网络的技术细节。1.4 本章小结

本章为入门章节,介绍了人工智能领域目前的发展状况,以及生成对抗网络的基本概念和它在整个研究领域中的状况。本章介绍了机器学习与深度学习的发展过程,但不会涉及机器学习与深度学习的理论与实践相关知识。生成对抗网络是深度学习的一个分支领域,在之后的该领域学习中,会默认用到机器学习与深度学习中的概念,希望读者可以有机会自己补全这些基础知识。在后面的学习过程中,我们会慢慢认识到生成对抗网络的价值,尤其是大量在图像生成方向的贡献,让我们一步一步慢慢体会它的魅力所在。  第2章 预备知识与开发工具

本书后续内容中涉及的项目和示例大多是基于本章提到的工具完成的,对这些编程语言或者框架已经非常熟悉的读者可以直接跳过,但如果你是第一次接触深度学习,那么请跟随本章的入门介绍为后续内容打好基础。2.1 Python语言与开发框架2.1.1 Python语言

Python是一门在科学与工程领域都非常流行的高级编程语言,属于解释性编程语言,在可读性和易用性方面优势非常明显。在数据科学和机器学习技术发展的推动下,Python已经当之无愧地变成了目前最流行的编程语言之一。

Python的第一个版本由荷兰程序员Guido van Rossum(见图2-1)在1991年发布,他对于Python语言的设计宗旨是“优雅、明确、简单”。Guido van Rossum毕业于阿姆斯特丹大学,2005年至2012年于谷歌公司担任软件工程师,2012年之后加入了Dropbox担任首席工程师。同时,他一直在维护Python项目。图2-1 Python发明人:Guido van Rossum[1]

在官网上可以下载最新版的Python。目前Python分为两个大版本,分别为Python 2和Python 3。前者为历史版本,在2010年更新至2.7之后就宣布不再更新了;后者为新版本,仍在持续维护中。目前这两个版本都被广泛使用,读者在使用互联网上的开源项目时务必看清项目使用的Python版本号。

如果Python已经成功安装完毕,可以直接在终端命令行中输入“python”来打开交互解释器,如图2-2所示。图2-2 Python交互解释器

此时可以直接在交互解释器中输入Python代码执行命令。如果尝试输入“import this”,可以看到Python的设计之道,如图2-3所示。图2-3 隐藏的Python设计之道

[1] https://www.python.org2.1.2 常用工具简介pip

Python的开发者社区非常活跃,开源项目的开发者会将他们研发的框架和代码库开源出来供其他人使用。pip工具是Python官方推荐的第三方Python包安装工具,它的使用非常便捷,仅需几行命令即可管理你的所有第三方库。

如果你的Python版本在2.7或是3.4以上的话,已经自带了pip可以直接使用。如果你不小心删除了工具包,或者发生其他意外情况的话,可以按照下面的步骤重新安装。

首先使用curl下载官方的get-pip.py文件。$ curl https://bootstrap.pypa.io/get-pip.py-o get-pip.py

接着直接运行get-pip.py文件,即可完成安装。$ python get-pip.py

当需要更新pip时,只需运行下面的命令进行升级。$ pip install-U pip

我们可以使用关键词来搜索需要的第三方库。$ pip search"query"

使用pip安装第三方库非常简单,只需使用install命令,可以根据自己的需要添加相应的版本号信息。下面三条命令分别为安装最新版本号、安装固定版本号与安装最小版本号。$ pip install SomePackage$ pip install SomePackage==1.0.4$ pip install SomePackage>=1.0.4

有些情况下可能希望直接从源代码进行安装。下面的命令是从GitHub上的源码进行pip安装。$ pip install https://github.com/user/repo.git@sometag

如果需要批量安装几种库,可以直接将这些库的名字写在一个requirements.txt文件里,然后统一进行安装。$ pip install-r requirements.txt

卸载第三方库时使用pip也是非常简单的。$ pip uninstall SomePackage

使用list命令可以列出当前环境下的所有第三方库。$ pip list

如需列出所有需要更新的库,可以加上“--outdated”。$ pip list--outdatedVirtualenv

Virtualenv是一个Python虚拟环境工具,它可以为你建立独立的虚拟化Python运行环境。当你的电脑上包含不止一个Python项目的时候,可能每一个项目所依赖的库是不同的,甚至有些项目使用了相同的库但是却要求不一样的版本。这个时候建立独立的虚拟环境就变得非常重要。

Virtualenv让Python虚拟环境的搭建变得非常简便,在实际开发中一定会用到,我的习惯是对每个项目都建立一个独立的环境,确保每个项目的第三方库之间不存在依赖关系。

可以通过pip来安装Virtualenv。$ pip install virtualenv

如果希望直接安装最新的开发者版本,可以选择源码安装。$ pip install https://github.com/pypa/virtualenv/tarball/master

在你的项目文件夹中,通过以下命令可以创建名为ENV的虚拟环境。$ virtualenv ENV

安装完毕后,你并没有进入该虚拟环境,需要使用下面的命令激活环境。$ source ENV/bin/activate

此时,你已经进入新创建的Python虚拟环境,可以按照自己项目的需要进行环境的配置或安装第三方依赖包等。如需退出该环境,仅需运行反激活命令即可。$ deactivateJupyter Notebook

Jupyter Notebook是一个交互式编程的笔记本,用户可以很快地基于它来进行代码的调试,并快速得到反馈。

官方推荐使用Python 3的pip进行安装。$ pip3 install--upgrade pip$ pip3 install jupyter

安装完成后可以在你的文件夹中使用jupyter命令开启交互式编程笔记本。$ jupyter notebook

开启后程序会自动跳转至浏览器,界面如图2-4所示。图2-4 Jupyter Notebook:浏览器界面

点击右侧的New,选中Python 3,可以在当前目录新建一个笔记本(见图2-5)。图2-5 Jupyter Notebook:创建新笔记

建立后的笔记本如图2-6所示,界面分为菜单栏、工具栏和编辑栏。可以在编辑栏的单元格里编辑代码,按“Shift+回车”可以执行程序。图2-6 Jupyter Notebook:界面组件2.1.3 第三方框架简介

Python包含了大量实用的第三方框架,下面我们列举几个在数据处理和机器学习中常用的Python框架。NumPy

NumPy是一个在科学计算领域非常流行的第三方库,对于数组运算、向量运算以及矩阵运算的支持非常好,底层代码由C语言完成,所以执行效率非常高。Pandas

Pandas是基于NumPy的数据分析框架,内部包含了很多标准化的数据结构以及处理方法,是为了“高效进行数据分析”而生的一种工具。Matplotlib与Seaborn

Python有很多实用的第三方可视化工具,比如Matplotlib、Seaborn、Bokeh等。Matplotlib是一个非常流行的2D图像绘制框架,可以满足机器学习中大部分数据可视化的需求,可以被用于Python脚本、Jupyter Notebook甚至是Web端的应用。而Seaborn是一款基于Matplotlib的高级可视化框架,是用于数据统计分析以及探索的可视化工具,支持NumPy与Pandas的高级数据结构,见图2-7。图2-7 Seaborn的展示效果图Scikit-Learn

Scikit-Learn是一款在学术领域非常流行的机器学习开源框架,对于常用的分类、回归、聚类等机器学习算法均提供了非常简便的高级API,以供用户使用,简单的几步就可以完成大部分机器学习模型的训练和测试。之后要介绍的TensorFlow框架虽然也包含了大部分Scikit-Learn的机器学习功能,但更偏向于深度学习的研究,如果只是做一些机器学习的应用,Scikit-Learn是更便捷的选择。2.2 TensorFlow基础入门2.2.1 TensorFlow简介与安装

TensorFlow(见图2-8)是目前行业中最著名的机器学习框架之一,由谷歌大脑团队研发并在2015年开源,开发团队具备很强的机器学习能力,项目一直处于稳定的更新中。TensorFlow的开发者社区也非常活跃,目前网络上大量的机器学习开源项目均是由TensorFlow开发完成的,大量的企业也开始把TensorFlow作为标准化的机器学习工具。图2-8 TensorFlow Logo

在硬件层面上,谷歌在2016年推出了专门面向TensorFlow深度学习的专用处理芯片TPU(见图2-9)。相比于传统的图像处理器GPU,TPU的功耗更低、速度更快。著名的围棋软件AlphaGo也采用了TPU,目前TPU已经整合在谷歌云上,可供用户使用。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载