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

上图是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。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容