вычисление оценок внимания в внимании Bahdanau в тензорном потоке с использованием скрытого состояния декодера и вывода кодировщика

Этот вопрос относится к нейронному машинному переводу, показанному здесь: Neural Machine Translation.

self.W1 и self.W2 инициализируются плотными нейронными слоями по 10 единиц каждый в строках 4 и 5 в __init__ функция class BahdanauAttention

В прилагаемом изображении кода я не уверен, что понимаю нейронную сеть прямой связи, настроенную в строке 17 и строке 18. Итак, я разбил эту формулу на части. См. Строку 23 и строку 24.

query_with_time_axis входной тензор для self.W1 и values вводится в self.W2. И каждый вычисляет функцию Z = WX + b, и Z складываются вместе. Размеры суммированных тензоров равны (64, 1, 10) и (64, 16, 10). Я предполагаю случайную инициализацию веса для обоих self.W1 и self.W2 обрабатывается Keras за кулисами.

Вопрос:

После сложения Z вместе возникает нелинейность (tanh) применяется для создания активации, и эта результирующая активация вводится на следующий уровень. self.V, который представляет собой слой только с одним выходом и дает нам score.

На этом последнем шаге мы не применяем функцию активации (tanh и т. Д.) К результату self.V(tf.nn.tanh(self.W1(query_with_time_axis) + self.W2(values))), чтобы получить единственный вывод из этого последнего слоя нейронной сети.

Есть ли причина, по которой функция активации не использовалась на этом последнем шаге?

1 ответ

Решение

Вывод внимания формирует так называемые энергии внимания, то есть один скаляр для каждого вывода кодера. Эти числа складываются в вектор, и этот вектор нормализуется с помощью softmax, что дает распределение внимания.

Фактически, на следующем шаге применяется нелинейность - softmax. Если вы использовали функцию активации до softmax, вы только уменьшили бы пространство распределений, которое может выполнять softmax.

Другие вопросы по тегам