我们现在来思考这样一个问题?
问题一:Seq2Seq有什么缺点吗?
问题二:模型具有更强的上下文权重信息会怎样?
问题一答:Seq2Seq模型进行的是跨序列的样本相关性计算,这是说,经典注意力机制考虑的是序列A的样本之于序列B的重要程度。
来看一张经典老图,这张图在上一篇文章中多次提到,其中编码器部分传入的是序列A解码器部分输出的是序列B,而黄色圈C所传递的就是序列A的样本之于序列B的特征信息。
那么问题来了,序列A各token之间的信息对于序列A本身的重要程度就不需要考虑了吗?答案当然是NO!这也是传统注意力机制的缺点,而本节我们要学习的Attention自注意力机制,就是要让A序列对自己保持注意力发现自己序列中各token的重要程度,而不仅仅是序列A对于序列B的重要程度,
问题二答:来啦来啦别催,我们来回答第二个问题, 模型具有更强的上下文权重信息会怎样?当然是有更长的上下文权重信息,模型的理解能力理解程度会更优秀,效率也会更高。这就是自注意力机制的第二个优势,对更早输入的信息保持能力更强,而传统注意力机制随着信息一步步传递权重一步步叠加对于早期信息的持有能力会更若。
OK两个问题回答完了我们步入正题,为什么要引入自注意力机制Attention这个概念呢?因为本节要讲的Transformer就是引入了Attention模块,其实再简单清晰一点就是对于上节我们提到的对于Seq2Seq模块的RNN和LSTM部分进行了替换。就是对包浆老图中的标红部分进行了替换。
Attention模块又具有相对独立性。Transformer只是将其发扬光大,之后有很多网络结构都用到了子注意力机制。如:
CNN + Attention == Transformer
Attention + LSTM == Transformer
CNN + Transformer == ViT
1. 自注意力机制
1.1 Transformer中的自注意力机制运算流程
首先,transformer当中计算的相关性被称之为是注意力分数,该注意力分数是在原始的注意力机制上修改后而获得的全新计算方式,其具体计算公式如下: