-->

AI内参_112_107_基于门机制的RNN架构LSTM与GRU

你好,我是洪亮杰。

今天我和你分享的主题是基于门机制的RNN架构,LSTM与GRU.这周我们继续来讨论基于深度学习的文本分析模型。

这些模型的一大特点就是更加丰富的利用了文字的序列信息,从而能够对文本进行大规模的建模。

在上一次的分享里,我们聊了对序列建模的深度学习利器。

递归神经网络RNN我们分析了文本信息中的序列数据,了解了如何对文本信息中最复杂的一部分进行建模。

同时还讲了在传统机器学习中非常有代表性的隐马尔科夫模型HMM的基本原理,以及RNN和HMM的异同。

今天我们进一步展开RNN这个基本框架看一看在当下都有哪些流行的RNN模型实现。

为了能让你对今天要进一步介绍的RN模型有更加深入的了解。

我们先来回顾一下RNN的基本框模。

一个RNN通常有一个输入序列x和一个输出序列。

Y这两个序列都随着时间的变化而变化。

也就是说,每一个时间点,我们都对应着一个x和一个YRNN,假定x和y都不独立发生变化,它们的变化和关系都是通过一组隐含状态来控制的。

具体来说,时间t时刻的隐含状态有两个输入,一个输入时间t时刻之前的所有隐含状态,一个输入是当前时刻,也就是时间t时刻的输入变量x时间t时刻的隐含状态。

根据这两个输入会产生一个元素,这个输出就是t时刻的y值。

那么在这样的一个框架,下一个最简单的RNN模型是什么样子的呢?我们需要确定两个元素。

第一个元素就是在时刻t究竟如何处理过去的隐含状态和现在的输入,从而得到当前时刻的隐含状态,这是一个需要建模的元素。

第二个,如何从当前的隐含状态到输出变量y这是另外一个需要建模的元素。

最简单的RN模型。

对,这两个建模元素是这样选择的。

通常情况下,在时间t一时刻的隐含状态是一个向量,我们假设叫STE.那么这个时候我们有两种选择。

第一种选择是用一个线性模型来表达对当前时刻的隐含状态。

St的建模,也就是把STE和XT当做特性串联起来。

然后用一个矩阵w当做是线性变换的参数,有时候我们还会加上一个偏差项,比如用b来表示。

那么在这样的情况下,当前的隐含状态可以认为是所有过去隐含状态以及输入的异阶线性变换结果。

可以说这基本上就是最简单直观的建模选择了。

第二种选择是如何从ST变换成为y这一步可以更加简化,那就是认为ST直接就是输出的变量。

Y这也就是选择了隐含状态和输出变量的一种一一对应的情况。

在这个最简单的RN模型基础上,我们可以把第一个转换从线性转换变为任何的深度模型的非线性转换。

这就构成了更加标准的RNN模型。

我们刚刚介绍的RNN模型看上去简单直观,但在实际应用中,这类模型有一个致命的缺陷,那就是实践者们发现在现实数据面前,根本没法有效的学习这类模型什么意思呢?所有的深度学习模型都依赖一个叫做反向传播的算法来计算参数的梯度,从而用于优化算法。

但是RNN的基本架构存在一个叫做梯度爆炸或者梯度消失的问题。

对于初学者而言,你不需要去细究这两种梯度异常的细节。

只需要知道,在传统的RNN模型下,这两种梯度异常都会造成优化,算法的迭代无法进行,从而导致我们无法学习到模型的参数。

这一结局想要在现实的数据中使用RNN,我们就必须解决梯度异常这一问题。

而在解决梯度异常这个问题的多种途径中有一类途径现在变得很流行。

那就是尝试在框架里设计门机制。

这个门机制的由来主要是着眼于一个问题。

那就是在我们刚才介绍的简单的RNN模型中,隐含变量。

从一个时间点到另一个时间点的变化是整个向量变换为另外的整个向量。

研究人员发现说,我们可以限制这个向量的变化。

也就是说,我们通过某种方法不是让整个向量进行复制,而是让这个隐含向量的部分单元发生变化。

如果要达到这样的效果,我们就必须设计一种机制,使得这个模型知道当前需要对隐含向量的哪些单元进行复制,哪些单元不进行复制而进行变化。

我们可以认为进行复制的单元是它们被屏蔽了,进行转换。

这一操作也可以认为它们被门阻挡了,这就是门机制的来源。

从逻辑上思考如何设计门机制从而起到这样的作用呢?一种方法就是为隐含变量引入一个伴随变量g这个伴随变量拥有和隐含变量一样的单元个数,只不过这个伴随变量的取值范围是零或者一零代表不允许通过。

一代表可以通过。

这其实就是门机制的一个简单实现。

我们只需要利用这个向量和隐含向量相应单元相乘,就能实现控制这些单元的目的。

当然,这只是一个逻辑上的门机制,实际的门机制要有更多,细节也更加复杂。

基于门机制的RNN架构都有哪些呢?这里介绍两个比较流行的分别是LSTM和GRU.我们这里不对这些模型展开详细的讨论,而是给你一个直观的介绍,帮助你从宏观上把握这些模型的核心思想。

Lstm的思路是把隐含状态分为两个部分,一部分用来当做存储单元,另外一部分当做工作单元,存储单元用来保留信息,并且用来保留梯度,跨越多个时间点。

这个存储单元是被一系列的门控制,这些门其实是数学函数用来模拟刚才我们说的门的机制。

对于每一步来说,这些门都要决定到底需要多少信息,继续保留到下一个时间点。

总体来说,LSTM模型的细节很多,也很复杂,虽然LSTM已经成为了一种典型而且成功的RNN模型,但是实践者们还是觉得这个模型可以简化,于是就催生了GRU模型。

Gru模型的核心思想其实就是利用两套门机制来决定隐含单元的变化。

一个门用于决定哪些单元会从上一个时间点的单元里复制过来,并且形成一个临时的隐含状态。

另外一个门则控制这个临时状态和过去状态的融合。

Gru在结构上大大简化了LSTM的繁复,在效果上依然能够有不错的表现。

今天我为你介绍了文本序列建模利器RNN的几个实例,一起来回顾一下要点。

第一,我们复习了RN的基本概念和框架。

第二,我们聊了两个带有门机制的经典的RNN模型,分别是LSTM和GRU.最后给你留一个思考题,RNN需要门机制。

你认为到底是建模的需要,还是需要解决梯度异常的问题,从而能够让优化算法工作?欢迎你给我留言,和我一起讨论。