吴恩达Deep Learning学习笔记——第五课 序列模型

目录链接:吴恩达Deep Learning学习笔记目录

 1.循环序列模型
 2.自然语言处理与词嵌入
 3.序列模型和注意力机制

1. 循环序列模型

  序列模型所要解决的问题是,如何来处理具有序列化特点的数据。如下图,是序列化数据及我们需要从序列化数据中所获取的结果。如在一段音频中,音频是按时序播放的,无论是音频中的单词还是音调,都是有序的,如果希望从一段音频中,将其说说的话转化为一个文字性的描述,这是一个序列化到序列化的过程。

  1.1 符号约定

  如下图是一个最简单的序列描述:

x为样本(一个句子),y要在人名的地方输出1,其余为0。第i个样本标记为x(i),第i个样本第t个单词标记为x(i)<t>,y同理。Tx为样本长度。现在解决了一个序列的表示方式,那么具体的一个x(i)<t>应该如何表述呢,也就是说,一个单词需要表示成什么,使得可以将句子输入到模型中去处理(计算机只能处理数字,不能像人一样去理解文字,所以需要将单词转化为数字,但数字需要具有意义)。
  一种最粗暴的方法是,如下图所示,构建一个词表(现假设10000词),通过one-hot对每个单词进行编码,将单词数字化。这样的编码简单有效,但存在几个问题,①每个单词的编码长度与词表长度等长,而且非常稀疏,计算代价太高;②通过one-hot编码后,相邻单词之间距离相同,每个单词独立,这将造成语义相近的单词之间毫无关联。

  1.2 循环神经网络基础

  如果采用一个标准的神经网络来处理文本序列,如下图,相对于将每个词向量作为一个特征,将整个句子作为一个样本作为输入,而输出是一个与句子等长的向量。这样的模型存在两个问题:①输入和输出长度恒等,但在实际的文本序列中,基本上每个样本的长度是不等的;②在文本的不同位置特征是不共享的,而在标准网络中统计的位置信息,而这些位置上的特征类似(如可能在标准网络中输出是在2-5,10-15等这些位置上大概率是人名,但在实际文本中,人名可能出现在任何主语、宾语的位置,而标准网络无法推断语义结构及其语义)。

  循环神经网络用于解决上述两个问题。如下图,首先将一个样本的第一个词向量输入计算模型,然后尝试输出第一个词向量是否是人名,与此同时输出一些信息a1;随后将下一个词向量和上一个输出信息共同输入计算模型,用于预测第二个词向量是否是人名。在模型计算过程中,每个词向量输入的是同一个模型,也就是参数是相同的(而不是标准网络中一个词向量对应一套参数)。通过这种结构,在预测某个单词是否是人名时,将会考虑前面单词给出的信息,在一定程度上,相对于在理解序列本身的意义。但这就存在一个缺点,只考虑的前面的单词,未考虑后面的单词。这个缺点通过后述的双向循环神经网络(BRNN)来处理这个问题。
  循环神经网络中x、a、y的计算如下,首先计算a,然后计算y。每个词向量计算参数相同。
  简化计算公式标识,如假设Waa维度为(100,100),Wax维度为(100,10000),根据矩阵分块优化,将两个矩阵并列组合为Wa,而a和x则并行组合:

  1.3 循环神经网络反向传播

  首先,在前向传播过程中,将相同的参数Wa、Wy都赋予给每一步的计算,向前依次计算每个词的预测结果和loss,然后将每个词的loss求和得到Loss。反向时,通过Loss反向传递给每个loss,每个loss传递给每个预测值,每个预测值再传递给Wa和Wy。

  1.4 不同类型循环神经网络

  前述过程中,是输出一个与输入序列等长的输出,而在实际问题中,输出的长很可能与输入序列长度不同。如文本情感评价中,文本是一个长序列,而输出只是一个评分。又如将一句英语翻译为一句汉语,输入序列长度一般与输出不等。在人名识别中是一种多对多的结构,而在文本评分中则是一个多对一的结构(如输入影评,对该影评预测一个评分作为对电影的评分),此外还有一对一,一对多的情况。而多对多的还有一种情况,如翻译过程:

  1.5 语言模型和序列生成

  给出一个语料库(包含很多句子),基于语料库的训练,在输入一个词后,如何自动生成文本?通过RNN可以实现这个功能。首先对句子的标记进行处理,对于未出现在词表中的单词通过<UNK>来标记,句子结束通过<EOS>来标记。句子的单词通过yt标记。模型在t时刻的输入为上一时刻的输出a和上一时刻输出的y(y为在此位置出现概率最大的词)。在训练过程中输入的y为训练样本中上一个单词,在预测过程则为上一时刻预测输出。每一时刻的输出是基于前面所有出现单词的条件概率。

  1.6 对新序列采样

  前述方法中,对于每一个单词,预测的输出是词表中每个单词出现的概率分布,而此时我们选择了概率值最大作为输出,那么输出只有一种情况。另一种方法是在每一时刻的输出的概率分布中进行随机抽样作为该时刻的预测输出,随后作为下一时刻的输入,此时生成的文本将会有很多可能性:

另一种文本生成时采用的词表将不再是以单词为一个预测单位,而是将字符作为预测单位,这样做的好处是,将不用处理未知的单词或字符串,但缺点是可能会得到太多太长的序列,且基于字符的模型在捕捉前后文的关系上不如基于词汇的模型。

  1.7 GRU单元

   RNN虽然可以处理序列问题,并在处理过程中来捕捉其他时刻的信息,但其只能捕捉到近期的信息,对于更远的信息难以捕捉(难以记忆下来),而且随着序列长度的增加,如同深层神经网络一般,容易出现梯度消失问题。而采用门控单元(GRU)可以有效增加捕捉信息的深度、改善梯度消失问题。
  GRU是通过一个增加一个记忆单元来作为门控,控制是否更新输入到t时刻的上一时刻的输出。如下图所示,将a替换为c,作为记忆细胞,在当前时刻,①根据公式(1)计算新的c;②根据公式(2)计算门控值(输出为1或0);③根据公式(3),通过门控值来决定这一时刻计算的输出信息是新的c还是上一时刻的c。比如在句子The cat,which already ate...,was full.中,在cat位置处门控值为1,表示更新c(相当于将cat的信息记录下来,擦除之前的信息),在中间部分,门控值均为0,表示不更新c(在这一过程中,一直记录的是cat的信息),直到was位置(在此处需要使用到cat是否为单复数的信息,此后不再需要),门控值为1,表示更新信息c。实际上Γ的计算值并不实际为0和1,而是逼近这两个值,但也能起到类似的效果,同时避免了梯度消失的问题。

  1.8 LSTM

   在GRU中含两个门控(更新门及在前述基础上增加更相关性门Γr)和一个输出单元,而在LSTM中含三个门控(跟新门、遗忘门和输出门)和输出单元,其中,遗忘门代替了GRU中的(1-Γu),同时通过输出门来进一步控制了输出信息。这解决GRU仅记忆某时刻信息的问题(实际上门控值不严格为0,那么实际上其他时刻的信息也会被记录),在LSTM中通过更新门和遗忘门将不同时刻的信息记录下来(有选择的记忆)。

  1.9 双向RNN

   前述的RNN是单向的,其存在一个问题,仅能够参考前面时刻的信息来作出预测,而对于后续的信息没有加入预测。即仅处理了上文,未处理下文,这是不合理的。如下两个句子:
He said,"Teddy bears are on sale"
He said,"Teddy Roosevelt was a great President"
   显然第一个句子中Teddy不是一个人名,而在第二个句子中则是一个人名,但是仅仅通过前三个单词,实际上是无法对Teddy是不是人名分别对两个句子作出准确预测的。而双向RNN则是将后续信息也加入到预测过程中来,从而解决这个问题。

  1.10 深层RNN

   类似深层神经网络,RNN也可以进行堆叠来实现深层的RNN:

2.自然语言处理与词嵌入

  2.1 词汇表征

   前述中词汇的表征是通过one-hot来表示,其存在一个缺点就是将每个单词孤立起来了,对于相关性的词泛化能力很弱,比如无法推断男人和女人具有相关性,如句子I want a glass of orange _____?,空格处如果学习到填juice,但是如果将orange替换为apple,可能模型就不知道空格处需要填写juice。因为在one-hot编码中,如果要计算两个词的相关性,两个向量的内积总是为0,所有词汇之间相关性都为0,或者说都没有相关性。
   现在,如果我们采用其他表征,以使得具有相关性的词表达之间的内积较大,而不具相关性的词表达之间内积较小,那么就可以改善上述问题,如下图,倘若,将一个词在300个特性上进行赋值来表达一个词(特征化):

这种方法就称为word embedding,通过t-SNE将这个300-D的向量映射到2-D,实现词向量的可视化,可以发现,根据词的相关性进行了聚类:

  2.1 词汇表征

   (1)词嵌入的特性:学习类比关系
  词嵌入的方法可以另模型基于词的相关性进行推理,如,基于学习了man和woman之间的关系,能否推导出king对应什么?如下图,设词嵌入维度为4,man和woman两个词向量之差约为[-2,0,0,0],而我们发现king和queen之差,在各个维度上与man—woman相近,那么根据man-woman关系,推导出king对应queen:

要实现这种类比的方法,也就是要在词汇表中,找到一个词向量ew,使其与eking-eman+ewoman之间的相似度最大,相似度函数一般采用余弦相似度:

   (2)词嵌入矩阵
  词嵌入矩阵是一个二维的矩阵,第一个维度是特征化数量,第二个维度是词数量,将一个词嵌入矩阵乘以一个词的one-hot的编码,即得到该词汇的词嵌入表达:

   (3)学习词嵌入
  学习词嵌入就是学习词嵌入矩阵。通过构建语言模型,抽取上下文与目标词进行监督学习以获得词嵌入矩阵,能够达到较好的效果。通过one-hot编码乘以词嵌入矩阵E得到词向量,一般截取需预测词前几个词,将其词向量输入神经网络进行训练,来优化E。
在选取目标词的上下文时,一般有选前4个词、前后4个词、前一个词、较近的一个词。
   (4)Word2vec
  NNLM(生成连续词向量后输出一个非线性隐层和softmax层,将连续词向量映射为长度为V(词表数量)的概率分布向量,从而计算上下文条件概率)存在一些问题:①只能处理定长的序列(截取的上下文词数量固定);②训练速度太慢。在NNLM模型中,首先是通过简单的模型来训练出连续的词向量,随后将连续的词向量输入到神经网络中进行训练,模型的计算耗时主要在第二步中。由于我们只想得到连续的词向量,那么对于第二步中的神经网络则可进行简化。
  word2vec思想中,移除了NNLM中的非线性隐层,直接将连续词向量与softmax层连接(如上图),忽略上下文序列信息,将所有词汇总得到一个Embedding layer,将特征词纳入上下文环境(选取几个词),这得到的是CBow模型。CBow仍然是通过以context预测target word的过程来学习词向量的表达。
  而skip-gram模型则是计算输入word的词向量表达与目标词的输出向量之间的余弦相似度并归一化。个人理解为,θTt是目标词通过softmax输出的向量,与ec等长,即计算了target word输出词向量与context输入词向量之间的相似度:

参见NLP之——Word2Vec详解
   (5)负采样
  前述模型中还是存在softmax计算过慢的问题,在负采样算法中,首先构造context-target词对,如orange-juice将会被标记为正样本1,而orange-其他词,则会被标记为负样本0.

   (6)GloVe词向量
  不同于word2vec,GloVe是基于全局词频统计的。Xij表示单词i和congtext单词j在特定大小context window内共同出现的次数,对于距离越远的两个单词所占的总计算的权重越小。词向量和共现矩阵之间的近似关系如下:
w即词向量,b为偏置项。损失函数为:

GloVe希望实现的是:
共现次数很多的词的权重要大于很少共现的词;
但这个权重不应过大,应达到一定程度后不再增加;
如果两个单词没有共现,即Xij=0,那么将不参与loss计算,即f(x)=0。
GloVe作者采样了下述分段函数来满足上述条件:
参见GloVe详解
   (7)情绪分类
  

   (8)词嵌入除偏
  根据语料库来学习词嵌入,实际上是一个学习单词语义类比的过程(个人认为,错误求改)。基于语料库的词嵌入表达会造成很明显的偏见,如Man对应computer programmer,Woman对应homemaker。明显的反应了现实中的性别、种族、年龄等偏见歧视:
现如今,AI应用在生活、经济、政治等方方面面,有的还起到了提供决策的作用,如果存在这种偏见歧视,对于决策有着巨大的影响。而词嵌入会很容易的学到这种偏见歧视,所以需要消除词嵌入里这种偏见歧视。参见Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings

3. 序列模型和注意力机制

  3.1 基础模型

  (1)Seq2Seq
  在机器翻译中采用的模型就是Seq2Seq,通过编码→解码的方式来进行序列到序列的转换:

  (2)Image captioning
  

  3.2 选择最可能的句子

  相对于语言模型,Seq2Seq中的Decoder与语言模型相近,不同之处是初始输入的a被替换为Encoder的输出,所以Seq2Seq是计算一个句子基于被翻译句子的条件概率。在语言模型的生成文本中,希望的是生成各种各样的文本,而在机器翻译中则希望翻译足够准确,所以在Seq2Seq模型中不是随机采样输出,而是输出概率最大的句子。

在生成文本中,每一时刻输出会通过随机采样后再输入到下一时刻。如果采用这种方式来选取每一时刻最大概率词,这种方式称为贪心搜索法。但是在机器翻译中贪心法不一定是最优解,如下图going在英语中出现的频率一般高于visiting,所以在贪心法中很可能会得到下图第二个句子的翻译(相比第一个较差):

  3.3 Beam search

  既然不能使用贪心法,也不能使用随机法,也不可能将所有可能的组合都计算一遍(计算量太大)。那么。在第一时刻的输出的词,选取概率top B的词,在第二时刻输出时,将这B个词与词表中其他词配对,再计算其概率,输出其中概率top B的组合,重复下去,如下图,B=3:

注:如上图中,如果在某一时刻,输出的概率top B的序列中,不再包含上一时刻选取的某一词,那么上一时刻以这个词结尾的所有序列将直接抛弃。如第二时刻,top3 为in septemberjane isjane visiting那么,第一时刻中以September结尾的所有组合都抛弃。

  3.4 改善Beam search

  如果直接采用条件概率累乘的方式来最大化整个序列的概率,会存在两个问题:①通常每一个条件概率都很小,累乘后得到的整体概率值将会非常小,会造成数值下溢问题;②由于每个条件概率都小于1,那么随着序列长度增加,整体概率是减小的,所以翻译会倾向于较短的翻译;
  解决第一个问题的方法是将概率取对数求和,以避免上述两个问题,但依然存在倾向短翻译问题:由于每一条件概率都小于1,取对数后的值将为负数,且随序列增长,值越来越小,对数值越负,所以得到的整体结果是越来越负。

  解决第二个问题的方法是将其除以输出序列的长度来缓解:

  3.5 Beam search误差分析

  

  3.5 注意力模型

  在翻译过程中,如果是人工翻译,并不会像机器一样通读整个句子,然后记忆里面的东西,再去从0开始翻译。而是会通过记忆句子部分,然后翻译一部分。在前述的翻译模型中,对于所需翻译序列长度,其性能如下:

即对于较短和较长的序列,性能都较低,而通过注意力机制,可以达到类似人工翻译的效果,在长序列中性能也较高。
  注意力机制,将不再单独使用Encoder的输出直接整体输入到Decoder中,如下图,将会使Decoder中每一单元与Encoder中邻近的一些单元相连,并添加注意力权重α:
  如下图所示,a<t'>表示t时刻双向RNN传来的隐藏信息,如果Decoder某一单元的输出与t‘个Encoder单元相关,则赋予这t’个隐藏信息注意力权重,权重和为1,计算a的加权作为Decoder这一单元的输入C:

  完结。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容