Я пытаюсь понять внимание Бахданауса, используя следующий учебник: 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))
имеет вид (batch_size, max_len, Внимание_units)?
Используя правила умножения матриц, я получил следующие результаты:
a) Форма себя.W1 (last_inp_de c) -> (1, hidden_units_de c) * (hidden_units_de c, Внимание_units) = (1, внимание_units)
b ) Форма себя.W2 (last_inp_en c) -> (max_len, hidden_units_de c) * (hidden_units_de c, Внимание_units) = (max_len, Внимание_units)
Затем мы складываем a) и б) quntaties. Как мы получаем размерность (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
? Потому что мы хотим, чтобы альфа была скалярной?