深度学习系列
第一篇 局部最优点+鞍点+学习率的调节
第二篇 并行计算 深度学习 机器学习
第三篇 长短期记忆网络(LSTM)是什么怎么工作的呢?
第四篇 Dropout解析 代码实现
第五篇 Auto-encoder 自编码器
第六篇 ResNet,Xception,DenseNet优缺点对比
第六篇 STM网络(Spatial Transformer Network)常见疑问解答
第七篇 Self-attention入门级详解
文章目录
一、基本问题
1.Self-attention的输出
- 每一个向量输出有对应的标签。例如:语义标签
- 输入多个向量,但输出只有一个标签。例如:判断文章句子的正负面
- 输入多个向量,但是输出由模型去决定输出的大小。例如:语义翻译
Self-attention和RNN/LSTM的比较
- 对于单向的RNN而言,RNN当前节点获取的信息只是来自于前面节点的信息
但是,RNN是有双向的
- 对于双向的RNN,当前节点的信息来源于前后的信息和,但是最前面一个节点的信息传到当前节点需要一步步的传输,而对于self-attention来说,每个节点都能寻找与其他节点的关系,不需要一点点的传输才会获取前面节点的信息。而且self-attention能一次计算所有节点,速度更快。
二、Self-attention怎么运作的?
1.基本总览
self-attention的基本总览如下,可以把self-attention看成一层,如图,如果有四个变量输入,就会有四个对应的变量输出,但是新输出的变量,每一个都是整合了所有输入变量特征的。即它不是一个单一的变量,而且总览全局后形成的变量。
2. 那Self-attention这一层具体是怎么工作的呢?
首先,我们以第一个向量a1经过Self-attention变成b1为例子讲解,a1首先要找到它和其他向量的相关性。如下图所示。
那相关性怎么找呢?
其实就是计算一个系数α,具体的计算方式有多种。
Dot-product就是其中的一种,也是本文讲解的所使用的。它的计算方式是,对两个要计算相关性的向量先乘上一个矩阵,然后对两个矩阵进行乘积(相乘再相加),得到一个系数α。
但是也有例如Additive等其他计算方式。
这里我们使用Dot-product去计算α
这里还是以a1 为例,它乘上一个矩阵Wq,其他的向量乘上矩阵Wk,然后去计算出α,这个α也叫做attention score。
这里十分重要的一个点,是 a1 自己也要乘上Wk,也就是 a1 找自己和自己的关系,第二个 a1 要乘 Wk 去计算,第一个还是乘 Wq
最终的图示如下!
接下来是对计算出来的α进行Soft-max处理,如下图。得到了α’
但是我们最后是要得到一个b1,也就是总览全局得到的系数
所以接下来我们要做的是,把着写参数和向量变成一个新的向量。Self-attention是这样子计算的。首先,每个输入向量a乘上一个矩阵Wv变成一个新的向量V,再去和每一个α系数相乘,再相加,才变成b1。相关性越大,α越大,得到的b1与这个向量的关系就越大。
三. 从矩阵角度看这个过程
3.1 a向量的处理过程
我们把α1,α2,v1,v2这些合并在一起组合成矩阵,就得到了Q,K,V的矩阵 (α1,α2,v1,v2都是向量) ,如下图所示。
3.2 得到系数α的过程
每个q都得乘上k,那我们可以把k提取出来,变成矩阵。
3.3 系数α整体过程
就K不断乘q这些向量==(k是向量a乘Wk得到的,q是向量a乘Wq得到的)==
3.4最后的b数值
最后的b就是α乘V向量,把V向量合在一起就是V矩阵。
第三节只是通过矩阵这个角度理解第二节的东西
其中需要模型学习的就是Wq,Wk,Wv这三个生成q,k,w的矩阵参数。
四、自注意力机制的作用
最明显的一个作用,就是能得到不同节点上下文的信息。所以它常用于序列数据中。
随着发展,自注意力机制也可用去其他领域,如图像,将图像分割成向量,如5*10的图像,分割成5个10维向量。其目的就是找图像不同区域的一个特征关联。
五、self-attention的进阶版本
5.1 Multi-head self-attention多头注意力机制
多头注意力机制还是在注意力机制的框架下进行操作的,不同点是在每个节点,最后输出的b有多个。例如在二头的注意力机制中,每个节点最终需要得到的b有两个,所以,求得b所有东西都要有两份,如下图,每个节点q再乘上两个矩阵,变成两个q,每个k和v也如此。它们得到b所做的计算和注意力机制是一样的,只是数量上不一样。
最后得到的两个b,可以再经过一个矩阵合成一个b
多头的作用主要是能够学习到不同空间中的不同特征
5.2 添加位置信息的注意力机制
在自注意力机制中,每个节点虽然有上下文的信息,但却没有位置信息,如果我们想添加位置信息的话,就需要在ai中加入一个向量ei,表示位置信息。
这个ei可以是人设定了,也可以学习到
但是这方面我没做详细研究,这里就简单带过。
总结
以上就是我个人对self-attention的理解,希望配合上其他文章,能让初学者更容易理解。如果觉得有用,请大家点赞支持!!!!。