前言
凡我不能创造的,我就不能理解。
——理查德·费曼
深度学习正在深刻地改变这个世界。没有深度学习,智能手机的语音识别、Web的实时翻译、汇率的预测都无从谈起。得益于深度学习,新药的研发、患者的诊断、汽车的自动驾驶都在渐渐成为现实。除此以外,几乎所有的高新技术背后都有深度学习的身影。今后,世界将因深度学习而前进得更远。
本书是《深度学习入门:基于Python的理论与实现》的续作,我们将在前作的基础上讨论深度学习的相关技术。特别是,本书将专注于自然语言处理和时序数据处理,使用深度学习挑战各种各样的任务。另外,本书继承了前作“从零开始创建”的理念,让读者充分体验深度学习相关的高新技术。
本书的理念
笔者认为,要深入理解深度学习(或者某个高新技术),“从零开始创建”的经验非常重要。从零开始创建,是指从自己可以理解的地方出发,在尽量不使用外部现成品的情况下,实现目标技术。本书的目标就是通过这样的过程来切实掌握深度学习(而不是仅停留在表面)。
说到底,要深入理解某项技术,至少应掌握创建它所需的知识和技能。因为本书要从零开始创建深度学习,所以我们会编写很多程序,进行很多实验。这个过程相当费时,有时还很费脑。不过,在这些费时的工作(甚至这样的工作本身)中包含许多对深入理解技术非常重要的精髓。如此获得的知识,对于使用既有库、阅读最前沿的论文、开发原创系统都非常有帮助。此外,最重要的是,一步一步地理解深度学习的结构和原理这件事本身就很有趣。
进入自然语言处理的世界
本书的主题是基于深度学习的自然语言处理。简言之,自然语言处理是让计算机理解我们日常所说的语言的技术。让计算机理解我们所说的语言是一件非常难的事情,同时也非常重要。实际上,自然语言处理技术已经极大地改变了我们的生活。Web检索、机器翻译、语音助理,这些对世界产生了重大影响的技术在底层都用到了自然语言处理技术。
如上所述,我们的生活已经离不开自然语言处理技术。在这个领域中,深度学习也占有非常重要的地位。实际上,深度学习极大地改善了传统自然语言处理的性能。比如,谷歌的机器翻译性能就基于深度学习获得了显著提升。
本书将围绕自然语言处理和时序数据处理,来介绍深度学习的重要技巧,具体包括word2vec、RNN、LSTM、GRU、seq2seq和Attention等。本书将尽可能地用简洁的语言来解释这些技术,并通过实际创建它们来帮助读者加深理解。另外,通过实验,我们将实际感受到它们的潜力。
本书从深度学习的视角探索自然语言处理。全书一共8章,建议读者像读连载故事一样,从头开始顺序阅读。在遇到问题时,我们会先想办法解决问题,然后再改进解决办法。按照这种流程,我们以深度学习为武器,解决关于自然语言处理的各种问题。通过这次探险,希望读者能深入理解深度学习中的重要技巧,并体会到它们的有趣之处。
本书面向的读者
本书是《深度学习入门:基于Python的理论与实现》的续作,因此假定读者已经学习了前作的内容。但是,作为回顾,本书第1章会复习一下神经网络。因此,即便没有读过前作,只要具有神经网络和Python相关的知识,就也可以阅读本书。
为了让读者深入理解深度学习,本书将继承前作的理念,以“创建”“运行”为中心展开话题。不使用自己不理解的东西,只使用自己理解的东西,我们将坚定这样的立场,去探索深度学习和自然语言处理的世界。
为了明确本书的读者对象,这里将本书的内容和特征列举如下。
·不依赖外部库,从零开始实现深度学习的程序
·作为《深度学习入门:基于Python的理论与实现》的续作,围绕自然语言处理和时序数据处理中用到的深度学习技术进行讲解
·提供可以运行的Python源代码,让读者能够方便地进行实验
·尽可能地用简洁的语言和清晰的图示进行说明
·虽然也会使用数学式,但更注重基于源代码进行解释
·重视原理,比如“为什么这个方法更好?”“为什么这样有效?”“为什么这样有问题?”等
另外,这里将从本书中可以学到的技术列举如下。
·基于Python的文本处理
·深度学习之前的“单词”表示方法
·用于获取单词向量的word2vec(CBOW模型和skip-gram模型)
·加快大规模数据的训练速度的Negative Sampling
·处理时序数据的RNN、LSTM和GRU
·处理时序数据的误差反向传播法(Backpropagation Through Time)
·进行文本生成的神经网络
·将一个时序数据转化为另一个时序数据的seq2seq
·关注重要信息的Attention
本书将以通俗易懂的方式详细解释这些技术,以便读者能在实现层面掌握它们。在讲解这些技术时,本书不会单单列举事实,而是会像故事连载一样展开叙述。
本书不面向的读者
明确本书不适合什么样的读者也很重要,为此,这里将本书不会涉及的内容列举如下。
·不介绍深度学习相关的最新研究进展
·不讨论Caffe、TensorFlow和Chainer等深度学习框架的使用方法
·不提供深度学习理论层面的详细解释
·不涉及图像识别、语音识别和强化学习等主题(本书主要关注自然语言处理)
如上所述,本书不涉及最新研究和理论细节。但是,读完本书之后,读者应该有能力去研究那些最新的论文或者自然语言处理相关的最前沿技术。
运行环境
本书提供了Python 3的源代码,读者可以自己动手实际运行这些源代码。通过边读代码边思考,并尝试自己想到的新思路,可以帮助自己巩固所学知识。本书中用到的源代码可以从以下网址下载:
https://www.ituring.com.cn/book/2678
本书的目标是从零开始实现深度学习。因此,我们的方针是尽量不使用外部库,但是NumPy和Matplotlib这两个库例外。借助这两个库,我们可以高效地实现深度学习。
NumPy是用于数值计算的库。该库提供了许多用于处理高级数学算法和数组(矩阵)的便捷方法。在本书的深度学习实现中,我们将使用这些便捷方法进行高效的实现。
Matplotlib是用于绘图的库。使用Matplotlib,可以将实验结果可视化,以直观地确认深度学习的学习过程。本书将使用这些库,来实现深度学习的算法。
另外,本书中的大部分源代码可以在普通计算机上运行,而且不会花费太多时间。但是,也是有一部分代码(特别是大型神经网络的学习)需要花费大量时间。为了加快这部分耗时代码的处理速度,本书还提供了能在GPU上运行的代码(机制)。这是通过一个名为CuPy的库实现的(CuPy会在第1章介绍)。如果你有一台装有NVIDIA GPU的机器,通过安装CuPy,可以在GPU上高速处理本书的部分代码。
本书使用如下编程语言和库。
·Python 3
·NumPy
·Matplotlib
·CuPy(可选)
再次出发
技术已经进步到了可以轻松进行复制的时代。当下是一个可以轻松复制照片、视频、源代码和库的便捷世界。但是,无论技术多么发达,生活多么便利,经验都是无法轻松复制的。自己动手的经验、花时间思考的经验,都是无法复制的。而那些永恒的价值,正存在于这些无法复制的事物中。
前言到此结束,让我们再次踏上学习深度学习的旅途吧!
表述规则
本书在表述上采用如下规则。
粗体字(Bold)
用来表示新引入的术语、强调的要点以及关键短语。
等宽字(Constant Width)
用来表示下面这些信息:程序代码、命令、序列、组成元素、语句选项、分支、变量、属性、键值、函数、类型、类、命名空间、方法、模块、属性、参数、值、对象、事件、事件处理器、XML标签、HTML标签、宏、文件的内容、来自命令行的输出等。若在其他地方引用了以上这些内容(如变量、函数、关键字等),也会使用该格式标记。
等宽粗体字(Constant Width Bold)
用来表示用户输入的命令或文本信息。在强调代码的作用时也会使用该格式标记。
等宽斜体字(Constant Width Italic)
用来表示必须根据用户环境替换的字符串。
表示源代码的文件位置。
用来表示提示、启示以及某些值得深入研究的内容的补充信息。
表示程序库中存在的bug或经常会发生的问题等警告信息,引起读者对该处内容的注意。
读者意见与咨询
虽然笔者已经尽最大努力对本书的内容进行了检查与确认,但是仍不免在某些地方出现错误或者容易引起误解的表达及排版问题等。如果读者遇到这些问题,请及时告知,我们在本书重印时会将其改正。与此同时,也欢迎读者为本书将来的修订提出建议。本书编辑部的联系方式如下。
株式会社O'Reilly Japan
电子邮件japan@oreilly.co.jp
本书的主页地址如下。
https://www.ituring.com.cn/book/2678
https://www.oreilly.co.jp/books/9784873118369(日语)
https://github.com/oreilly-japan/deep-learning-from-scratch-2
关于O'Reilly的其他信息,可以访问下面的O'Reilly主页查看。
电子书
扫描如下二维码,即可购买本书电子版。