Naive RNN & LSTM & GRU

对于做NLP的新人来说第一个接触到的模型大概就是RNN,RNN 应该算是NLP任务中Hello World了。对于业界一般说使用RNN指的的LSTM,而并非是RNN,因为LSTM作为RNN结构模型太普遍了。

什么的RNN

RNN,其实是Recurrent Neural Network 的简称,翻译过来就是循环神经网络。对于NLP任务使用RNN来建模,还要从语言模型说起。因为语言是一种序列,比如:”我喜欢吃苹果”一共6个字,现在如果把最后一个“果”去掉,形成“我喜欢吃苹__”,相信很多人都知道要填“果”,为什么呢? 因为前面给定的字已经给了我们一种语境,通过这个语境我们就知道“苹”后面非常大的概率是写“果”。也就是说我们需要从前文信息获取信息来对但前词进行推断。
这和RNN 有什么联系呢?RNN叫做循环神经网络,在这个网络中有一个“大脑”,这个“大脑”专门记录历史信息,这样就可以把历史信息记忆下来做推断

RNN 什么样子

传统RNN,一般称为Naive RNN是一种最简单的RNN形式。从RNN名字的“循环”两个字知道,RNN是一种循环结构。这种循环结构表示一个句子(无论它有多长),其中的每一个字都采用同一个网络,使用相同的权重(权重共享)。它就像工厂流水线上操作员,RNN就是操作员,而句子中每个字(或者词)就是要操作的商品。他们都会经过RNN进行处理,但是对于每个字模型权重都是相同(这一点非常重要)。

Naive RNN & LSTM & GRU_第1张图片
Naive RNN

上图是Naive RNN的模型结果图,左边了模型框架图,右边了每个词展开后的时序图吧。

RNN 工作原理

在RNN中当一个字到达后(),需要先将它进行Embedding(就是把它转化成向量,比如Word2Vec技术),之后把它和之前记忆进行融合(记住当前信息),在根据记住的信息进行输出。总共分两步

  1. 记录当前信息
    其实记录当前信息就是把当前输入与历史信息进行融合。公式如下:

    公式中X 表示当前输入向量,U 表示线性转换权重,S 表示记忆细胞,下表t 表示时刻,W 表示权重,b是Bias。
  2. 生成当前结果

评价RNN

  1. 结构问题
    RNN最大优势就是天然符合语言模型行为(n-Gram模型),具备了得天独厚的优势,这是其他什么CNN、Transformer 不具备的。
    但是就好像“成为风云、败也风云”一样。RNN最大问题也是由于其自身结果。由于RNN必须处理完第一个词才能处理第二个词,这样就无法进行并行计算,在神经网络中并行计算是提高的运行速度的重要方式,但是RNN受限于其自身结果,所有无法进行并行。
  2. 梯度消失问题
    首先,解释什么是梯度消失,梯度消失说的是在反向传播过程中,梯度从输出层,逐层传递到输入层时,梯度几乎为0的情况。这样就导致了参数几乎不会更新。
  3. 长文本依赖问题
    RNN 把所有历史信息全部压缩到了一个内部缓存(S)中,这样当句子比较长时,当前词就比较困难获取开始信息,因为RNN是不管三七二十一把历史信息进行保留,眉毛胡子一把抓。

LSTM

LSTM 全名叫做长短期记忆模型,英文名称为: Long Short-Term Memory,从名字来看应该是叫长的短期记忆网络,所谓的短期记忆网络就是传统的RNN,LSTM 就是一个记忆力比 传统RNN好的网络。
既然有了RNN,为什么要提出LSTM呢? 正如前文所言,RNN存在着这样或者那样的问题,为了解决这些问题才提出了LSTM,也就是LSTM可以解决传统RNN一些问题。

LSTM 结构

LSTM可以看成是在一个三居室的房子玩密室逃脱游戏,想进入和走出房间必须按照游戏设计人的想法。
在LSTM中一共有三个门(相当于三居室的三扇门并且每个人都有一个门卫),每个门卫都具有自己特殊职责,都不是吃干饭的。

Naive RNN & LSTM & GRU_第2张图片
LSTM

上图应该是经典的LSTM图了,相信每个玩NLP的人都看到过。从图中看到一共有三个 ,每个 代表这一个门,分别叫做“遗忘门”、“输入门”、“输出门”。
为什么使用 作为门控开关呢,这主要原因是 的值域空间在[0,1]比较容易操作(0表示全部忽略信息,1 表示全部保留信息)。乍一看,这LSTM很复杂啊,的确相对于Naive RNN ,LSTM要复杂的多但是只要搞清了LSTM运行逻辑其实和Naive RNN 大同小异。

LSTM 运行逻辑

与Naive RNN 不同的是在LSTM中一共有两个缓存状态,分别是 和 ,这里 才是对应的Naive RNN中的隐藏状态。
在LSTM 中输入依然为词向量,这里就不在赘述词向量是啥了,但是词向量需要先经过与进行拼接,之后在进行4个线性变换:

这四个公式中有三个激活函数是,表示是三个门控,是输入门, 是输出门,是遗忘门,而另一个公式激活函数是,它是对当前输入加入最近历史信息()的非线性表示(相当于进入房间还要先另个狗牌-门禁卡,表示一下之前在小区记录的信息)。
之后就是一顿骚操作了

  1. 更新当前记忆
    刚刚已经计算了遗忘门,我们根据遗忘门对历史信息进行过滤,遗忘门就好像一个笊篱(厨房用具),和普通用的笊篱不同,这个笊篱上的洞有的大(数值比较接近1)有的小(数值比较接近0),这样历史进行被笊篱这么已过滤就形成了一个新向量。具体操作就是

    这个东西是哈德马乘法,就是两个矩阵对应位置直接做乘法。

再者:
在上述4个公式中,其中有一项表示当前输入值,虽然允许你进入房间,但是输入门同样是一个笊篱,需要对 进行筛选,公式如下:

当通过了遗忘门和输入门之后,就要更新当前记忆

  1. 输出当前值
    如果想走出房间,必须拿到 ,并且把它进行变换成一把开门的钥匙,之后拿这个这把钥匙把门打开,才能看到门外守候的门卫大哥。
    制作开门钥匙:

    收获奖励,走出房间

到此为止,一个完成LSTM 流程已经走完,其实与Naive RNN 做一下对比,LSTM 中主要就是有两步步骤
计算隐藏状态

输出

LSTM 内涵

LSTM 是长 ,短期记忆,为什么要叫这个名字呢?
从刚才运行逻辑看在LSTM中一共有两个记忆项,分别是 和 ,需要说明一点的是的更新是比较快的,而变化比较慢,这样表示了长期记忆,而表示短期记忆

LSTM 解决了Naive RNN 问题了吗

其实LSTM是解决了Naive RNN的梯度消失问题,但是对于长文本依赖只是暂时缓解一下,并没有从根本上解决。

GRU

LSTM是一个比较好模型,但是同样存在一些确定就是过程太复杂,能否有一个简化版本的LSTM ,这是GRU就出现了。
GRU的原理和LSTM原理一样,它只是LSTM的简化版本。GRU的模型图如下:

Naive RNN & LSTM & GRU_第3张图片
GRU

上面整张图是台湾大学李宏毅老师讲课时PPT截图,老师做LSTM 和GRU课件时非常辛苦,特别是将人肉LSTM时,非常值得尊敬。

GRU 原理

GRU 可以看成是做菜,一共有三个步骤,材料准备,上火,出锅。

材料准备

材料一共有三个,分两组准备,一个是门控信息,另一个是临时记忆信息

制作门控

在GRU中不在有3个门,而是两个门分别称为重置门和更新门,与LSTM一样,对于当前输入需要先和历史记忆进行合并

公式中 表示重置门,自然就是更新门。

临时记忆信息

更新记忆

更新记忆应该是GRU中最重要最核心的操作了,因为这一步就产生 ,计算公式如下:

简单解释一下,的取值范围是 [0,1],值越大表示信息保留越多,当 取值大多数是为1 时表示,比较重视当下信息,反之当 取值大多是0 是表示重视历史信息,忽略当前信息。
GRU比较高明地方是通过 同时控制了遗忘和选择两个操作,Nice。

你可能感兴趣的:(Naive RNN & LSTM & GRU)