美文网首页
Naive RNN & LSTM & GRU

Naive RNN & LSTM & GRU

作者: LoveAnny | 来源:发表于2020-11-13 17:38 被阅读0次

对于做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

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

RNN 工作原理

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

  1. 记录当前信息
    其实记录当前信息就是把当前输入与历史信息进行融合。公式如下:
    S_t = tanh(UX + WS_{t-1} + b)
    公式中X 表示当前输入向量,U 表示线性转换权重,S 表示记忆细胞,下表t 表示时刻,W 表示权重,b是Bias。
  2. 生成当前结果
    y = g(WS_t + b)

评价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中一共有三个门(相当于三居室的三扇门并且每个人都有一个门卫),每个门卫都具有自己特殊职责,都不是吃干饭的。

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

LSTM 运行逻辑

与Naive RNN 不同的是在LSTM中一共有两个缓存状态,分别是 Ch,这里 C 才是对应的Naive RNN中的隐藏状态h
在LSTM 中输入依然为词向量,这里就不在赘述词向量是啥了,但是词向量需要先经过与h_{t-1}进行拼接[h_{t-1}::X],之后在进行4个线性变换:
\begin{align} z &= tanh(W [h_{t-1}::X]) \\ z^i &= \sigma(W_i [h_{t-1}::X])\\ z^f &= \sigma(W_f [h_{t-1}::X])\\ z^o &= \sigma(W_o [h_{t-1}::X])\\ \end{align}
这四个公式中有三个激活函数是\sigma,表示是三个门控,z^i是输入门,z^o 是输出门,z^f是遗忘门,而另一个公式激活函数是tanh,它是对当前输入加入最近历史信息(h_{t-1})的非线性表示(相当于进入房间还要先另个狗牌-门禁卡,表示一下之前在小区记录的信息)。
之后就是一顿骚操作了

  1. 更新当前记忆
    刚刚已经计算了遗忘门,我们根据遗忘门对历史信息进行过滤,遗忘门就好像一个笊篱(厨房用具),和普通用的笊篱不同,这个笊篱上的洞有的大(数值比较接近1)有的小(数值比较接近0),这样历史进行被笊篱这么已过滤就形成了一个新向量。具体操作就是
    z^f \bigodot C^{t-1}
    \bigodot 这个东西是哈德马乘法,就是两个矩阵对应位置直接做乘法。

再者:
在上述4个公式中,其中有一项z表示当前输入值,z虽然允许你进入房间,但是输入门同样是一个笊篱,需要对z 进行筛选,公式如下:
z^i \bigodot z
当通过了遗忘门和输入门之后,就要更新当前记忆
C^t = z^f \bigodot C^{t-1} + z^i \bigodot z

  1. 输出当前值
    如果想走出房间,必须拿到 C^t,并且把它进行变换成一把开门的钥匙,之后拿这个这把钥匙把门打开,才能看到门外守候的门卫大哥。
    制作开门钥匙:
    h_t = z^o \bigodot tanh(C^t)
    收获奖励,走出房间
    y^t = \sigma(Wh_t)

到此为止,一个完成LSTM 流程已经走完,其实与Naive RNN 做一下对比,LSTM 中主要就是有两步步骤
计算隐藏状态
\begin{align} C^t &= z^f \bigodot C^{t-1} + z^i \bigodot z \\ h_t &= z^o \bigodot tanh(C^t) \end{align}
输出
y^t = \sigma(Wh_t)

LSTM 内涵

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

LSTM 解决了Naive RNN 问题了吗

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

GRU

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

GRU

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

GRU 原理

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

材料准备

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

制作门控

在GRU中不在有3个门,而是两个门分别称为重置门和更新门,与LSTM一样,对于当前输入x_t需要先和历史记忆进行合并
\begin{align} r &= \sigma(W^r [h_{t-1}::x_t]) \\ z &= \sigma(W^z [h_{t-1}::x_t]) \end{align}
公式中 r 表示重置门,z自然就是更新门。

临时记忆信息

h' = tanh(W [h_{t-1}::x_t])

更新记忆

更新记忆应该是GRU中最重要最核心的操作了,因为这一步就产生 h_t,计算公式如下:
h_t = (1-z)h_{t-1} + z \bigodot h'
简单解释一下,z的取值范围是 [0,1],值越大表示信息保留越多,当 z 取值大多数是为1 时表示,比较重视当下信息,反之当z 取值大多是0 是表示重视历史信息,忽略当前信息。
GRU比较高明地方是通过z 同时控制了遗忘和选择两个操作,Nice。

相关文章

网友评论

      本文标题:Naive RNN & LSTM & GRU

      本文链接:https://www.haomeiwen.com/subject/jjppbktx.html