https://www.toutiao.com/a6663809864260649485/
作者:Pulkit Sharma,2019年1月21日
翻译:陈之炎
校对:丁楠雅
本文约11000字,建议阅读10+分钟。
本文为你详细介绍序列模型,并分析其在不同的真实场景中的应用。
简介
如何预测一个序列中接下来要发生什么事情是一个非常吸引人的课题,这是我对数据科学如此着迷的原因之一!有趣的是——人类的头脑确实擅长于此,但是机器却不是这样的。如果一本书中有一个神秘的情节,人类的大脑就会开始预测出结果,然而,如何教会机器来做类似的事情呢?
多亏了深度学习,我们今天能做的事情比几年前要多的多。处理序列数据的能力,如音乐歌词、句子翻译、理解评论或构建聊天机器人-所有这些都要归功于序列建模。
这便是我们在本文中需要学习的内容,由于这是deeplearning.ai专业系列课程的一部分,我希望读者能够了解到某些概念。如果你还没有读过前几篇文章,或者还需要快速复习一下,可以访问以下链接:
- 深度学习和神经网络入门指南(deeplearning.ai第1课)
- https://www.analyticsvidhya.com/blog/2018/10/introduction-neuric-networks-deep-learning/
- 改进神经网络–超参数调整、正则化和其他(deeplearning.ai第2课)
- https://www.analyticsvidhya.com/blog/2018/11/neuric-networks-hyperparameter-tuning-regularization-deeplearning/
- 从零开始学习卷积神经网络的综合教程(deeplearning.ai第4课)
- https://www.analyticsvidhya.com/blog/2018/11/neuric-networks-hyperparameter-tuning-regularization-deeplearning/
在本节课程中,我们将看到如何将序列模型应用到不同的真实场景中去,如情感分类、图像字幕等。
课程目录
- 课程结构
- 课程内容:序列模型
序列模型课程内容如下:
一、模块1:循环神经网络(RNNs)
二、模块2:自然语言处理(NLP)和单词嵌入
2.1 单词嵌入简介
2.2 学习单词嵌入:Word2vec & GloVe
2.3 单词嵌入的应用程序
三、模块3:序列模型与注意力(Attention)机制
课程结构
到目前为止,我们已经在这个系列课程中涵盖了相当多的内容,以下是对所学概念的简要概括:
- 深度学习和神经网络基础。
- 浅层和深层神经网络的工作原理。
- 如何通过超参数调整、正则化和优化来提高深度神经网络的性能。
- 如何通过scratch实现卷积神经网络。
现在我们把重点转向序列建模,本课程分为三个模块(官方课程名称为:Andrew Ng教授的深度学习专业课程第5课):
- 在模块1中,我们将学习循环神经网络及其工作原理,此外,还将在本模块中介绍GRU和LSTM。
- 在模块2中,重点学习自然语言处理和单词嵌入。我们将学到如何将Word2vec和Glove框架应用于学习单词嵌入
- 最后,模块3将介绍注意力(Attention)模型的概念。我们将学到如何将大而复杂的句子从一种语言翻译成另一种语言。
准备好了吗?那我们便从模块1开始第5课序列模型的学习吧!
由于平台系统字数限制,模块1内容请见:一文读懂序列建模(deeplearning.ai)之循环神经网络(RNNs)
模块3内容请见:
一文读懂序列建模(deeplearning.ai)之自然语言处理和单词嵌入
三、模块3:序列模型与注意力机制(Attention Mechanism)
欢迎来到本课程的最后一个模块!以下是我们将在本单元中主要实现的两个目标:
- 理解注意力机制
- 理解模型将注意力集中在输入序列的何处
3.1 基本模型
我尽量保持本节内容与行业的相关性,在此会给出的一些模型,这些模型对机器翻译、语音识别等应用程序将非常有用。来看一下这个例子——我们的任务是建立一个序列到序列模型,在这个模型中需要输入一个法语句子并将其翻译成英语。问题如下:
这里x<1>,x<2>是输入,y<1>,y<2>是输出。为了建立一个模型,我们创建一个编码器,用它接受输入序列。编码器架构可以为RNN、LSTM或GRU。在编码器之后,再构建一个以编码输出为输入的译码器网络,并对其进行训练以生成译文。
这个网络也普遍应用于图像字幕。作为输入,我们获取图像的特征(使用卷积神经网络生成)。
3.2 选择可能性最大的句子
机器翻译系统的译码器模型与语言模型非常类似。但两者之间有一个关键区别:在语言模型中,是从全零向量开始,而在机器翻译中,则有一个编码器网络:
机器翻译模型的编码器部分是一个条件语言模型,在该模型中,需要计算出给定输入的输出概率:
对于下述输入语句:
可以有多种翻译,比如:
我们利用下面的公式,从以上句子中找出最好的译文。
好消息是,有一种算法可以帮助我们选择最有可能的翻译。
3.3 定向搜索
这是生成最优译文的常用算法之一。该算法可以通过以下3个步骤来理解:
第1步:选择第一个翻译单词并计算其概率:
可以设置beam宽度(B)来表示,在这里:B=3,我们不仅仅选择一个单词,可以选出前三个词,这三个单词均可能是第一个单词的译文。然后将这三个单词存储在计算机的内存中。
第2步: 对于步骤1中的每个选定单词,用算法计算出第二个单词的概率:
如果beam宽度(B)为3,词汇表中有10000个单词,则可能的组合总数为3*10000=30000。对这3万种组合进行估算,选出了前3种组合。
第3步:重复这个过程直到句子结束。
通过每次添加一个单词,定向搜索决定了任何给定句子最可能的译文。可以对定向搜索做的一些改进,以提高效率。
3.4 定向搜索的改进
定向搜索概率最大化:
这个概率是通过把不同单词的概率相乘计算得到的。由于概率是非常小的数字(介于0和1之间),如果我们将这些小数字多次相乘,最终的输出就会非常小,这会在计算中产生问题。为此,可以使用以下公式来计算概率:
我们不是最大化乘积,而是最大化乘积的对数。但是,即使用这个目标函数,如果译文中有更多的单词,乘积的结果也会为负值,对此,可以将函数归一化:
对于所有使用定向搜索选择的句子,计算出归一化的对数概率,然后选择计算结果最大的句子。还有一个细节值得分享,如何来决定beam宽度(B)?
beam宽度(B)越大,结果会更优,但算法速度会变慢;另一方面,选择较小的beam宽度(B),将使算法运行更快,但结果却不准确。beam宽度(B)的选择没有硬性规定,可以根据应用情况而变化。可以通过尝试不同的值,然后选择能生成最佳结果的值。
3.5 定向搜索误差分析
定向搜索是一种近似算法,它根据beam宽度(B)输出概率最大的译文。但是,并非每次都生成正确的译文。如果没有得到正确的译文,必须分析它的原因:是由于定向搜索还是RNN模型引起的问题。如果是定向搜索造成的这个问题,可以加大beam宽度(B),从而得出更好的结果。那么,如何决定我们应该集中改进波束定向搜索还是集中改进RNN模型呢?
假设实际的译文是:
简9月访问非洲(y*)
从算法中得到的译文是:
简去年9月访问了非洲(Y(Hat))
RNN将计算P(y* | x)和 P(y(hat) | x)
第一种情况:P(Y*X)>P(Y(Hat)X)
这意味着定向搜索选择了y(HAT),虽然y*的概率更高。因此,定向搜索结果是错误的,我们可以考虑增加beam宽度(B)。
第二种情况: P(y* | x) <= P(y(hat) | x)
这意味着y*的译文优于y(HAT),但RNN的预测正好相反。这时,问题出在RNN,应对RNN模型进行改进。
因此,对于每一个翻译,应决定问题是出在RNN是还是出在定向搜索。最后,我们分析了定向搜索和RNN模型的误差比例,并在此基础上对定向搜索或RNN模型进行了更新。这样便就可以优化译文。
3.6 注意力模型(Attention Model)
到目前为止,我们已经了解到了机器翻译的编码器-解码器架构,其中一个RNN读取输入,另一个RNN输出一个句子。但是当我们输入很长的句子时,模型便很难记住整个句子。
注意力模型是从长句中抽取小样本并翻译,然后再抽取另一个样本进行翻译,等等。
在生成输出时,我们使用alpha参数来决定对特定输入字应该给予多少注意度。
⍺<1,2> = 为生成第一个词,应给予第二个输入词多少关注?
让我们用一个例子来理解这一点:
为了生成第一个输出y<1>,应赋予每个单词多少注意力权重,这就是计算注意力的方法:
如果有Tx输入词和Ty 输出词,那么总注意力参数将是Tx * Ty。
你可能已经注意到了——注意力模型是深度学习中最强大的想法之一。
后记
序列模型真不错,对吧?它们有大量的实际应用——我们只需要知道在特定情况下使用的正确技术。希望你能在本指南中学习到这些技巧。
单词嵌入是表示单词的一种很好的方法,我们看到了如何构建和使用这些单词嵌入,与此同时,学习了单词嵌入的不同应用,最后我们还介绍了注意力模型,这是构建序列模型的最强大的想法之一。
如果你对本文有任何疑问或反馈,请随时在下面的评论部分分享。期待你的回复!
你也可以在Analytics Vidhya的Android应用程序上阅读本文。
原文标题:
Must-Read Tutorial to Learn Sequence Modeling (deeplearning.ai Course #5)
原文链接:
https://www.analyticsvidhya.com/blog/2019/01/sequence-models-deeplearning/
编辑:黄继彦
译者简介
陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步。
— 完 —