Почему матрицы в BERT называются «запрос», «ключ» и «значение»?

Внутри блоков преобразования BERT есть модули, называемые Query, Key и Value, или просто Q, К, В.

На основе статьи BERT и код (особенно в models.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. Сделал ли я какие-либо ошибки в моем псевдокодовом представлении алгоритма?

person solvingPuzzles    schedule 25.06.2019    source источник
comment
Что касается вашего первого вопроса, я думаю, что метафора запросов, ключей и значений исходит из статьи Васвани и др. 2017 года. Внимание - это все, что вам нужно. В этой статье они описали архитектуру трансформатора, основанную на кодировщике и декодере. BERT основан на кодировщике трансформатора. Однако эта метафора на самом деле лучше всего подходит для декодера, потому что, как вы говорите, декодер использует самовнимание, и мне кажется, что запросы и ключи играют симметричную роль в BERT. Так что, возможно, было бы легче понять эту метафору для декодера преобразователя, чем для BERT.   -  person tomkot    schedule 25.06.2019
comment
* кодировщик должен использовать собственное внимание   -  person tomkot    schedule 25.06.2019
comment
@tomkot Спасибо за ваше предложение. Я потратил некоторое время на изучение статьи, и все, что вам нужно, - это код внимания. Я думаю, что главное, что меняет без самовнимания на уровне декодера, это: from_tensor - это результат модуля кодировщика, а to_tensor - это результат предыдущего модуля декодера. Это интересно. Но что в этом q,k,v делает более интуитивно понятным?   -  person solvingPuzzles    schedule 26.06.2019
comment
Насколько я понимаю, запросы и ключи позволяют всем позициям уровня j-1 декодера обслуживать весь уровень j кодера посредством оценок внимания. Затем значения выбираются запросами и ключами: результат представляет собой сумму значений, взвешенных по оценкам внимания. Прогнозы запросов и ключей определяют, на что направлено внимание каждой позиции. Например, крайним случаем может быть то, что запросы проецируются функцией идентификации, а ключи проецируются в перестановку, которая перемещает позицию i в позицию i + 1.   -  person tomkot    schedule 26.06.2019
comment
Точечный продукт ключей и запросов позволил бы каждой позиции уровня j-1 декодера соответствовать позиции перед ней в слое j кодера. Таким образом, уровень декодера j-1 называется запросами, когда вместе с ключами он решает, какой вклад будет вносить каждая позиция в уровне декодера j-1, и в этом случае это называется значениями.   -  person tomkot    schedule 26.06.2019
comment
@tomkot Ага, кажется, я понял! Если вы можете обобщить свои комментарии в поле «Ответ», я приму ваш ответ.   -  person solvingPuzzles    schedule 28.06.2019
comment
Большой! Я объединил свои комментарии в один ответ.   -  person tomkot    schedule 29.06.2019


Ответы (2)


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

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

person tomkot    schedule 29.06.2019

Я считаю, что каждому токену присваивается оценка внимания по отношению к другому токену; Итак, есть жетон, второй жетон и счет. Я думаю, что ключ - это первый токен, запрос - второй токен, а значение - это оценка. После этого, для вывода, эти слои головы внимания выставляют оценки для следующих наиболее вероятных токенов. Это всего лишь предположение с моей стороны. Большинство научных статей по какой-то причине загадочны. Хотя академические круги требуют экспертной оценки, академические круги также хотят защищать свои секреты. Настоящая уловка с трансформаторами - это маскировка. Замаскированные токены становятся меткой. Тогда просто подумайте о контролируемом обучении. Если вы это поймете, вы поймете, что у трансформеров голова внимания. Это классификатор, выдающий логиты.

person Micheal Bee    schedule 14.07.2021
comment
Поскольку я задал вышеупомянутый вопрос, я фактически переопределил BERT и лучше понимаю, как он работает. На самом деле нет такой смены токенов, как то, что вы говорите. Ответ @ tomkot выше соответствует моему пониманию. - person solvingPuzzles; 15.07.2021