Что, черт возьми, такое Encoder & Decoder в модели seq2seq?
Этот блог дает на высоком уровне интуитивное представление о модели Seq2Seq, поэтому вам не нужно быть «специалистом по глубокому обучению», чтобы все это понять, для понимания этого блога будет достаточно базовых знаний о нейронных сетях.
Исследовательская статья Последовательное обучение с помощью нейронной сети считается прорывом в области обработки естественного языка после того, как Google опубликовал статью на Конференции по системам обработки нейронной информации (NIPS) . Разобравшись с Seq2Seq, можно приступить к чтению о трансформерах, концепциях внимания и других последних достижениях в области НЛП.
Начиная с самого начала, ранее уже были следующие RNN:
- Вектор в вектор (Vec2Vec) RNN
Эта модель принимает один вектор в качестве входных данных и производит один вектор в качестве выходных данных.
Примером может быть дословный перевод.
2. Последовательность в вектор (Seq2Vec) RNN
Модель RNN, в которой мы вводим последовательность на выходе, оказывается одним вектором.
Примером этого может быть предиктор языка,
我 爱 计算机 科学 (входная последовательность) дает китайский (выходной вектор)
3. Вектор в последовательность (Vec2Sec) RNN
Модель RNN, где входом является один вектор, а на выходе - последовательность.
4. Последовательность в последовательность (Seq2Seq) RNN
Да! Раньше у нас также была модель «Последовательность в последовательность», которая принимает входные данные как последовательность и обеспечивает последовательный вывод.
Примечание: она полностью отличается от архитектуры кодировщика-декодера, представленной в документе, которая объясняется немного позже в этот блог
Несмотря на наличие этой традиционной модели seq2seq RNN. Как эта статья могла стать прорывом?
Здесь, на рисунке выше, мы видим, что длина выходной последовательности такая же, как и у входной. Модель языкового перевода в том же случае. Если мы пытаемся преобразовать английский язык в язык хинди, это не обязательно означает, что длина последовательности на английском языке такая же, как и у последовательности на хинди. Вот где пригодятся кодировщик и декодер.
Кодировщик и декодер
Выше показана та же архитектура, предложенная в исследовательской статье Seq2Seq - кодировщик-декодер. Он состоит из двух основных компонентов:
1. Кодировщик
2. Декодер
Ниже показано хорошо различимое схематическое представление кодировщика и декодера. Основное преимущество использования модели кодировщика-декодера заключается в том, что длина входных данных и длина выходных данных могут быть разными.
- Каждая ячейка в этой архитектуре представляет собой сеть RNN (может быть либо сетью LSTM, либо сетью GRU).
- Кодировщик получает входные данные (A, B, C, ‹eos›), и каждая ячейка получает обратную связь из скрытого состояния (связи между каждой ячейкой).
- W - вектор контекста.
- Декодер - это часть, в которой создается вывод (X, Y, Z, ‹eos›).
Давайте попробуем подробно разобраться в каждом компоненте, чтобы мы могли понять все функции кодера, декодера и то, как информация передается от кодера к декодеру.
Кодировщик
Кодировщик - это повторяющаяся сеть RNN в каждой ячейке. Каждая ячейка получает один вектор, за которым следует маркер конца оператора ‹EOS›, который отмечает конец входной последовательности и генерирует вектор контекста W.
Он отвечает за ввод и передачу информации в следующую ячейку. Эта передаваемая информация известна как обратная связь (скрытое состояние) и отображается через ссылки между последовательными ячейками.
Упомянутая здесь формула используется для вычисления значения обратной связи скрытого состояния, которое содержит всю информацию до ввода последней ячейки. Здесь Wʰʰ - это вес, присвоенный предыдущему скрытому состоянию на отметке времени (t-1), а Wʰˣ - вес, присвоенный текущему ввод с отметкой времени t.
Вектор контекста - связь между кодировщиком и декодером
Вектор контекста содержит всю информацию из всех скрытых состояний внутри кодировщика и играет роль только ввода для части декодера.
Декодер
Декодер отвечает за генерацию вывода. Каждая ячейка получает выходные данные, сгенерированные из предыдущей ячейки с меткой времени (t-1), как входные данные текущей ячейки с меткой времени t.
W, вектор контекста, сгенерированный последней ячейкой кодера, действует как начальный ввод для ячеек RNN в декодере.
Ключевым моментом, на который следует обратить внимание, является то, что выходные данные, генерируемые ячейкой с отметкой времени t, используются в качестве входных данных для ячейки с отметкой времени t + 1.
Эти две формулы используются для вычисления обратной связи по скрытому состоянию и выходных данных каждой ячейки.
Это все основы, которые нужно знать о работе кодировщика и декодера. Эта статья стала прорывом в исследовательской и прикладной области обработки естественного языка (NLP), поскольку теперь длина последовательности вывода может отличаться от длины ввода, что делает ее надежной и очень полезной в случай машинного перевода, системы вопросов и ответов, моделей генерации диалогов и многих других областей.