自注意力机制开启大规模预训练时代
1 从机器翻译模型举例
1.1把编码器和解码器联合起来看待的话,则整个流程就是(如下图从左至右所示):
1.首先,从编码器输入的句子会先经过一个自注意力层(即self-attention),它会帮助编码器在对每个单词编码时关注输入句子中的的其他单词
2.接下来,自注意力层的输出会传递到前馈(feed-forward)神经网络中,每个位置的单词对应的前馈神经网络的结构都完全一样(仅结构相同,但各自的参数不同)
3.最后,流入解码器中,解码器中除了也有自注意力层、前馈层外,这两个层之间还有一个编码-解码注意力层,用来关注输入句子的相关部分(和seq2seq模型的注意力作用相似)
1.2把编码器和编码器联合起来看待的话,则整个流程就是(如下图从下至上所示):
1.最底下的编码器接收的是嵌入向量,之后的编码器接收的是前一个编码器的输出
2.输入序列中每个位置的单词都各自单独的路径流入编码器,即各个单词同时流入编码器中,不是排队进入.
3.在自注意力self-attention层中,这些路径两两之间是相互依赖的,而前馈层(feed-forward)则没有这些依赖性,所以这些路径在流经前馈层(feed-forward)时可以并行计算
1.1 自注意力机制计算
在Transformer中,自注意力机制则将对其他单词的“理解”融入到当前处理的单词中。当模型处理每个位置的词时,self-attention允许模型看到句子中其他位置有关联或相似的单词/信息作为辅助线索,以更好地编码当前单词。
重要程度便用所谓的权重表示(权重来自于该词/向量本身跟其他各个词/向量之间的相似度),权重越大的单词代表与『该词』越相关(某种意义上可以认为是越相似),从而对理解『该词』越重要,然后把该词编码为包括该词在内所有词的加权和
计算自注意力有两种方式:一种通过向量,一种通过矩阵。
1.3.1 计算自注意力第一步:生成查询向量、键向量和值向量
从每个编码器的输入向量(即每个单词的词向量)生成三个向量:查询向量query-vec、键向量key-vec、值向量value-vec ,这三个向量的生成方法是把输入的向量分别乘以三个不同的权重矩阵、、,得到Q、K、V,而这些权重矩阵是在模型训练阶段中训练出来的「最后通过反向传播不断优化学习得出」。举例说明,在我们有了权重矩阵后,对于单词、分别而言