在日本,有一本书在 AI 领域的影响力超越了实力派的“花书”,长期位列日亚“人工智能”类图书榜首,众多五星好评。它被众多高校名师为 AI 入门教材,如果你也是 AI 领域的开发者,说不定你手上的这本书已经翻烂了。
这就是被称为「鱼书」的《深度学习入门:基于 Python 的理论与实现》
原书上市不到2年,就已经加印到 100000+ 册了,对于技术图书来讲已经是个惊人的数字了。一方面说明深度学习确实火热,另一方面也说明这本书的内容确实有惊人的地方。甚至被日本程序员称之为「神本」(即「神作」)。
这次作者斋藤康毅经过长时间筹备创作,「鱼书」续作《深度学习进阶:自然语言处理》终于要在图灵抢先发布了!
下面我们看看「神本」的续作,将如何带领我们进阶深度学习,掌握自然语言处理的全技能吧!
作为进阶书籍,本作将进一步深入探索深度学习的可能性。和前作一样,不使用既有的库和框架,重视“从零开始创建”,通过亲自动手,来探寻深度学习相关技术的乐趣和深度。
第一章
神经网络的复习
第一章我们将复习一下神经网络。也就是说,本章相当于前作的摘要。此外,本书更加重视效率,对前作中的部分代码规范进行了修改(比如,方法名和参数的命名方法等)。关于这一点,我们也会在本章进行确认。
本章所学技能
1. 神经网络具有输入层、隐藏层和输出层;
2. 通过全连接层进行线性变换,通过激活函数进行非线性变换;
3. 全连接层和 mini-batch 处理都可以写成矩阵计算;
4. 使用误差反向传播法可以高效地求解神经网络的损失的梯度;
5. 使用计算图能够将神经网络中发生的处理可视化,这有助于理解正向传播和反向传播;
6. 在神经网络的实现中,通过将组件模块化为层,可以简化实现;
7. 数据的位精度和 GPU 并行计算对神经网络的高速化非常重要;
第二章
自然语言和单词的分布式表示
自然语言处理涉及多个子领域,但是它们的根本任务都是让计算机理解我们的语言。何谓让计算机理解我们的语言?存在哪些方法?本章我们将以这些问题为中心展开讨论。为此,我们将先详细考察古典方法,即深度学习出现以前的方法。
从下一章开始,再介绍基于深度学习(确切地说,是神经网络)的方法。本章我们还会练习使用 Python 处理文本,实现分词(将文本分割成单词)和单词 ID 化(将单词转换为单词 ID)等任务。
本章实现的函数在后面的章节中也会用到。因此,本章也可以说是后续文本处理的准备工作。那么,让我们一起进入自然语言处理的世界吧!
本章所学技能
1. 使用 WordNet 等同义词词典,可以获取近义词或测量单词间的相似度等;
2. 使用同义词词典的方法存在创建词库需要大量人力、新词难更新等问题;
3. 目前,使用语料库对单词进行向量化是主流方法;
4. 近年来的单词向量化方法大多基于“单词含义由其周围的单词构成”这一分布式假设;
5. 在基于计数的方法中,对语料库中的每个单词周围的单词的出现频数进行计数并汇总(=共现矩阵);
6. 通过将共现矩阵转化为 PPMI 矩阵并降维,可以将大的稀疏向量转变为小的密集向量;
7. 在单词的向量空间中,含义上接近的单词距离上理应也更近;
第三章
word2vec
接着上一章,本章的主题仍是单词的分布式表示。在上一章中,我们使用基于计数的方法得到了单词的分布式表示。本章我们将讨论该方法的替代方法,即基于推理的方法。
顾名思义,基于推理的方法使用了推理机制。当然,这里的推理机制用的是神经网络。本章,著名的 word2vec 将会登场。我们将花很多时间考察 word2vec 的结构,并通过代码实现来加深对它的理解。
本章的目标是实现一个简单的 word2vec。这个简单的 word2vec 会优 先考虑易理解性,从而牺牲一定的处理效率。因此,我们不会用它来处理大规模数据集,但用它处理小数据集毫无问题。下一章我们会对这个简单的 word2vec 进行改进,从而完成一个“真正的”word2vec。现在,让我们一起进入基于推理的方法和 word2vec 的世界吧!
本章所学技能
1. 基于推理的方法以预测为目标,同时获得了作为副产物的单词的分布式表示;
2. word2vec 是基于推理的方法,由简单的 2 层神经网络构成;
3. word2vec 有 skip-gram 模型和 CBOW 模型;
4. CBOW 模型从多个单词(上下文)预测 1 个单词(目标词);
5. skip-gram 模型反过来从 1 个单词(目标词)预测多个单词(上下文);
6. 由于 word2vec 可以进行权重的增量学习,所以能够高效地更新或添加单词的分布式;
第四章
word2vec 的高速化
上一章我们学习了 word2vec 的机制,并实现了 CBOW 模型。因为 CBOW 模型是一个简单的 2 层神经网络,所以实现起来比较简单。
但是,目前的实现存在几个问题,其中最大的问题是,随着语料库中处理的词汇量 的增加,计算量也随之增加。实际上,当词汇量达到一定程度之后,上一章的 CBOW 模型的计算就会花费过多的时间。
因此,本章将重点放在 word2vec 的加速上,来改善 word2vec。具体而言,我们将对上一章中简单的 word2vec 进行两点改进:引入名为 Embedding 层的新层,以及引入名为 Negative Sampling 的新损失函数。
这样一来,我们就能够完成一个“真正的”word2vec。完成这个真正的 word2vec 后,我们将在 PTB 数据集(一个大小比较实用的语料库)上进行学习,并实际评估所获得的单词的分布式表示的优劣。
本章所学技能
1. Embedding 层保存单词的分布式表示,在正向传播时,提取单词 ID 对应的向量;
2. 因为 word2vec 的计算量会随着词汇量的增加而成比例地增加,所以最好使用近似计算来加速;
3. 负采样技术采样若干负例,使用这一方法可以将多分类问题转化为二分类问题进行处理;
4. 基于 word2vec 获得的单词的分布式表示内嵌了单词含义,在相似的上下文中使用的单词在单词向量空间上处于相近的位置;
5. word2vec 的单词的分布式表示的一个特性是可以基于向量的加减法运算来求解类推问题;
6. word2vec 的迁移学习能力非常重要,它的单词的分布式表示可以应用于各种各样的自然语言处理任务;
第五章
循环神经网络
到目前为止,我们看到的神经网络都是前馈型神经网络。前馈 (feedforward)是指网络的传播方向是单向的。
具体地说,先将输入信号传给下一层(隐藏层),接收到信号的层也同样传给下一层,然后再传给下一层 ...... 像这样,信号仅在一个方向上传播。
虽然前馈网络结构简单、易于理解,但是可以应用于许多任务中。不过,这种网络存在一个大问题,就是不能很好地处理时间序列数据(以下简称为“时序数据”)。
更确切地说,单纯的前馈网络无法充分学习时序数据的性质(模式)。于是,循环神经网络(Recurrent Neural Network,RNN)便应运而生。
本章我们将指出前馈网络的问题,并介绍 RNN 如何很好地解决这些问题。然后,我们会详细解释 RNN 的结构,并用 Python 对其进行实现。
本章所学技能
1. RNN 具有环路,因此可以在内部记忆隐藏状态;
2. 通过展开 RNN 的循环,可以将其解释为多个 RNN 层连接起来的神经网络,可以通过常规的误差反向传播法进行学习(= BPTT);
3. 在学习长时序数据时,要生成长度适中的数据块,进行以块为单位的 BPTT 学习(= Truncated BPTT);
4. Truncated BPTT 只截断反向传播的连接;
5. 在 Truncated BPTT 中,为了维持正向传播的连接,需要按顺序输入数据;
6. 语言模型将单词序列解释为概率;
7. 理论上,使用 RNN 层的条件语言模型可以记忆所有已出现单词的信息;
第六章
Gated RNN
上一章的 RNN 存在环路,可以记忆过去的信息,其结构非常简单,易于实现。不过,遗憾的是,这个 RNN 的效果并不好。原因在于,许多情况下它都无法很好地学习到时序数据的长期依赖关系。
现在,上一章的简单 RNN 经常被名为 LSTM 或 GRU 的层所代替。实 际上,当我们说 RNN 时,更多的是指 LSTM 层,而不是上一章的 RNN。顺便说一句,当需要明确指上一章的 RNN 时,我们会说“简单 RNN”或“Elman”。
LSTM 和 GRU 中增加了一种名为“门”的结构。基于这个门,可以学习到时序数据的长期依赖关系。本章我们将指出上一章的 RNN 的问题,介绍代替它的 LSTM 和 GRU 等“Gated RNN”。
特别是我们将花很多时间研究 LSTM 的结构,并揭示它实现“长期记忆”的机制。此外,我们将使用 LSTM 创建语言模型,并展示它可以在实际数据上很好地学习。
本章所学技能
1. 在简单 RNN 的学习中,存在梯度消失和梯度爆炸问题;
2. 梯度裁剪对解决梯度爆炸有效,LSTM、GRU 等 Gated RNN 对解决梯度消失有效;
3. LSTM 中有 3 个门:输入门、遗忘门和输出门 ;
4. 门有专门的权重,并使用 sigmoid 函数输出 0.0 ~ 1.0 的实数;
5. LSTM 的多层化、Dropout 和权重共享等技巧可以有效改进语言模型;
6. RNN 的正则化很重要,人们提出了各种基于 Dropout 的方法;
第七章
基于 RNN 生成文本
在第 5 章和第 6 章中,我们仔细研究了 RNN 和 LSTM 的结构及其实现。现在我们已经在代码层面理解了它们。在本章,RNN 和 LSTM 将大显身手,我们将利用 LSTM 实现几个有趣的应用。
首先,本章将使用语言模型进行文本生成。具体来说,就是使用在语料库上训练好的语言模型生成新的文本。然后,我们将了解如何使用改进过的语言模型生成更加自然的文本。通过这项工作,我们可以(简单地)体验基于 AI 的文本创作。
另外,本章还会介绍一种结构名为 seq2seq 的新神经网络。seq2seq 是 “(from) sequence to sequence”(从时序到时序)的意思,即将一个时序数据转换为另一个时序数据。
本章我们将看到,通过组合两个 RNN,可以轻松实现 seq2seq。seq2seq 可以应用于多个应用,比如机器翻译、聊天机器人和邮件自动回复等。通过理解这个简单但聪明强大的 seq2seq,应用深度学习的可能性将进一步扩大。
本章所学技能
1. 基于 RNN 的语言模型可以生成新的文本;
2. 在进行文本生成时,重复“输入一个单词(字符),基于模型的输出(概率分布)进行采样”这一过程;
3. 通过组合两个 RNN,可以将一个时序数据转换为另一个时序数据(seq2seq);
4. 在 seq2seq 中,编码器对输入语句进行编码,解码器接收并解码这个编码信息,获得目标输出语句;
5. 反转输入语句(Reverse)和将编码信息分配给解码器的多个层(Peeky)可以有效提高 seq2seq 的精度;
6. seq2seq 可以用在机器翻译、聊天机器人和自动图像描述等各种各样的应用中;
第八章
Attention
上一章我们使用 RNN 生成了文本,又通过连接两个 RNN,将一个时序数据转换为了另一个时序数据。我们将这个网络称为 seq2seq,并用它成功求解了简单的加法问题。之后,我们对这个 seq2seq 进行了几处改进,几乎完美地解决了这个简单的加法问题。
本章我们将进一步探索 seq2seq 的可能性(以及 RNN 的可能性)。这里,Attention 这一强大而优美的技术将登场。Attention 毫无疑问是近年来深度学习领域最重要的技术之一。
本章的目标是在代码层面理解 Attention 的结构,然后将其应用于实际问题,体验它的奇妙效果。
本章所学技能
1. 在翻译、语音识别等将一个时序数据转换为另一个时序数据的任务中,时序数据之间常常存在对应关系;
2. Attention 从数据中学习两个时序数据之间的对应关系;
3. Attention 使用向量内积(方法之一)计算向量之间的相似度,并输出这个相似度的加权和向量;
4. 因为 Attention 中使用的运算是可微分的,所以可以基于误差反向传播法进行学习;
5. 通过将 Attention 计算出的权重(概率)可视化,可以观察输入与输出之间的对应关系;
6. 在基于外部存储装置扩展神经网络的研究示例中,Attention 被用来读写内;
从作者角度看,要深入理解深度学习,“从零开始创建”的经验非常重要。从零开始创建,是指从自己可以理解的地方出发,在尽量不使用外部现成品的情况下,实现目标技术。
本书是基于深度学习的自然语言处理。目标就是通过这样的过程来切实掌握深度学习,简言之,自然语言处理是让计算机理解我们日常所说的语言的技术。
让计算机理解我们所说的语言是一件非常难的事情,同时也非常重要。实际上,自然语言处理技术已经极大地改变了我们的生活。Web 检索、机器翻译、语音助理,这些对世界产生了重大影响的技术在底层都用到了自然语言处理技术。
本书从深度学习的视角探索自然语言处理,建议读者像读连载故事一样,从头开始顺序阅读。
在遇到问题时,我们会先想办法解决问题,然后再改进解决办法。按照这种流程,我们以深度学习为武器,解决关于自然语言处理的各种问题。
通过这次探险,希望读者能深入理解深度学习中的重要技巧,并体会到它们的有趣之处。
标签:学习,word2vec,进阶,本章,终出续,火遍,单词,神经网络,RNN From: https://blog.51cto.com/u_15767091/6565124