Какими должны быть векторы / матрицы Query Q, Key K и Value V в torch.nn.MultiheadAttention? - PullRequest
0 голосов
/ 04 августа 2020

Следуя замечательному блогу , я реализовал свой собственный модуль самовнимания. Однако я обнаружил, что PyTorch уже реализовал модуль внимания с несколькими головами . Входные данные для прямого прохода модуля MultiheadAttention включают Q (вектор запроса), K (вектор ключа) и V (вектор значений). Странно, что PyTorch не просто берет входное вложение и вычисляет векторы Q, K, V внутри. В реализованном мною модуле самовнимания я вычисляю эти Q, K, V векторы из входных вложений, умноженных на веса Q, K, V. На данный момент я не уверен, какие векторные входные данные Q, K и V требуются модулю MultiheadAttention. Должны ли они быть Q, K и V весами или векторами, и должны ли они быть нормальными векторами, или это должны быть параметры?

1 Ответ

1 голос
/ 04 августа 2020

Если вы посмотрите на реализацию Multihead Внимание в pytorch. Q, K и V изучаются в процессе обучения. В большинстве случаев они должны быть меньше векторов вложения. Так что вам просто нужно определить их размер, все остальное берет на себя модуль. У вас есть два варианта:

    kdim: total number of features in key. Default: None.
    vdim: total number of features in value. Default: None. 

Вектор запроса имеет размер вашего вложения. Примечание: если kdim и vdim равны None, для них будет установлено значение embed_dim, чтобы запрос, ключ и значение имели одинаковое количество функций.

Для получения дополнительных сведений см. Исходный код: https://pytorch.org/docs/master/_modules/torch/nn/modules/activation.html#MultiheadAttention

Специально для этого класса: class MultiheadAttention (Module):

...