首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

循环神经网络(二)——GRU、LSTM、BRNN、deep RNN

循环神经网络(二)

——GRU、LSTM、BRNN、deep RNN

(原创内容,转载请注明来源,谢谢)

一、概述

本文主要讲述RNN的其他结构,这些结构比RNN更常用,而且对于自然语言处理,有更高效、更好的处理方式。

二、语言模型和序列生成

1、语言模型

语言模型,大体上来说,即一句话的若干个单词,建立单词之间的关联性,进而确定每个位置的正确单词。对于同音词等,具有更大的难度,如下图所示:

利用计算概率的方式,确定一句话正确的词语表示。

2、RNN语言模型的工作

训练集:需要大量的语料库作为训练集。这里的语料库,不只是词汇表,而且需要大量的正确的句子和文章,作为训练集。

为了便于训练,用标记一句话的结尾,用表示一个单词不在词汇表中。y~表示单词出现在句子第一个单词的位置的概率,y~表示在第一个单词确定是某个词的情况下第二个单词的概率,即条件概率。

例如y~=p(cats),表示第一个单词是cat的概率;y~=p(average|cats)表示第一个单词是cats的情况下,第二个单词是average的概率。

句子中出现的没有在词汇表中的单词,都标记为,如下面的Mau。

3、RNN模型

RNN模型如下图所示。其中每一层的y都是经过softmax的输出,这个输出基于前面一层的输出和本层的输入进行判断。

损失函数L即和logistic回归的计算方式一致。

4、新序列采样

当需要了解网络当前的学习情况,可以用序列采样的方式,把前一个序列的输出y,引入到下一个序列作为输入,结合激活函数进行输出。

5、基于字符的采样

除了基于单词的,也有基于字符的词汇表。

基于字符的词汇表,则把大小写字母、空格、标点符号、数字等引入,这样的好处是不会出现的情况。但是最大的缺点是序列过长,容易存在性能问题以及梯度爆炸与梯度消失。

6、训练不同风格的句子

要让网络学习出不同风格的句子,主要在语料库上进行筛选。因为RNN造句都是基于语料库的学习,判断每个单词出现在下一个单词的概率,因此只要语料库的风格是某一类的,训练出来的语句也就是某种类型的了。

三、梯度消失问题

1、梯度消失

对于RNN,由于把样本细分到序列的维度,因此很容易出现梯度消失的情况。例如下面的例子,句子的主语问题,cat对应的动词是was,cats对应的动词是were。

但是由于这个是定语从句,中间有很长的which子句,导致很有可能到出现动词的时候,已经无法直接受到主语的反馈了。

2、梯度爆炸

与梯度消失相对,也有梯度爆炸的情况。但是,梯度爆炸,可以通过检验参数是否超过阈值,对超过阈值的情况进行梯度修剪(clipping),即缩减参数值的方式,实现消除梯度爆炸。

因此主要的问题还在于梯度消失。

3、解决方案

解决方案就是下面要介绍的两种网络,GRU、LSTM。这两种网络旨在让网络带有“记忆性”,以便把前面序列的内容准确的传递给后面的序列。

四、GRU

门控循环单元(Gated Recurrent Unit),简称GRU,是一种让网络带有记忆性的解决方案。

1、普通的RNN单元

对照普通的RNN单元来学习GRU,这里先看普通的RNN单元,是通过上一个序列的激活函数值a,以及本序列的输入值x,经过tanh函数,计算得到本序列的激活函数a,并且经过softmax,得到本序列的输出y~。

2、GRU

GRU引入了门的概念以及记忆单元C。

记忆单元C,即序列的激活函数,它是否需要被记忆,取决于门。整体的计算公式如下图所示。

通过公式可以看出,本序列的激活函数a,是否需要被记忆,取决于本序列的门Γu,见下面c的公式。如果门Γu的值为1,则表示需要记忆本序列的值,会往后面传,且表示不使用从前面传过来的记忆单元。

反之,如果Γu等于,则完全使用前面传过来的记忆单元的值。

这样就保证了参数可以在序列中往后传播。

完整的GRU公式如下图所示,一共有两个门,Γu称为视觉门,Γr称为相关门。

另外,记忆单元c可以是向量,门的维度和记忆单元的维度一样,这样可以在不同维度记忆不同序列的关键内容,保证一句话的多个关键内容可以往后传递。

五、LSTM

长短时记忆网络(Long Short Term Memory),简称LSTM,是另一种网络模型,也可以保证记忆单元可以往后传递。

1、对照GRU和LSTM

LSTM引入了三个门,比GRU多一个门,主要在于计算记忆单元c的时候,不是使用Γu和1-Γu,而是使用Γu(更新门)和Γf(遗忘门),另外引入了Γo(输出门)的概念。

区别即不是用本序列的激活函数a作为记忆函数c,而是将激活函数a乘以输出门Γo作为激活函数c。

2、LSTM结构图

结构图如下所示。

需要说明的是,计算三个门的时候,除了考虑上一序列的激活函数a、本序列的输入x,通常还需要考虑上一序列的记忆单元c(称为窥视孔连接,peephole connection,保证门第i个元素只影响后面门的第i个元素,而不影响其他元素)。

3、优缺点

GRU只有两个门,因此结构简单,计算速度快,可以进行大规模的运算。

LSTM有三个门,因此可以更为灵活的设计整个结构,功能更加强大。通常设计网络的时候使用LSTM的更多。

六、BRNN

双向循环神经网络(Bidirectional RNN),主要解决的问题是前面序列的元素无法感知后面序列输出的问题。

前面的RNN网络,序列都受到前面序列的计算结果a以及本序列的输入x,却对后面序列的计算结果a无感知。而实际的句子,前后的关联性非常强,因此需要BRNN来解决这个问题。

BRNN解决的方式很简单,即正向和方向序列一起计算,正向序列从前往后计算,反向序列从后往前计算,对于每个序列分别得到一个激活函数,最终计算输出值y的时候综合了两个激活函数的结果,公式如下图所示:

BRNN有一大缺点,即计算的时候需要整个序列都出现才可以进行处理,而无法边接收序列边处理。即必须等一句话说完才可以开始处理,无法在说话过程中进行处理。

七、深层RNN

前面的RNN都是单层计算就得到结果,实际上,也可以经过多层次的运算,如下图所示:

但是实际上,三层左右对于RNN已经很多,因为其将输入拆成了序列单独处理,已经处理的非常详细了。

有些结构中,会将某些序列单独进行多层的处理,而不再和其他序列连接,如上图的y和y的第三层之后的层。

深层RNN中的RNN,可以是普通RNN、GRU、LSTM等,也可以结合BRNN。

——written by linhxx 2018.03.19

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180319G0LPVC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券