封面

前言

本文主要介绍在看李宏毅自注意机制视频的一些自我总结。

1.运行原理

图1 POS tagging

当利用全连接网络,输入一段话(I saw a saw(我看到一个锯子)),输出对应单词数目的标签(假设输出为单词的词性表示(名词,动词,形容词等)),如图1所示,这种情况下,我们很难获得正确的答案。为了使网络能够理解问题的含义,就需要考虑语句的上下文信息。可以利用滑动窗口,每个向量查看窗口(window)中相邻的其他向量的性质,其中窗口大小的选择是靠人工经验设定的。但是这种方式不能解决整条句子的分析问题。所以就引入了自注意力机制(Self-attention),其作用就是看一看输入句子中其他位置的单词,试图寻找一种对当前单词更好的编码方式。

图2 Sequence Labling

2. Self-attention

它的经典结构如图3所示,将一个语句向量送入Self-attention,产生对应个数的向量,然后再将结果送入全连接网络(FC),最终实现结果的预测(标签的输出)。

图3 Self-attention经典结构

同时也可以将图1这种结构堆叠,如图4所示。

图4 多结构堆叠

3. 运行机制

本节重点剖析Self-attention内部的计算流程,假定输入分别为a1a^1a1、a2a^2a2、a3a^3a3和a4a^4a4,输出分别为b1b^1b1、b2b^2b2、b3b^3b3和b4b^4b4。在计算时需要考虑之间的相关性(各输入对一个输出的影响),如图5所展示的样子。

图5 输出与输入的相关性

以输出b1b^1b1和输入a1a^1a1、a2a^2a2、a3a^3a3、a4a^4a4为例,来说明相关性。利用α\alphaα的值,来表示a1a^1a1与a4a^4a4之间的相关性,如图6所示。

图6 相关性表示

接下来便是如何计算α\alphaα值了。这里有两个可学习的参数,分别是WqW^qWq和WkW^kWk,将两输入分别与WqW^qWq和WkW^kWk进行向量相乘,可得qqq和kkk,最终进项Dot-product可得到α\alphaα,这一过程用流程图(图7左)表述如下。

图7 α的计算流程

然后我们分别计算两两之间的关联性,流程如图8所示,首先计算出q1q^1q1和k1k^1k1、k2k^2k2、k3k^3k3,可得下式:
q1=Wqa1k1=Wka2k2=Wka3k3=Wka4\begin{gathered} q^1=W^q a^1 \\ k^1=W^k a^2 \\ k^2=W^k a^3 \\ k^3=W^k a^4 \end{gathered} q1=Wqa1k1=Wka2k2=Wka3k3=Wka4​

之后将向量点乘,便得到了之间的关联性,如下式:
α1,2=q1⋅k2α1,3=q1⋅k3α1,4=q1⋅k4\begin{aligned} &\alpha_{1,2}=q^1 \cdot k^2 \\ &\alpha_{1,3}=q^1 \cdot k^3 \\ &\alpha_{1,4}=q^1 \cdot k^4 \end{aligned} ​α1,2​=q1⋅k2α1,3​=q1⋅k3α1,4​=q1⋅k4​

图8 $\alpha_{1,2}$,$\alpha_{1,3}$和$\alpha_{1,4}的计算流程

需要说明的是α1,2{\alpha _{1,2}}α1,2​也是需要计算的,然后将4个值通过softmax进行标准化,获得α′1,1{{\alpha '}_{1,1}}α′1,1​,α′1,2{{\alpha '}_{1,2}}α′1,2​,α′1,3{{\alpha '}_{1,3}}α′1,3​和α′1,4{{\alpha '}_{1,4}}α′1,4​,这些值可以同时计算得出(并行计算得出)。

图9 标准化实现

将得到的相关性分数α′1,1{{\alpha '}_{1,1}}α′1,1​,α′1,2{{\alpha '}_{1,2}}α′1,2​,α′1,3{{\alpha '}_{1,3}}α′1,3​和α′1,4{{\alpha '}_{1,4}}α′1,4​分别与输入特征相乘并相加后得到b1{b^1}b1,如下所示,流程图如图10所示:
b1=∑iα1,i′vi{v1=Wva1v2=Wva2v3=Wva3v4=Wva4\begin{gathered} b^1=\sum_i \alpha_{1, i}^{\prime} v^i \\ \left\{\begin{array}{l} v^1=W^v a^1 \\ v^2=W^v a^2 \\ v^3=W^v a^3 \\ v^4=W^v a^4 \end{array}\right. \end{gathered} b1=i∑​α1,i′​vi⎩⎨⎧​v1=Wva1v2=Wva2v3=Wva3v4=Wva4​​

图10 Extract information based on attention scores

我们以并行化(parallel)的方式得到b1{b^1}b1,b2{b^2}b2,b3{b^3}b3和b4{b^4}b4,如下图所示:

图11 并行化处理

从本节的分析当中,我们需要学习的参数有WqW^qWq,WkW^kWk和WvW^vWv,他们与输入向量相乘生成三个向量:查询向量query-vec、一个键向量key-vec和一个值向量value-vec。

可能有的读者有疑问了,设置这三个向量的用意何在或有何深意。实际上

  • 对于查询向量Query而言:query是当前单词的表示形式,用于对所有其他单词(key)进行评分,我们只需要关注当前正在处理的token的query。
  • 对于键向量Key而言: Key可以看做是序列中所有单词的标签,是在我们找相关单词时候的对照物。
  • 对于值向量Value而言:Value是单词的实际表示,一旦我们对每个单词的相关度打分之后,我们就要对value进行相加表示当前正在处理的单词的value。

4. 通过矩阵运算实现自注意力机制

然而实际中,上文的计算是以矩阵形式完成的,以便算得更快。那我们接下来就看看如何用矩阵实现的。从上分析可知,自注意力机制可学习的参数有3个WqW^qWq,WkW^kWk和WvW^vWv,qiq^iqi,kik^iki和viv^ivi的计算如下:

图12 $q^i$,$k^i$和$v^i$的计算

然后求得相关分数矩阵,一共有16项,即α1,1{{\alpha}_{1,1}}α1,1​,α1,2{{\alpha}_{1,2}}α1,2​,α1,3{{\alpha}_{1,3}}α1,3​和α1,4{{\alpha}_{1,4}}α1,4​,计算如图13所示:

图13 ${{\alpha}_{1,1}}$,${{\alpha}_{1,2}}$,${{\alpha}_{1,3}}$和${{\alpha_{1,4}}}$的计算]

图14 并行化运算(矩阵)

然后求解b1{b^1}b1,b2{b^2}b2,b3{b^3}b3和b4{b^4}b4,如下所示

图15 求解${b^1}$,${b^2}$,${b^3}$和${b^4}$

以上就是矩阵化的计算的过程,这一点和卷积神经网络类似,其特点是高效快速,很适合GPU和FPGA等设备进行计算。

最后我们对整个计算过程进行一个简单的归纳,定义I={a1,a2,a3,a4}I = \left\{ {{a^1},{a^2},{a^3},{a^4}} \right\}I={a1,a2,a3,a4}、Q={q1,q2,q3,q4}Q = \left\{ {{q^1},{q^2},{q^3},{q^4}} \right\}Q={q1,q2,q3,q4}、K={k1,k2,k3,k4}K = \left\{ {{k^1},{k^2},{k^3},{k^4}} \right\}K={k1,k2,k3,k4}和V={v1,v2,v3,v4}V = \left\{ {{v^1},{v^2},{v^3},{v^4}} \right\}V={v1,v2,v3,v4},可学习参数分别为WqW^qWq、WkW^kWk和WvW^vWv和输出O={b1,b2,b3,b4}O = \left\{ {{b^1},{b^2},{b^3},{b^4}} \right\}O={b1,b2,b3,b4}。通过以上公式定义可得QQQ、KKK和VVV,计算如下:
Q=WqIK=WKIV=WvI\begin{aligned} &Q=W^q I \\ &K=W^K I \\ &V=W^v I \end{aligned} ​Q=WqIK=WKIV=WvI​
之后便是求解注意力矩阵AAA和A‘A^‘A‘(标准化之后),在上文图14,我们已经进行了分析,所以不在赘述,直接给出公式:
A=KTQA′=softmax⁡(A)\begin{aligned} &A=K^T Q \\ &A^{\prime}=\operatorname{softmax}(A) \end{aligned} ​A=KTQA′=softmax(A)​
最终得到输出O={b1,b2,b3,b4}O = \left\{ {{b^1},{b^2},{b^3},{b^4}} \right\}O={b1,b2,b3,b4}的计算如下:
O=VA′O = VA'O=VA′

整个过程的简单归纳,如图16所示:

图16 自注意机制矩阵化计算流程

可能大家对上文的表述不太理解,我们可以换种方式进行表述,假设有两个输入单词以thinking machine为例,首先我们构建一个嵌入矩阵,其中$$

5. 多头注意力

上文实际上是单头注意力,其实在Transform中,应用更多的是多头注意力,那什么是多头注意力呢?其实特别简单,就是在分出来的qiq^iqi、kik^iki和viv^ivi,再一次进行分支操作,有多少个分支,就叫做多少个头,图17是一个双头注意力模型,和之前相比,可学习参数不仅仅只有WqW^qWq、WkW^kWk和WvW^vWv这三个,还有Wq,1{W^{q,1}}Wq,1、Wq,2{W^{q,2}}Wq,2、Wk,1{W^{k,1}}Wk,1、Wk,2{W^{k,2}}Wk,2、Wv,1{W^{v,1}}Wv,1和Wv,2{W^{v,2}}Wv,2,需要计算公式有:
qi,1=Wq,1qiqi,2=Wq,2qiki,1=Wk,1kiki,2=Wk,2kivi,1=Wv,1vivi,2=Wv,2vi\begin{aligned} q^{i, 1} &=W^{q, 1} q^i \\ q^{i, 2} &=W^{q, 2} q^i \\ k^{i, 1} &=W^{k, 1} k^i \\ k^{i, 2} &=W^{k, 2} k^i \\ v^{i, 1} &=W^{v, 1} v^i \\ v^{i, 2} &=W^{v, 2} v^i \end{aligned} qi,1qi,2ki,1ki,2vi,1vi,2​=Wq,1qi=Wq,2qi=Wk,1ki=Wk,2ki=Wv,1vi=Wv,2vi​

图17 双头注意力模型

此时的bi,1{b^{i,1}}bi,1和bi,2{b^{i,2}}bi,2如17图所示,即利用qi,1{q^{i,1}}qi,1、ki,1{k^{i,1}}ki,1、vi,1{v^{i,1}}vi,1以及qi,1{q^{i,1}}qi,1、kj,1{k^{j,1}}kj,1、vj,1{v^{j,1}}vj,1计算bi,1{b^{i,1}}bi,1,利用qi,2{q^{i,2}}qi,2、ki,2{k^{i,2}}ki,2、vi,2{v^{i,2}}vi,2以及qi,2{q^{i,2}}qi,2、kj,2{k^{j,2}}kj,2、vj,2{v^{j,2}}vj,2计算bi,2{b^{i,2}}bi,2


图18 ${b^{i,1}}$和${b^{i,2}

在得到bi,1{b^{i,1}}bi,1和bi,2{b^{i,2}}bi,2之后,在引入一个矩阵W0W_0W0​,进行运算可得到输出bib^ibi,如图19所示:

图19 模型最终输出

6. 参考

[1]多头自注意力机制:https://zhuanlan.zhihu.com/p/484524337
[2]台大李宏毅自注意力机制和Transformer详解:https://www.bilibili.com/video/BV1v3411r78R/?spm_id_from=333.337.search-card.all.click&vd_source=e3e56f2c8b99f0309ca6937cefb13991
[3][BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT]

Transformer之Self-attention相关推荐

  1. transformer中的attention为什么scaled

    简单的说是为了让attention得到的权值更加均匀一点. 在数量级较大时,softmax将几乎全部的概率分布都分配给了最大值对应的标签. 详见 transformer中的attention为什么sc ...

  2. Vision Transformer with Deformable Attention可变形注意力

    <Vision Transformer with Deformable Attention>笔记 方法 1.可变形机制 PVT的降采样导致信息丢失 滑动窗口注意力感受野增长慢(大目标不友好 ...

  3. [NLP]——Transformer中的attention为什么要做scale?

    前言 说起Transformer的self-attention,很容易想到下面的公式: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T ...

  4. Vision Transformer with Deformable Attention

    DAT title: Vision Transformer with Deformable Attention 论文:https://arxiv.org/abs/2201.00520 代码:https ...

  5. transformer:self-attention,muti-head attention,positional encoding

    文章目录 transformer和RNN.LSTM相比 seq2seq 编码器-解码器架构 What is Input? What is Output? N-N:each vector has a l ...

  6. Transformer解读之:Transformer 中的 Attention 机制

    encoder 的 attention 场景:现在要训练的内容是 I love my dog -> 我喜欢我的狗 那么在 encoder 端的输入是: I love my dog: 假设经过 e ...

  7. 图解Transformer模型(Multi-Head Attention)

    本文内容主要源于Attention is all you need: https://arxiv.org/abs/1706.03762 由于本人最近在研究文本的判别式模型,如文本分类任务,所以学习了T ...

  8. transformer 中的 attention

    来源:知乎-皮特潘 地址:https://zhuanlan.zhihu.com/p/444811538 大火的transformer 本质就是: 使用attention机制的seq2seq. 所以它的 ...

  9. Transformer(multi-head attention)

    文章目录 RNN CNN ATT self-attention(K/Q/V) Multi-head Attention 顺序问题 seq2seq with attention Transformer ...

  10. transformer中的attention为什么scaled?

    链接:https://www.zhihu.com/question/339723385 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 论文中解释是:向量的点积结果会很大,将softmax函数p ...

最新文章

  1. R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战
  2. 不可思议!这篇全篇脏话的文章竟然发表了
  3. Filter责任链模式
  4. python 面部识别_一文教你在Python中打造你自己专属的面部识别系统
  5. 2020年抖音创作者生态报告
  6. 产业研发用房是什么意思_新型产业用地(M0)之政策分享篇
  7. 攻击 | 神奇的木马(虚拟机模拟木马入侵)
  8. Spring中的Aop底层原理
  9. opengl渲染4k数据提高效率
  10. iptables NAT
  11. Nginx+DNS负载均衡实现
  12. ccproxy 6.61 注册机(纯绿/傻瓜/真正去除线程限制)
  13. 流程管理对企业有何价值?如何做好企业流程管理?
  14. 打印如下的图形:平行四边形
  15. Linux系列——Linux操作指令之ip指令详细理解及常用命令
  16. Java环境变量配置超详细教程
  17. IDEA 2020版 创建第一个WEB网站——教程
  18. win10搭建Java开发环境(2020年版)
  19. 差分约束系统相关练习题
  20. 招商银行信用卡中心实习生招聘(第二批)题解

热门文章

  1. 阿里云架构师马颂:云上高性能计算助力基因测序
  2. hdu 1553 Going Home【最大流最小费用流】
  3. 一位华为IT总监 职场是学习和感恩的
  4. python实训主要成果_Python实训周总结
  5. vscode快捷键(Mac版)
  6. 游戏原画 or 游戏建模?
  7. PCI Express系统结构学习 - 第二章
  8. nachos交叉编译器java_交叉编译 go 程序
  9. 面试了十几家软件测试公司谈谈我最近面试的总结
  10. frp做远程连接+ssh+http+https