Внимание Богданауса в нейронном машинном переводе с вниманием

Я пытаюсь понять внимание Бахданауса, используя следующий учебник: 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)))

У меня две проблемы:

  1. Я не могу понять, почему форма 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)?

  2. Почему мы умножаем tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc)) на self.V? Потому что мы хотим, чтобы альфа была скалярной?


person DY92    schedule 05.08.2020    source источник


Ответы (2)


  1. ) Я не могу понять, почему форма tf.nn.tanh (self.W1 (last_inp_dec) + self.W2 (input_enc)) равна (batch_size, max_len, Внимание_units)?

Из раздела комментариев кода в class BahdanauAttention

query_with_time_axis shape = (размер партии, 1, скрытый размер)

Обратите внимание, что размер 1 был добавлен с использованием tf.expand_dims, чтобы форма была совместима с values для добавления. Добавленное измерение 1 транслируется во время операции сложения. В противном случае входящая форма была (размер партии, скрытый размер), что было бы несовместимо

значения shape = (batch_size, max_len, скрытый размер)

Добавление формы query_with_time_axis и формы values дает нам форму (batch_size, max_len, hidden size)

  1. ) Почему мы умножаем tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc)) на self.V? Потому что мы хотим, чтобы альфа была скалярной?

self.V - последний слой, результат которого дает нам оценку. Инициализация случайного веса слоя self.V обрабатывается keras за сценой в строке self.V = tf.keras.layers.Dense(1).

Мы не умножаем tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc)) на self.V.

Конструкция self.V(tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc)) означает - ›tanh активации, являющиеся результатом операции tf.nn.tanh(self.W1(last_inp_dec) + self.W2(input_enc)), образуют входную матрицу для одиночного выходного слоя вывода, представленного self.V.

person Utpal Mattoo    schedule 20.09.2020

Формы немного отличаются от тех, что вы указали. Может быть, лучше всего это понять на прямом примере?

Предполагая, что 10 единиц на уровне выравнивания и 128 измерений встраивания в декодере и 256 измерений в кодировщике и 19 временных шагов, тогда:

Формы last_inp_dec и input_enc будут (?, 128) и (?, 19,256). Теперь нам нужно развернуть last_inp_dec по оси времени, чтобы сделать его (?, 1,128), чтобы было возможно сложение.

Веса слоя для w1, w2, v будут (?, 128,10), (?, 256,10) и (?, 10,1) соответственно. Обратите внимание, как self.w1 (last_inp_dec) работает с (?, 1,10). Он добавляется к каждому из self.w2 (input_enc), чтобы придать форму (?, 19,10). Результат передается в self.v, и на выходе получается (?, 19,1), что является желаемой формой - набором из 19 весов. Softmaxing придает весу внимания.

Умножение этого веса внимания на каждое скрытое состояние кодировщика и суммирование возвращает контекст.

На ваш вопрос о том, зачем нужен 'v', это необходимо, потому что Bahdanau предоставляет возможность использования 'n' единиц в слое выравнивания (для определения w1, w2), и нам нужен еще один слой сверху, чтобы массировать тензор обратно к желаемой форме - набор весов внимания… по одному для каждого временного шага.

Я только что опубликовал ответ на странице Понимание линейной алгебры внимания Богданау со всеми формирует задействованные тензоры и веса.

person Allohvk    schedule 15.11.2020