序一
在最近的几年里,深度学习无疑是一个发展最快的机器学习子领域。在许多机器学习竞赛中,最后胜出的系统或多或少都使用了深度学习技术。2016年,基于深度学习、强化学习和蒙特卡洛树搜索的围棋程序AlphaGo甚至战胜了人类冠军。人工智能的这一胜利比预想的要早了10年,而其中起关键作用的就是深度学习。
深度学习已经广泛应用于我们的生活中,比如市场上可以见到的语音转写、智能音箱、语言翻译、图像识别和图像艺术化系统等,其中深度学习都是关键技术。同时,由于学术界和工业界的大量投入,深度学习的新模型和新算法层出不穷,要充分掌握深度学习的各种模型和算法并实现它们无疑是一件困难的事情。
幸运的是,基于各行各业对深度学习技术的需求,许多公司和学校开源了深度学习工具包,其中大家比较熟悉的有CNTK、TensorFlow、Theano、Caffe、mxNet和Torch。这些工具包都提供了非常灵活而强大的建模能力,极大地降低了使用深度学习技术的门槛,进一步加速了深度学习技术的研究和应用。但是,这些工具包各有所长、接口不同,而且对于很多初学者这些工具包过于灵活,难以掌握。
由于这些原因,Keras应运而生。Keras可以被看作一个更易于使用、在更高层次上进行抽象、兼具兼容性和灵活性的深度学习框架,它的底层可以在CNTK、TensorFlow和Theano中自由切换。Keras的出现使很多初学者可以很快地体验深度学习的一些基本技术和模型,并且将这些技术和模型应用到实际问题中。
本书也正是在这样的背景下产生的。它的目标读者正是那些刚刚进入深度学习领域、还没有太多经验的学生和工程师。本书的作者谢梁、鲁颖和劳虹岚分别在微软和谷歌这样的走在深度学习前沿的公司里做大数据和深度学习技术的研发,积累了很多把商业和工程问题转化成合适的模型并分析模型好坏以及解释模型结果的经验。在这本书里,他们把这些经验传授给大家,使更多的人能够快速掌握深度学习,并有效应用到商业和工程实践中。
这本书比较系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列的具体应用作为案例,详细介绍了从工具准备、数据获取和处理到针对问题进行建模的整个过程和实践经验,是一本非常好的深度学习入门书。
俞栋博士
腾讯AILab副主任,杰出科学家
西雅图人工智能研究室负责人
2017年6月22日于美国西雅图
序二
随着大数据的普及以及硬件计算能力的飞速提升,深度学习在过去的5~6年有了日新月异的发展。在一个又一个领域,深度学习展示了极其强大甚至连人类都难以企及的能力,这包括语音识别、机器翻译、自然语言识别、推荐系统、人脸识别、图像识别、目标检测、三维重建、情感分析、棋类运动、德州扑克、自动驾驶等。伴随着人工智能广阔的应用前景,科技巨擎诸如谷歌、微软、亚马逊、百度、腾讯、阿里巴巴等纷纷投入巨资,从而进一步推动了这个领域的进步。如今,已经很少有人还对人工智能能达到的高度有任何怀疑态度,取而代之的是对人类如何与机器共存的畅想和机器终有一天取代人类的担忧。
当然,如果我们现在就开始担心机器将毁灭人类,那么还是有一些杞人忧天。深度学习现在还只停留在感知(Perception)的阶段,即从原始数据进行简单的感觉和分析,但是远没有达到认知(Cognition)的阶段,即对事件进行逻辑推理和认识。深度学习的很多原理,还处在研究阶段。即使是各领域的专家,对于深度学习为什么如此有效,依然是一知半解。幸运的是,在解决很多实际问题时,其实并不需要我们那么深刻理解它。谢梁、鲁颖和劳红岚的这本书,就是从非常实用的角度来分享深度学习的一些基本知识,值得一读。
这本书从如何准备深度学习的环境开始,手把手地教读者如何采集数据,如何运用一些最常用,也是目前为止被认为最有效的一些深度学习算法来解决实际问题。覆盖的领域包括推荐系统、图像识别、自然语言情感分析、文字生成、时间序列、智能物联网等。不同于许多同类的书籍,这本书选择了Keras作为编程软件,强调简单、快速的模型设计,而不去纠缠底层代码,使得内容相当易于理解。读者可以在CNTK、TensorFlow和Theano的后台之间随意切换,非常灵活。即使你有朝一日需要用更低层的建模环境来解决更复杂的问题,相信也会保留从Keras中学来的高度抽象的角度审视你要解决的问题,让你事半功倍。
这一波深度学习的大潮,必将带来一个新的信息革命。每一次如此巨大的变革,都将淘汰很多效率低下的工作,并发展出新兴的职业。在一个如此激动人心的年代,愿这本书带着读者启航!
张察博士
CNTK主要作者之一,美国微软总部首席研究员
2017年6月于美国西雅图
前言
2006年,机器学习领域迎来了重要的转折点。加拿大多伦多大学教授、机器学习领域泰斗GeoffreyHinton和他的学生RuslanSalakhutdinov在《科学》上发表了一篇关于深度置信网络(DeepBeliefNetworks)的论文。从这篇论文的发表开始至今,深度学习有着迅猛的发展。2009年,微软研究院语音识别专家俞栋和邓力博士与深度学习专家GeofferyHinton合作。2010年,美国国防部DARPA和斯坦福大学、纽约大学和NEC美国研究院合作深度学习项目。2011年微软宣布基于深度神经网络的识别系统取得成果并推出产品,彻底改变了语音识别原有的技术框架。从2012到2015年,深度学习技术在图像识别领域取得惊人的效果,在ImageNet评测上将错误率从26%一路降到5%以下,几乎接近甚至超过人类的水平。这些都直接促进了一系列围绕深度学习技术的智能产品在市场上的出现,比如微软的认知服务(CognitiveServices)平台,谷歌的智能邮件应答和谷歌助手等。
在中国,我们同样欣喜地看到,基于大数据的机器学习和深度学习算法的大规模应用给互联网行业带来的巨大变革:淘宝的推荐算法、微软的小冰聊天机器人、百度的度秘、滴滴的预估时间和车费、饿了么的智能调度等都应运而生。我们有理由相信,未来的物联网、无人驾驶等也会挖掘出更多深度学习的实用场景。
深度学习对很多科技行业的从业者来说仍有一些神秘感。虽然像谷歌、微软等互联网巨头开源了诸如TensorFlow、CNTK等深度学习平台,大幅降低了从业者的门槛,但是如何举一反三,根据实际问题选择合适的算法和模型,并不容易。作为本书的作者,我们三位在美国谷歌、微软等顶尖互联网科技公司从事多年以机器学习和深度学习为基础的人工智能项目研发,有着丰富的实践经验,深感有必要撰写一本深入浅出的深度学习书籍,分享我们对深度学习的理解和想法,并帮助同行和感兴趣的朋友们快速上手,建立属于自己的端到端的深度学习模型,从而在大数据、深度学习的浪潮中有着更好的职业发展。我们希望本书能起到抛砖引玉的作用,使读者对深度学习产生更多的兴趣,并把深度学习作为一个必备的分析技能。
在本书中,我们选择Keras这个流行的深度学习建模框架来讲解深度学习话题。这主要从三方面的考虑。首先,Keras包括了各种常用的深度学习模块,可以应用于绝大部分业务环境。其次,从原理上讲,它是高度抽象的深度学习编程环境,简单易学。Keras底层是调用CNTK、TensorFlow或Theano执行计算的。最后,作为应用领域的从业者,我们需要关注的是如何把一个商业或者工程问题转化成合适的模型,如何准备数据和分析模型的好坏以及如何解释模型的结果。Keras非常适合这样的场景,让使用者脱离具体的矩阵计算和求导,而将重心转移到业务逻辑上。
本书是目前国内不多的系统讲解使用Keras这个深度学习框架进行神经网络建模的实用书籍,非常适合数据科学家、机器学习工程师、人工智能应用工程师和工作中需要进行预测建模以及进行回归分析的从业者。本书也适合对深度学习有兴趣的不同背景的从业者、学生和老师。
本书分成10章,系统性地讲解深度学习基本知识、使用Keras建模过程和应用,并提供详细代码,使读者可以花最少的时间把核心建模知识学到手。其中第1章介绍搭建深度学习环境,是整本书的基础。第2章介绍如何用网络爬虫技术收集数据并使用ElasticSearch存储数据。因为在很多应用中,数据需要读者自行从网上爬取和并加以处理和存储。第3章介绍深度学习模型的基本概念。第4章介绍深度学习框架Keras的用法。第5~9章,是5个深度学习的经典应用。我们会依次介绍深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列的具体应用。在介绍这些应用的过程中会穿插各种深度学习模型和代码,并和读者分享我们对于这些模型的原理和应用场景的体会。最后,我们抛砖引玉地把物联网的概念提出来。我们相信,物联网和深度学习的结合会爆发出巨大的能量和价值。
限于篇幅,我们无法涉及深度学习的方方面面,只能尽自己所能,和大家分享尽可能多的体会、经验和易于上手的代码。
在写书的过程中,我们得到了大量的帮助和指导。微软CNTK的作者、国际顶尖深度学习专家俞栋博士和张察博士为本书作序,并给予我们许多支持和鼓励。微软研究院的研究员郭彦东博士和高级工程师汤成对本书的部分章节提出了审阅意见。电子工业出版社的张慧敏、葛娜和王静老师,对书籍的出版和编辑付出了极大努力,才使这本书得以如期问世。在此一并感谢。
最后,我们三位作者希望本书能为中国的深度学习和人工智能的普及,为广大从业者提供有价值的实践经验和快速上手贡献我们的微薄之力。
谢梁,美国微软总部首席数据科学家
鲁颖,谷歌总部数据科学技术专家
劳虹岚,美国微软总部微软研究院研究工程师
2017年6月于美国西雅图和硅谷
SASor 2017-08-01
从SAS一路走来,学了Python,机器学习,最近深度学习火又开始学深度学习,感觉市面上工具太多,不如Python里面用机器学习就基本上依赖于sklearn。年初朋友推荐了Keras,刚好看到这本书就第一时间买了,快速翻看了一下还不错,讲得比较基础,例子很实用。等我读完再来更新。