Я пытаюсь понять внимание Бахданауса, используя следующий учебник: https://www.tensorflow.org/tutorials/text/nmt_with_attention
Расчет следующий:
self.attention_units = attention_units
self.W1 = Dense(self.attention_units)
self.W2 = Dense(self.attention_units)
self.V = Dense(1)
score = self.V(tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc)))
У меня две проблемы:
Я не могу понять, почему форма
tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc))
(размер партии, max_len, единицы внимания)?Используя правила умножения матриц, я получил следующие результаты:
a) Форма self.W1 (last_inp_dec) - ›(1, hidden_units_dec) * (hidden_units_dec, Внимание_units) = (1, Внимание_units)
б) Форма self.W2 (last_inp_enc) - ›(max_len, hidden_units_dec) * (hidden_units_dec, Внимание_units) = (max_len, Внимание_units)
Затем складываем а) и б) количества. Как мы получаем размерность (max_len, Внимание_units) или (batch_size, max_len, Внимание_units)? Как мы можем сделать сложение с другим размером второго измерения (1 против max_len)?
Почему мы умножаем
tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc))
наself.V
? Потому что мы хотим, чтобы альфа была скалярной?