Не совсем. К сожалению, рисунок 1 в упомянутой статье немного вводит в заблуждение. Дело не в том, что шесть уровней кодирования параллельны, как можно понять из рисунка, а в том, что эти уровни последовательны , что означает, что скрытое состояние / выход из предыдущего уровня используется в последующий слой в качестве входного Ваше выходное измерение будет точно таким: 2 * hidden_size
, прежде чем оно будет помещено в конечный проекционный слой, который снова меняет размер в зависимости от ваших спецификаций.
Мне не совсем понятно, что делает описание add в слое, но если вы посмотрите на эталонную реализацию , то она, кажется, не имеет отношения к ответ. В частности, обратите внимание, что функция кодирования в основном
def encode(...):
encode_inputs = self.embed(...)
for l in num_layers:
prev_input = encode_inputs
encode_inputs = self.nth_layer(...)
# ...
Очевидно, что здесь происходит немного больше, но это иллюстрирует основной c функциональный блок сети.