自注意力机制self-attention

1.自注意力机制的提出

1.1 Vector Set as Input

  • 以往我们的输入都是向量,但是如果是一排向量(一段声音序号、一个图(将每个节点看作是一个向量)、一个分子(每一个原子看作是一个向量)),且向量数目会改变,每个向量的长度也可能会改变



  • 但是怎么处理将单词表示为一个向量集合中的向量,为了解决这个问题,我们可以使用
  1. 采用One-hot Encoding
  • 假设我们可以表示出所有的单词,但是这种编码方式看不出两个单词之间的联系
  1. 采用Word Embedding

1.2 输出的形式

1.2.1 Each vector has a label

  • 例如Sequence Labeling(序列标注,例如分析词性)

1.2.2 The whole sequence has a label

如果需要分析词性,则应联系上下文,开一个较大的window,但是不同输入长度也不同,就会变得麻烦,因此引入自注意力机制

2.self-attention工作方式

2.1 self-attention作用

  • Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已
  • 与一般注意力机制不同在于Query的来源不同,一般注意力机制中的query来源于目标语句(而非源语句),而自注意力机制的query来源于源语句本身(而非目标语句,如翻译后的语句)
  • self-attention会对一整个序列处理,input中有几个vector就会输出几个vector,输出的vector都是考虑一整个sequence以后才得到的,对于得到的向量再投入到fully connected neural,此时FC考虑的是基于整个sequence才输出,对于FC输出的仍可以用self-attention

2.2 self-attention工作机制

2.2.1 接受输入

  • self-attention接受的输入可以是初始的也可以是已经经过处理的,所以输入用a表示,而不是x表示,b1到b4是同时计算的,每个输出都是考虑所有的输入

    对于b1是如何输出的,我们需要考虑它对应的输入a1和其他输入向量之间的关联性

2.2.2 判断输入向量之间的关联性

  • 我们使用\(\alpha\) ,根据\(\alpha\)得出哪些向量和a1最有关系 ,得到attention score

  • 计算方法可以有多种

  • 也需要自己和自己做关联性,然后用激活函数输出,不一定要用softmax,可以用Relu等其他激活函数

2.2.3 根据计算的\(\alpha去抽取sequence里面重要信息\)

  • 在输入向量抽取新的向量v并乘以经过处理的attention score,哪个输入向量的attetion score最大,最后决定输出b1作用最大

2.2.4 矩阵的角度来重温

2.2.4.1 计算q、k、v

2.2.4.2 计算\(\alpha\)

2.2.4.3 计算\(b\)

  • 这里笔误,\(\hat{\alpha} 其实是\alpha^{'}\)

2.2.4.4 宏观看

  • I是指输入的vector集合,只有\(W^{q}、W^{k}、W^{v}需要训练\)

3. Multi-head Self-attention

  • 为什么要使用multi-head Attention?因为单个self-attention中Value 加权求和会降低词语分辨率

  • q和k相对应做Dot-product

4. Positional Encoding

  • 在NLP中,经过 word embedding,我们获得了词与词之间关系的表达形式,但是词在句子中的位置关系还无法体现

  • 前面所提到的selt-attention没有用到位置的信息(如果要用,比如说句子第一个单词一般不为动词)

  • 可以用Positional Encoding技术,加入词在句子中的位置信息

    1. 通过网络来学习;
    2. 预定义一个函数,通过函数计算出位置信息(采用了第2种方式)
  • 给每一个位置加一个位置向量\(e^{i}\),需要人设计

5. Truncated Self-attention

  • 为了加快运算,可以不用看整个序列,只需片段即可,而至于范围多大,则是人设定的

6. Self-attention的应用

6.1 Self-attention for Image

  • 处理图像时除了使用CNN,可以将图像看作向量集合,看成如图所示的三维向量

7. Self-attention VS CNN

  1. CNN只考虑感受野内的像素,而Self-attention考虑整张图象,所以CNN可以看作是简化版的Self-attention

  2. self-attention弹性大,所以需要更多训练资料,所以资料少的话容易overfitting,而CNN弹性小,训练资料少时效果较好

8. Self-attention VS RNN

  • RNN的应用大多可以被Self-attention更优替代
  • 引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征
  • 如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小
  • RNN没有办法并行化产生输出,只能一个接一个输出;Self-attention可以并行化输
posted @ 2024-10-19 13:35  awei040519  阅读(67)  评论(0)    收藏  举报