序
2017年初,我曾为本书第1版写过一篇“推荐序”。后来郑泽宇邀请我共同完成第2版的写作,我从读者变成了作者,又有了许多新的感受。因此我想借着重新写序的机会,跟读者分享一下写作第2版的心路点滴。我在自然语言处理领域工作多年,这次负责撰写第9章自然语言处理的相关内容,本以为会是得心应手,然而事实上,写作的过程远比我想象中困难得多。最困难的地方在于,写作进行的时候无法及时得到读者的反馈,不能把握读者的心声——理论部分介绍多少比较合适?关于语料预处理的内容会不会令读者感到枯燥?模型的实现应该使用基本模块来搭建还是直接调用TensorFlow中的库?注意力机制有那么多变体,到底应该介绍哪一个才符合读者的期望?这些都是我在写作过程中反复思考的问题。最后书中呈现的内容,大致是我认真揣测读者的心思后,想到的在特定领域搭建应用时所要用到的最精简的知识。希望这些知识能为读者进一步学习和实践打下良好的基础。
TensorFlow的库非常丰富。除了基础的网络结构之外,很多最新的研究成果都会被迅速提交到TensorFlow的库中。而为了提供最大的灵活度,每一个结构又常常提供许多配置参数。如果将这些库、参数都一一列出,那么本书无异于一本枯燥的API说明文档,这是我们不希望看到的。因此我们本着只介绍API中最实用、最核心部分的原则,希望能帮助读者快速上手。同时我们鼓励读者多多查阅官方文档,也许你想实现的某个功能已经包含在TensorFlow官方库中了。
在这里,我想感谢郑泽宇的邀请,让我全心投入,感受到了写书的乐趣与不易,于我自己也是一个巨大的提升。还要感谢我的同事高勤和江鹏在写作过程中为我提供的宝贵意见。同时,衷心感谢在本书第1版的官方网站上留言的热心读者们,你们的建议成就了更好的第2版内容。希望读者们继续多提建议,包括希望看到哪些内容可以更详细、更深入,哪些内容可以精简,以及未来版本可以加入哪些内容等。读者们的支持永远是我们持续改进的动力!
梁博文
2017年12月
前言
“深度学习”这个词在过去的一年之中已经轰炸了媒体、技术博客甚至朋友圈。这也许正是你会读到本书的原因之一。数十年来,人工智能技术虽不断发展,但像深度学习这样在学术界和工业界皆具颠覆性的技术实在是十年难遇。可惜的是,理解和灵活运用深度学习并不容易,尤其是其复杂的数学模型,让不少感兴趣的同学很快“从入门到放弃”。在本书第1版前,很难找到从实战出发的深度学习和TensorFlow参考书,这也是笔者在工作之余熬夜撰写这本书的动力。笔者本人作为一枚标准码农、创业党,希望这本书能够帮助码农和准码农们绕过深度学习复杂的数据公式,快速上手深度学习,解决工作、学习中的实际问题。
2016年初,笔者和小伙伴们从美国谷歌辞职,回到祖国并在杭州联合创办了才云科技(Caicloud.io),为企业提供人工智能平台和解决方案。回国之初,很多企业对于TensorFlow都显示出了浓厚的兴趣,然而在深度交流之后,发现TensorFlow虽然是一款非常容易上手的工具,但是深度学习的技术并不是每一家企业都能掌握的。为了让更多的人和企业可以享受到深度学习技术带来的福利,笔者与电子工业出版社的张春雨编辑一拍即合,开始了本书的撰写工作。
使用TensorFlow实现深度学习是本书介绍的重点。本书将从TensorFlow的安装开始,依次介绍TensorFlow的基本概念、使用TensorFlow实现全连接深层神经网络、卷积神经网络和循环神经网络等深度学习算法,以及TensorFlow并行化输入数据处理流程、TensorBoard可视化工具、TensorFlow高层封装、带GPU的分布式TensorFlow使用方法。在介绍使用TensorFlow实现不同深度学习算法的同时,也介绍了这些算法背后的理论,并列举了这些算法可以解决的具体问题。本书避开了枯燥复杂的数学公式,从实际问题出发,在实践中介绍深度学习的概念和TensorFlow的用法。
本书第1版出版之后,笔者收到了广大读者的踊跃来信。信中既充分肯定了第1版对他们学习TensorFlow和深度学习的帮助,又提出了对更新TensorFlow版本和其他新内容的期待,这正是笔者开始撰写第2版的强大动力。第1版中大部分示例都是与计算机视觉相关的,为了更好地介绍与自然语言处理相关的内容,笔者特别邀请了在Google翻译组工作了5年的梁博文来撰写这部分内容。第2版中将有专门的一个章节介绍语言模型、Seq2Seq模型、注意力(attention)模型等自然语言应用。
TensorFlow是一个飞速发展的工具。第1版在写作时的最新版本为0.9.0,然而到第1版出版时,谷歌已经推出了TensorFlow的第一个正式版1.0.0。相比第1版中使用的TensorFlow 0.9.0,TensorFlow 1.0.0以后的版本对API也进行了大量调整,之前的大量示例代码已经无法正常运行。第2版在更新示例API版本的同时,对TensorFlow 0.9.0之后推出的重要新功能也进行了详细介绍,希望能够帮助读者更好地使用TensorFlow。
为了让广大读者更好地理解和使用书中的示例代码,我们为大家提供了一个完全公开的GitHub代码库来维护TensorFlow不同版本的示例程序。该代码库的网址为https://github.com/caicloud/tensorflow-tutorial。笔者衷心地希望各位读者能够从本书中获益,这也是对我们最大的支持和鼓励。对于书中出现的任何错误或者不准确的地方,欢迎大家批评指正,并发送邮件至zeyu@caicloud.io。
读者也可以登录博文视点官网http://www.broadview.com.cn,下载本书代码或提交勘误信息。一旦勘误信息被作者或编辑确认,即可获得博文视点奖励积分,用于兑换电子书。读者可以随时浏览图书页面,查看已发布的勘误信息。
致谢
在此我要特别感谢为此书做出贡献的每一个人。
首先,我要感谢所有的读者。在第1版出版之后,我收到了大量的读者来信。这些信中表达了对本书内容的喜爱,同时也给出了非常多的宝贵建议。广大读者的支持和鼓励正是我完成第2版的最大动力。在此,我再次感谢每一位读者,希望第2版中更多的干货值得大家投入宝贵的精力去阅读。
其次,我要感谢加入第2版写作的作者梁博文。在繁重的Google日常工作的同时,梁博文经常深夜撰写自然语言处理的相关内容并调试示例代码,非常辛苦。正是因为梁博文的辛勤付出,才让第2版中的内容更加全面。
最后,我要再次感谢在第1版写作过程中给予过我大力支持的所有人。没有他们的支持也就没有这本书的诞生——
在紧张的创业之余,才云科技CEO张鑫给了我极大的支持和鼓励,让我有足够的时间投入到此书第1版的撰写工作中。
我也要感谢我的妻子温苗苗以及我的父母、岳父岳母,没有他们一直以来的支持和帮助,我不可能完成此书的写作。每当遇到困难的时候,长辈们的鼓励是我前进的最大动力。
最后,我还要感谢所有为本书付出心血的电子工业出版社的编辑们。无论在本书的定位,还是在具体的文字推敲、编辑加工、版式设计上,张春雨、刘佳禾和孙奇俏都给予了巨大的帮助。
郑泽宇
2017年12月