Почему матрицы в BERT называются Query, Key и Value? - PullRequest
3 голосов
/ 25 июня 2019

В единицах преобразования 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;Я думаю, что оба они просто являются выходными данными из предыдущего слоя.

Вопросы

  1. Почему матрицы называются Query, Key и Value?
  2. Я допустил какие-либо ошибки в своем представлении алгоритма в псевдокоде?

1 Ответ

2 голосов
/ 29 июня 2019

В первом вопросе BERT основан на кодировщике модели трансформатора из бумаги 2017 Vaswani et al. «Внимание - все, что вам нужно». Метафора запросов, ключей и значений появляется уже в этой статье (хотя я узнал, что она не является источником этой идеи после комментариев выше). Тем не менее, метафора на самом деле работает лучше для другой части преобразователя, а именно декодера; Это потому, что, как вы говорите, кодировщик использует самообслуживание, и мне кажется, что запросы и ключи играют симметричную роль в BERT. Так что, возможно, было бы легче понять эту метафору для декодера преобразователя, а не для BERT.

Насколько я понимаю, в модели преобразователя Vaswani et al. Запросы и ключи позволяют всем позициям уровня декодера j-1 обслуживать все позиции уровня кодера j через оценки внимания. Затем значения выбираются запросами и ключами: результат уровня внимания представляет собой сумму значений, взвешенных по оценкам внимания. Проекции запросов и ключей определяют, где внимание уделяется каждой позиции. Например, крайним случаем может быть то, что запросы проецируются функцией идентификации, а ключи проецируются на перестановку, которая перемещает позицию i в позицию i+1. Точечное произведение ключей и запросов позволит каждой позиции слоя декодера j-1 обслуживать позицию перед ней в слое кодера j. Таким образом, уровень декодера j-1 упоминается как запросы, когда вместе с ключами он решает, сколько будет вносить каждая позиция в уровне декодера j-1 (опять же, но не упоминается как значения).

...