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 と同じです。これらは両方とも、前のレイヤーからの単なる出力だと思います。
質問
- マトリックスがクエリ、キー、および値と呼ばれるのはなぜですか?
- アルゴリズムの疑似コード表現に誤りはありましたか?