[关闭]
@lokvahkoor 2020-05-09T09:46:37.000000Z 字数 2301 阅读 1579

LSTM / GRU / Attention / Transform

NLP


LSTM

LSTM结构示意

LSTM有两个传输状态,一个 (cell state),和一个 (hidden state)

保存模型的长期记忆,在训练过程中改变的速度较慢, 而在训练过程中变化的速度则比较快。

计算过程

首先使用LSTM的当前输入和上一个状态传递下来的拼接计算得到四个中间变量:




这里的分别代表input gate, foget gate, output gate。运算符表示把a和b拼接成一个大的矩阵。

接下来:

LSTM计算过程

上图中 代表Hadamard Product,也就是操作矩阵中对应的元素相乘。 运算符 表示矩阵加法。

首先,作为遗忘门控,筛选上一个中哪些内容需要遗忘。

接着,作为输入门控,对模型输入 中的内容进行筛选,然后把筛选后的结果合并到中。

最后,使用 进行放缩,然后经输出门控过滤,再通过一个全链接layer,得到模型输出。

peephole connections

在原本拼接的基础上,再拼上cell state,即:

peephole计算示意

这样使得各个门结构可以看到cell state中的信息,在某些场景下提高了模型训练效果

GRU

由于LSTM的参数过多,所以其训练难度相对较大。因此,我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。

双向RNN

论文:Bidirectional recurrent neural networks

u=199233699,1108022898&fm=173&app=49&f=JPEG.jpg-17.8kB

由于模型在理解句子时,常常需要完整的句子信息(既包含输入词前面的内容,也包含输入词后面的内容),因此双向RNN诞生了。

双向RNN有两种类型的连接,一种是向前的,这有助于我们从之前的表示中进行学习,另一种是向后的,这有助于我们从未来的表示中进行学习。

正向传播分三步完成:

v3deg9eg79.png-169.9kB

这里的分号代表把两个向量连接在一起

vkkonaid8r.png-217.4kB

Attention

论文:Attention Is All You Need

CS224n 从机器翻译到Attention 这个从45:28开始看


基于RNN的机器翻译模型存在一个问题,就是模型在翻译时依赖于输入序列最后传递的隐藏层参数(如下图中的),如果前面输入的句子是个长句,则模型在翻译时很容易遗忘前面输入的句子。

15573329-25bdb43b18fbd18f.png-52.6kB

Attention机制让模型在翻译时可以读到输入序列的所有隐藏层状态()并且自由地选择哪些是它需要关注的东西,因此在一定程度上解决了上述问题。

360截图175711226567100.png-265.2kB

因此,我们可以说,attention机制使得翻译系统可以利用更多的上下文信息(数据也证明了这一点,因为带有attention的模型在长句的翻译上表现得更加出色)

360截图175711188610784.png-422.8kB

self-attention机制可以理解为一个新的layer,它和RNN一样,输入一个sequence,输出一个sequence:

微信截图_20200509085829.png-236kB

它出自谷歌2017年发布的paper:Attention Is All You Need

那么它具体是怎么工作的呢?

微信截图_20200509090621.png-299.7kB

首先,是一串输入序列,对于每一个,我们让它通过一个全链接层得到embedding:,也就是, 接下来,让分别乘以三个不同的矩阵, , 得到, , 三个不同的向量,它们分别代表query, key和information to be extracted

接下来,拿每一个对每一个做attention,以为例:

微信截图_20200509092324.png-227.7kB

这里展示的只是一种attention的做法(Scaled Dot-Product Attention),除此之外,还有很多种计算Attention的方法,包括:

scores.png-39.1kB

它们有一个共同的特征:都是吃两个向量,然后输出一个值,代表由这两个向量计算出的得分

接下来,让得到的通过一个softmax layer,得到:

微信截图_20200509093214.png-202.6kB

然后,我们把和每一个相乘,并把结果累加起来,得到:

微信截图_20200509093828.png-202.5kB

以此类推,得到的就是self-attention的输出序列了。与一般的RNN不同的是,模型输出的每一个都考虑了从输入序列中获取的全部信息。

Transformer

Bert


参考:

  1. Attention原理和源码解析
  2. 李宏毅 seq2seq
  3. 李宏毅 transformer
  4. 李宏毅 bert/elmo/gpt
  5. Bidirectional RNN (BRNN)
  6. 人人都能看懂的LSTM
  7. 人人都能看懂的GRU
  8. 理解LSTM(通俗易懂版)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注