Я пишу последовательность для последовательности нейронной сети в Pytorch. В официальном учебнике Pytorch seq2seq есть код для декодера внимания, который я не могу понять / думаю, что он может содержать ошибку.
Он вычисляет вес внимания на каждом временном шаге, объединяя выходные данные и скрытое состояние в это время, а затем умножая их на матрицу, чтобы получить вектор с размером, равным длине выходной последовательности. Обратите внимание, что эти веса внимания не зависят от последовательности кодировщика (в коде она называется encoder_outputs), что, я думаю, должно.
Кроме того, в статье, процитированной в учебном пособии , перечислены три различные функции оценки, которые можно использовать для вычисления весов внимания (раздел 3.1 в документе). Ни одна из этих функций не просто объединяет и умножает на матрицу.
Так что мне кажется, что код в руководстве ошибочен как в применяемой функции, так и в аргументах, передаваемых этой функции. Я что-то упустил?