3

BERTの変換ユニット内には、Query、Key、Value、または単に 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_tensor、 とto_tensorは BERT と同じです。これらは両方とも、前のレイヤーからの単なる出力だと思います。

質問

  1. マトリックスがクエリ、キー、および値と呼ばれるのはなぜですか?
  2. アルゴリズムの疑似コード表現に誤りはありましたか?
4

2 に答える 2

3

最初の質問については、BERT は、 2017 年の Vaswani らの論文「Attention is all you need」の変圧器モデルのエンコーダに基づいています。クエリ、キー、および値の比喩は、その論文に既に記載されています (ただし、上記のコメント以来、それがこのアイデアの源ではないことを知りました)。ただし、メタファーは実際には、トランスフォーマーの他の部分、つまりデコーダーに最適に機能します。これは、あなたが言うように、エンコーダーが自己注意を使用するためであり、BERT ではクエリとキーが対称的な役割を果たしているように思えます。したがって、この比喩は、BERT よりもトランスフォーマーのデコーダーのほうが理解しやすいでしょう。

私の理解では、Vaswani らのトランスフォーマー モデルでは、クエリとキーにより、アテンション スコアを介して、デコーダー レイヤーj-1のすべての位置がエンコーダー レイヤーのすべての位置に対応できるようになります。j次に、クエリとキーによって値が選択されます。アテンション レイヤーの結果は、アテンション スコアによって重み付けされた値の合計です。クエリとキーの射影によって、各位置の注意がどこに置かれるかが決まります。たとえば、極端なケースとして、クエリが恒等関数によって射影され、キーが positioniから positionに移動する順列に射影されることがありますi+1。キーとクエリのドット積により、デコーダー層の各位置がj-1エンコーダー層の前の位置に対応できるようになりますj. そのため、デコーダー層は、キーと一緒に、デコーダー層の各位置(値とは呼ばれません) がj-1どれだけ寄与するかを決定するときに、クエリと呼ばれます。j-1

于 2019-06-29T16:26:35.647 に答える