Как понять замаскированное многоголовое внимание в трансформаторе - PullRequest
0 голосов
/ 27 сентября 2019

В настоящее время я изучаю код трансформатора, но я не могу понять замаскированный многоголовочный декодер.В документе говорится, что это должно помешать вам увидеть генерирующее слово, но я не могу понять, если слова после генерации слова не были сгенерированы, как их можно увидеть?

Я пытаюсь прочитать код трансформатора (ссылка: https://github.com/Kyubyong/transformer). Маска достигнутого кода показана ниже. Она использует нижнюю треугольную матрицу для маскировки, я не могу понять, почему.

padding_num = -2 ** 32 + 1
diag_vals = tf.ones_like(inputs[0, :, :])  # (T_q, T_k)
tril = tf.linalg.LinearOperatorLowerTriangular(diag_vals).to_dense()  # (T_q, T_k)
masks = tf.tile(tf.expand_dims(tril, 0), [tf.shape(inputs)[0], 1, 1])  # (N, T_q, T_k)
paddings = tf.ones_like(masks) * padding_num
outputs = tf.where(tf.equal(masks, 0), paddings, inputs)
...