В единицах преобразования BERT имеются модули, называемые Query, Key и Value, или просто Q, K, V.
На основе бумаги BERT и код (особенно в моделирование.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;Я думаю, что оба они просто являются выходными данными из предыдущего слоя.
Вопросы
- Почему матрицы называются Query, Key и Value?
- Я допустил какие-либо ошибки в своем представлении алгоритма в псевдокоде?