Attention

注意力机制的演化

RNN

N vs N

输入输出等长

img $$ h_i = f(ax_i + bh_{i-1} + c) $$

N vs 1

输入 N 输出 1

img

1 vs N

输入 1 输出 N

img img

N vs M / Encoder-decoder / Seq2seq(变长)

输入 N 输出 M,如翻译问题,输入输出的单词不等长。

Encoder 将输入编码为 c,再作为输入传入 decoder。

img

LSTM

LSTM 为了解决 RNN 梯度消失问题,在 RNN 结构的基础上:

img

增加了遗忘门,一定概率遗忘上一层隐藏层的状态:

img

GRU

Attention + RNN(Encoder-decoder)

Attention机制通过在每个时间输入不同的c来解决问题

下图是带有 attention 机制的 decoder

img

以 encoder-decoder 翻译任务为例,输入的序列是“我爱中国”,因此,Encoder中的 h1h_1h2h_2h3h_3h4h_4就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文 c1c_1 应该和“我”这个字最相关,因此对应的 a11a_{11} 就比较大。c2c_2 应该和“爱”最相关,因此对应的 a22a_{22} 就比较大。最后的 c3c_3h3h_3h4h_4 最相关,因此 a33a_{33}a34a_{34} 的值就比较大。

img

Attention QKV

以下是 attention 机制单独使用的例子。

输入 qq,Memory 中以 (k,v)(k,v) 形式存储需要的上下文,其中 kk 是 question,vv 是 answer,qq 是新来的 question,根据与 qq 相似的历史 kk,带权 vv 求和,输出 cc

计算步骤

  1. 在 Memory 中寻找相似 k(score function):ei=a(q,ki)e_i = a(q,k_i)
  2. 归一化(alignment function):α=softmax(ei)\alpha = softmax(e_i)
  3. 读取内容(context vector function):c=iαivic = \sum_i \alpha_i v_i

Self-attention TODO

Attention 总结

img

计算区域

Soft attention:对所有key求权重,进行加权

Hard attention:对一个 key 权重为 1,其余权重为 0。无法求导,因此需要用强化学习。

Local attention:用 hard 方法定位到一个区域,区域内用 soft 方法

所用信息

Genreal attention:

Local attention:

结构层次

单层 attention:常用方法,用一个 query 对一段原文进行一次 attention

多层 attention:一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务。

多头 attention:《Attention is All You Need》用到了多个query对一段原文进行了多次attention,每个query都关注到原文的不同部分,相当于重复做多次单层attention

模型

CNN + attention:

LSTM + attention:

相似度计算

点乘:s(q,k)=qTks(q,k)=q^T k

矩阵相乘:s(q,k)=qTks(q,k)=q^T k

cos 相似度:s(q,k)=qTkqks(q,k)=\frac{q^T k}{|q|\cdot|k|}

串联方式:s(q,k)=concat(q,k)s(q,k)=concat(q,k)

MLP:s(q,k)=vTtanh(aq+bk)s(q,k)=v^T \tanh(aq + bk)

Transformer

TODO

BERT

TODO

参考

https://zhuanlan.zhihu.com/p/91839581

https://zhuanlan.zhihu.com/p/85038315

本文有帮助?