本篇文章是机器学习的笔记(简化版)
Self-Attention的优势
- 并行化处理:self-attention允许模型同时处理序列中的所有元素,这与传统的递归/循环神经网络(RNN)相比,RNN需要按顺序处理序列,self-attention可以并行化计算,大大提高了训练效率。
- 长距离依赖捕捉:self-attention能够捕捉序列中任意两个元素之间的关系,无论它们在序列中的距离有多远。
- 多头注意力:通过多头注意力进一步增强,允许模型同时从不同的表示子空间捕捉信息。
- 相对位置编码:通过相对位置编码来增强使模型能够理解序列中元素的相对位置关系。
Self-Attention工作过程
我在刚看到有关self-attention的解析的文章时,总是会看到q,k,v这三个东西,只是知道相乘,但是具体细节也不是太了解,直到看了相关的课程,才略懂一下。
课程链接:2021 - 自注意力机制 (Self-attention)
假设现在有一个input是包含四个单词的句子,一个单词我们视为一个vector,四个vector分别叫做a1~a4,self-attention的目的就是要得到这一整个句子(sequence)的四个词之间的关系,如下图,我们需要求出的值就是vector b1b4,以及a1a4的关系值α(α也叫attention score).
α(attention score)求法 Dot-product
有很多种方法来求解这个α的模组,例如Dot-product,additive……课程里主要讲解了Transformer中常用的Dot-product.
Tips:inner-product = Scalar-product = Dot-product 计算方式都是相同位置数值相乘再求和
根据α求b1
分解如何从a1a4得到α然后再进一步算出b1b4,一共可以分为两步(画图太难了,以下展示手稿):
经过以上两步就可以求出b1的值了
矩阵乘法的角度
从输入矩阵得到QKV矩阵的过程如下,就是分别乘以一个权重矩阵,Wq,Wk,Wv.
在整个Self-attension计算过程中,只有权重矩阵Wq,Wk,Wv是需要通过学习learn出来的,其他的都是已知的或者人为设定的。
Multi-head Self-attention
多头注意力机制和之前说所的不同的地方在于得到q,k,v之后,再乘以heads个数不同矩阵,再次得到两个不同的向量,然后之后处理的步骤差不多,只不过再求解b(i,1) 时,所使用的数据都是与之对应的q(i,1),k(i,1),v(i,1)。
得到b(i,1)与b(i,2)之后,再与一个矩阵Wo相乘得到最后的bi.
Positional Encoding
我们上文所述的都是没有提到位置信息的
例如:一个四个词的句子为 I saw a saw,那么在上面所说的作为四个向量a1~a4输入时,是没有顺序的概念而言的,但是实际上,如果我们要完成的任务时对一个sequence的词性进行分类,那么它在sequence中的位置时相当重要的,这个时候就引进了一个位置编码(positional encoding)的概念.
其实在就是最开始input的向量时,加上一个位置编码的vector,这个位置编码的vector一般称为e,现存有许多种方式,但是仍然是一个尚待研究的问题 。