人工智能深度学习的RNN、LSTM架构和self- attention

35 阅读8分钟

李宏毅老师详细教学视频

参考self- attention

参考RNN

目录

  • 一、RNN和LSTM
  • 二、Self-attention
  • 三、Self-attention与CNN RNN GNN对比

一、RNN和LSTM

RNN

1.1 slot filling任务

  • 让机器读一个句子:I would like to arrive Hainan on March 2nd.

1.2 RNN的基本结构是什么?

如果用Feedforward network解决slot filling, 会是什么样呢?首先要把Hainan表示成一个vector,可以用one-of-N encoding,也可用word hashing来表示,假设现在用one-of-N encoding,那么这个network的输出就是Hainan属于每一个slot的概率。

image.png

但是这样会存在一个问题,testing时遇到另一个句子:I would like to leave Hainan on March 2nd. Hainan在这个句子中是place of departure,可在RNN中输入Hainan它的输出依旧是destination的几率最高。这说明神经网络需要有memory,这就引出了RNN。

在RNN中,hidden layer的output会存在memory中,下一次在input vector进去之后会八之前存在memory的信息拿出来看,memory可以看作是另一个输入

下图中红线代表存储信息,蓝色代表读取memory。

image.png

通过重复使用同一个网络,RNN依次读取一个句子,每都一个单词就产生一次输出。如果改变输入单词的顺序,输出也会随之改变。

image.png

如果输入的单词不一样,存在memory的信息也就不一样,那么下一次输出也不一样,可以参考下图的例子。

image.png 然RNN可以是deep的,可以有很多个hidden layer,上述例子中假设只有一层hidden layer

1.3不同种类的RNN

  1. 把the output of hidden layer存在memory的叫做Elman Network(4.2的例子) ,把the output of output layer存在memory的叫做Jordan Network在Jordan中, the output of output layer是有target的,所以Jordan的performance会更好。 image.png
  2. 双向训练

image.png

1.4 什么是LSTM (Long short-term memory)?

  • RNN有什么关系

  • 目前为止讲的RNN是最简单的版本,实际上的memory是长成LSTM这样的,一般来说LSTM和RNN这两个名词可以互相代替。

    LSTM可以看成一个有4个inputs,1个output的特殊neuron。4个inputs分别是

    • 待处理数据输入
    • 控制input gate的数值输入(控制新数据是否被叠加)
    • 控制 forget gate 的数值输入(控制memory中的值是否被更新)
    • 控制output gate的数值输入 (控制memory中的值是否被输出)

image.png *

image.png

  • 那么实作上这个neuron是如何工作的呢?假设我们现在有一个最简单的LSTM,每个gate的input都是一样的vector,那么我们这边在做的时候就是每一个input乘以每个gate的matrix,然后通过active function进行计算。这里做一个最简单的人肉LSTM。假设我们有一个序列是:

image.png

工作流程 image.png

简化的LSTM是

image.png

真正的LSTM还是更复杂的!LSTM会把上一个输出 ℎ^t 作为下一个输入的一部分, 也会把memory cell的值 c^t 作为下一个输入的一部分。c^t 也被叫做peephole。

image.png

二 Self-attention

1应用情境

输入任意长度个向量进行处理。

从输入看:

  • 文字处理(自然语言处理)

    • 将word表示为向量

      • one-hot
      • word-embedding
  • 声音信号处理

    • 每个时间窗口(Window, 25ms)视为帧(Frame),视为向量
    • 每个节点视为一个向量

      • Social graph(社交网络图)
      • 分子式【one-hot】

从输出看

  • √ 输入输出数量相等【每个向量都有一个标签】⇒sequence Labeling

    • 词性标注(POS tagging)
    • 语音辨识(每个vector对应phoneme)
    • 社交网络(每个节点(人)进行标注【是否推送商品】)
  • 整个输入序列只有一个输出

    • 文本情感分析
    • 语者辨认
    • 分子的疏水性
  • 由模型决定输出的数目【seq2seq】

    • 翻译
    • 语音辨识

2基本原理

image.png 1. 特点

输出对每一个向量处理后的带黑框的向量(考虑整个序列 sequence 和 单个向量个体 的 信息)。将这些向量再连接一个 FC 全连接层,输出标签,得到对应结果

其中,self-attention 的功能是处理整个 sequence 的信息,而 FC 则是处理某一个位置的信息,Self-attention + FC 可以交替使用,知名文章:Attention is all you need ⇒Transformer

image.png

image.png 输入:一串的 Vector,这个 Vector 可能是整个 Network 的 Input,也可能是某个 Hidden Layer 的 Output

输出:处理 Input 以后,每一个 bi 都是考虑了所有的 ai 以后才生成出来的

  1. 计算相关性:有 点积additive 两种方法计算相关性,我们主要讨论 点积 这个方法。输入的两个向量分别乘不同的矩阵,左边这个向量乘上矩阵 Wq 得到矩阵 q(query),右边这个向量乘上矩阵 Wk 得到矩阵 k(key),再把 q 跟 k 做 dot product(点积),逐元素相乘后累加得到一个 scalar 就是 相关性 α

image.png 把 a1 乘上 Wq 得到 q,叫做 Query(就像是搜寻相关文章的关键字,所以叫做 Query) 然后将 ai 都要乘 Wq 得到 k,叫做 Key,把这个Query q1 和 Key ki 进行 点积操作 就得到 相关性 α( α 叫做 Attention Score,表示 Attention计算出的 vector 之间的相关性)

image.png

attention score 还要经过一层 softmax 才能用于后续处理,其中 softmax 也可以换成其他的 activation function

分别抽取重要信息,根据关联性作加权求和得到 bi (一次性并行计算出 bi ,不需要依次先后得出)

优点: bi 是并行计算得出

image.png

3. 矩阵的角度表示 Self-attention 计算过程

① 计算 k,q,v (其中 Wq 、Wk 和 Wv 都是要学习的网络参数矩阵)

image.png

② 计算 α 并 Normalization

image.png ③ 计算 b

image.png 其中,

  • I 是 Self-attention 的 input(一排 vector),每个 vector 拼起来当作矩阵的 column
  • 这个 input 分别乘上三个矩阵, 得到 Q K V
  • 接下来 Q 乘上 K 的 transpose,得到 A 。可能会做一些处理,得到 A' ,叫做Attention Matrix生成 Q 矩阵就是为了得到 Attention 的 score
  • A' 再乘上 V,就得到 O,O 就是 Self-attention 这个 layer 的输出

二、Multi-head Self-attention

1. 特点

使用多个 q k v 组合,不同的 q k v 负责不同种类的相关性 例如在下图中,一共有2类, 1类的放在一起算,2类的放在一起算。相关性变多了,所以参数也增加了,原来只需要三个 W 矩阵,现在需要六个 W 矩阵

image.png

2. 计算步骤

  • 先把 a 乘上一个矩阵得到 q
  • 再把 q 乘上另外两个矩阵,分别得到 q1 跟 q2,代表有两个 head;同理可以得到 k1, k2,v1, v2
  • 同一个 head 里的 k q v 计算 b.

image.png

  • 将各个 head 计算得到的 bi 拼接,通过一个 transform得到 bi,然后再送到下一层去

3. Positional Encoding

每个向量所处的“位置”需要被编码

方法:每个位置用一个 vector ei 来表示它是 sequence 的第 i 个。加和到原向量中。

image.png

image.png

三 Self-attention与CNN RNN GNN对比

image.png

1. 和CNN的对比

CNN 可以看成简化版的 self-attention,CNN 就是只计算感受域中的相关性的self-attention。

  • CNN:感知域(receptive field)是人为设定的,只考虑范围内的信息
  • Self-attention:考虑一个像素和整张图片的信息 ⇒ 自己学出“感知域”的形状和大小

结论:

CNN 就是 Self-attention 的特例,Self-attention 只要设定合适的参数,就可以做到跟 CNN 一模一样的事情

self attention 是更 flexible 的 CNN

⇒ self-attention需要 更多的数据 进行训练,否则会 欠拟合;否则CNN的性能更好

  • Self-attention 它弹性比较大,所以需要比较多的训练资料,训练资料少的时候,就会 overfitting
  • CNN 它弹性比较小,在训练资料少的时候,结果比较好,但训练资料多的时候,它没有办法从更大量的训练资料得到好处

image.png

image.png


2. 和 RNN 的对比

  • 对 RNN 来说,最终的输出要考虑最左边一开始的输入 vector,意味着必须要把最左边的输入存到 memory 里面并且在计算过程中一直都不能够忘掉 一路带到最右边,才能够在最后一个时间点被考虑 (依次按顺序输出)
  • 对 Self-attention 可以在整个 sequence 上非常远的 vector之间 轻易地抽取信息(并行输出,速度更快,效率更高)

image.png

3. 和 GNN 的对比

  • 在 Graph 上面,每一个 node 可以表示成一个向量

  • node 之间是有相连的,每一个 edge 标志着 node 跟 node 之间的关联性

  • 比如:在做Attention Matrix 计算的时候,只需计算有 edge 相连的 node

  • 因為这个 Graph 往往是人為根据某些 domain knowledge 建出来的,已知这两个向量彼此之间没有关联(图矩阵中对应结点 i 与 结点 j 之间没有数值),就没有必要再用机器去学习这件事情

image.png

MORE

冷知识:有人说广义的 Transformer,指的就是 Self-attention

Self-attention 有非常非常多的变形,Self-attention 它最大的问题就是,它的运算量非常地大

paper:Long Range Arena比较了各种不同的 Self-attention 的变形

Efficient Transformers: A Survey 这篇 paper,介绍各式各样 Self-attention 的变形