一、掩码自注意力机制
1.什么是掩码自注意力机制
掩码自注意力机制是在自注意力机制的基础上,通过引入掩码来控制模型在计算注意力权重时所能看到的信息范围。其主要目的是在序列生成任务中,防止模型在预测当前位置的输出时“偷看”未来的信息,确保模型只能利用当前位置之前的信息进行预测。
2.与自注意力机制的区别
例如有“机器学习很有趣”这句话,普通自注意力机制每个词在处理时都可以看到整句话的所有词,比如“机器”这个词会关注“学习”、“很”、“有趣”,“学习”这个词也能看到“机器”、“很”、“有趣”,“有趣”这个词同样能看到整句话中的所有其他词。而掩码自注意力机制每个词只能看到自己和它之前的词,不能看后面的词。例如:
“机器”只看到了自己。
“学习”只看到了“机器”和自己,但看不到后面的词。
“很”只看到了“机器”和“学习”,但看不到**“有趣”**。
“有趣”只看到了“机器”、“学习”、“很”,因为后面没有词了
3.掩码自注意力机制的实现
(1)生成掩码矩阵:创建一个上三角矩阵(不包含对角线),将上三角部分设置为负无穷或一个非常大的负数,其他部分设置为0。
(2)应用掩码:在计算注意力权重之前,将掩码矩阵加到查询和键的点积结果上。这会使得被掩码的位置在经过softmax函数后,注意力权重接近于零。
(3)计算注意力:使用掩码后的注意力权重对值向量进行加权求和,得到最终的输出。
它被用在transform的解码器部分
二、多头自注意力机制
之前说到注意力机制是对输入向量进行qkv的计算,我们这里的多头注意力机制是对输入向量进行不同的线性变换,将其降维生成不同的qkv矩阵,称之为不同的头,分别计算注意力,将每个头的输出拼接起来,再经过一次线性变换得到最终的输出。上面的图实际上计算这一过程
三、自注意力机制为什么需要位置编码
在自注意力机制中,输入的所有词(或向量)是并行处理的,模型本身不具备词与词之间相对位置的概念。但是句子中的词序对语义理解非常重要,比如在句子 “猫追狗” 和 “狗追猫” 中,虽然词汇相同,但顺序的不同导致了语义的完全变化。位置编码可以帮助模型知道句子的正确顺序。因此,为了让模型知道词在句子中的顺序,位置编码被引入到每个词向量中,以保留句子中词的顺序信息。