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

循环神经网络(二)

——GRU、LSTM、BRNN、deep RNN

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

一、概述

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

二、语言模型和序列生成

1、语言模型

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

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

2、RNN语言模型的工作

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

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

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

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

3、RNN模型

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

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

4、新序列采样

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

5、基于字符的采样

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

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

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<t-1>,以及本序列的输入值x<t>,经过tanh函数,计算得到本序列的激活函数a<t>,并且经过softmax,得到本序列的输出y~<t>。

2、GRU

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

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

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

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

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

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

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

五、LSTM

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

1、对照GRU和LSTM

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

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

2、LSTM结构图

结构图如下所示。

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

3、优缺点

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

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

六、BRNN

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

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

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

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

七、深层RNN

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

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

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

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

——written by linhxx 2018.03.19

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-03-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杂七杂八

线性分类器损失函数与最优化(下)

损失函数可以量化某个具体权重集W的质量。而最优化的目标就是找到能够最小化损失函数值的W 。

1454
来自专栏null的专栏

UFLDL笔记——自我学习

注:最近打算将UFLDL教程重新看一遍,其实里面有很多关于神经网络以及深度学习的知识点很有用,但是只是学习深度学习的话有一些内容就有点多余,所以想整理一个笔记,...

3645
来自专栏marsggbo

DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型

一、为什么选择序列模型 序列模型可以用于很多领域,如语音识别,撰写文章等等。总之很多优点。。。 二、数学符号 为了后面方便说明,先将会用到的数学符号进行介绍。 ...

42510
来自专栏null的专栏

简单易学的机器学习算法——梯度提升决策树GBDT

梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算...

83112
来自专栏人工智能

机器学习笔记

基本术语 数据集(data set): 一组数据的集合 样本/示例(instance/sample):数据集中的一个事件或对象 属性/特征(attribute/...

1989
来自专栏杨熹的专栏

权重初始化的几个方法

其中第一步 权重的初始化 对模型的训练速度和准确性起着重要的作用,所以需要正确地进行初始化。

2162
来自专栏机器学习算法原理与实践

决策树算法原理(上)

    决策树算法在机器学习中算是很经典的一个算法系列了。它既可以作为分类算法,也可以作为回归算法,同时也特别适合集成学习比如随机森林。本文就对决策树算法原理做...

1163
来自专栏机器学习算法与Python学习

循环神经网络(RNN)

前言: 前馈神经网络的输入和输出的维数都是固定的,不能任意改变。当处理序列数据时,前馈神经网络就无能力为了。因为序列数据是变长的。为了使得前馈神经网络能处理变长...

3186
来自专栏机器学习算法原理与实践

异常点检测算法小结

    异常点检测,有时也叫离群点检测,英文一般叫做Novelty Detection或者Outlier Detection,是比较常见的一类非监督学习算法,这...

2103
来自专栏超然的博客

Hierarchical Attention Based Semi-supervised Network Representation Learning

1. 提出SHANE 模型,集成节点结构,文本和标签信息,并以半监督的方式学习网络嵌入

882

扫码关注云+社区

领取腾讯云代金券