为什么BERT中的矩阵称为查询,键和值



在伯特的变压器单元中,有称为查询,键和值的模块,或者简单地q,k,v。

基于BERT纸和代码(尤其是在Modeling.py中(,我对具有单个注意力头的注意模块(使用Q,k,v(的伪代码的理解如下:

q_param = a matrix of learned parameters
k_param = a matrix of learned parameters
v_param = a matrix of learned parameters
d = one of the matrix dimensions (scalar value)
def attention(to_tensor, from_tensor, attention_mask):
    q = from_tensor * q_param
    k = to_tensor * k_param
    v = to_tensor * v_param
    attention_scores = q * transpose(k) / sqrt(d)
    attention_scores += some_function(attention_mask) #attention_mask is usually just ones
    attention_probs = dropout(softmax(attention_scores))
    context = attention_probs * v
    return context

请注意,Bert使用"自我注意",因此from_tensorto_tensor在Bert中是相同的;我认为这两者都只是上一层的输出。

问题

  1. 为什么矩阵称为查询,键和值?
  2. 我在算法的伪代码表示中犯了任何错误?

对于您的第一个问题,伯特是基于2017 Vaswani等人的" Transformer模型的编码器"您需要的所有注意力"。查询,密钥和值的隐喻已经出现在该论文中(尽管我了解到这不是上面评论以来的来源(。但是,这个比喻实际上最适合变压器的另一部分,即解码器。这是因为正如您所说,编码器使用自我注意力,在我看来,查询和钥匙在Bert中起着对称的作用。因此,也许对于变压器的解码器而不是伯特(Bert(而言,理解这个隐喻会更容易。

在我的理解中,在Vaswani等人的变压器模型中,查询和键允许解码器层的所有位置j-1的所有位置通过注意分数参加编码器层j的所有位置。然后,通过查询和键选择值:注意层的结果是由注意分数加权的值之和。查询和密钥的投影决定了每个位置的注意力。例如,极端情况可能是查询是由身份函数投影的,并且将键投影到置换量,该置换将位置i移至位置i+1。键和查询的点产物将使解码器层的每个位置j-1的每个位置都可以在Encoder layer j中进入位置。因此,解码器层j-1被称为查询,当它与键一起决定解码器层中的每个位置j-1中的每个位置(再次但不称为值(将有助于。

我相信每个令牌都会给予彼此的注意分数;因此,有代币,另一个令牌和分数。我认为关键是第一个令牌,查询是第二个令牌,值是分数。之后,为了推断,这些注意力头层为下一个最有可能的令牌提供了分数。这只是我的猜测。大多数学术论文都是有原因的。尽管学术界需要同行评审,但学术界也希望保护其秘密。变形金刚的真正窍门是掩盖。蒙面令牌成为标签。然后想想有监督的学习。如果您理解这一点,就可以理解变形金刚中的注意力头。这是一个吐出logits的分类器。

最新更新