Decoder
Декодер (англ. Decoder, декодировщик) — в машинном обучении и глубоком обучении это компонент нейронной сети, основной задачей которого является преобразование закодированного представления (например, контекстного вектора или последовательности скрытых состояний, полученных от энкодера) в выходную последовательность данных (например, текст или изображение). Декодер генерирует выходные данные шаг за шагом, как правило, в авторегрессионном режиме.
В более широком смысле, в теории информации, декодер — это любое устройство или алгоритм, который преобразует закодированные данные обратно в их исходный или понятный формат.
Концепция и назначение
Если энкодер отвечает за понимание и сжатие входных данных, то декодер отвечает за генерацию и развертывание выходных данных. Он берёт компактное, богатое информацией представление и последовательно преобразует его в желаемый формат, будь то предложение на другом языке, текстовое описание изображения или последовательность музыкальных нот.
Ключевой характеристикой большинства декодеров является их авторегрессионная природа: для генерации следующего элемента последовательности (например, слова или пикселя) они используют как закодированное представление, так и все ранее сгенерированные элементы.
Декодер в различных архитектурах
Декодер в автоэнкодере
В архитектуре автоэнкодера, декодер выполняет задачу, обратную энкодеру:
- Энкодер сжимает входные данные в скрытое представление.
- Декодер берёт это скрытое представление и пытается восстановить (реконструировать) из него исходные данные.
Обучение такой сети позволяет использовать декодер отдельно для генерации новых данных, подавая на его вход векторы из латентного пространства.
Декодер в рекуррентных нейронных сетях (RNN/LSTM)
В классических моделях преобразования последовательности в последовательность (seq2seq), основанных на RNN или LSTM, декодер представляет собой рекуррентную сеть, которая генерирует выходную последовательность токен за токеном.
- Принцип работы: Декодер инициализируется конечным скрытым состоянием (контекстным вектором) энкодера. На каждом шаге он принимает на вход ранее сгенерированный токен и своё предыдущее скрытое состояние, а затем генерирует следующий токен и обновляет своё состояние. Этот процесс продолжается до тех пор, пока не будет сгенерирован специальный токен конца последовательности (`<EOS>`).
Декодер в архитектуре Трансформер
Декодер на основе архитектуры Трансформер также работает авторегрессионно, но его внутренняя структура отличается. Он состоит из стека () идентичных слоёв, каждый из которых имеет три основных подслоя:
- Маскированное многоголовое самовнимание (Masked Multi-Head Self-Attention): Этот механизм работает так же, как и в энкодере, но с одним важным отличием — маскированием. Маска не позволяет каждой позиции «обращать внимание» на последующие позиции в последовательности. Это гарантирует, что предсказание для позиции зависит только от уже известных выходов на позициях , сохраняя авторегрессионное свойство.
- Многоголовое перекрёстное внимание (Multi-Head Cross-Attention): Это ключевой механизм, связывающий декодер с энкодером. Здесь запросы (Query) поступают от предыдущего слоя декодера, а ключи (Key) и значения (Value) — от выходных представлений энкодера. Это позволяет декодеру на каждом шаге генерации фокусироваться на наиболее релевантных частях входной последовательности.
- Полносвязная нейронная сеть (Feed-Forward Network): Аналогична той, что используется в энкодере.
Типы моделей на основе декодера
Модели энкодер-декодер
Это классическая архитектура, где энкодер и декодер работают в паре.
- Принцип работы: Энкодер создаёт представление входных данных, а декодер генерирует выходные данные, используя это представление.
- Примеры: Оригинальный Трансформер, T5, BART.
Модели только-декодер (Decoder-Only)
Эти модели, ставшие доминирующими в генеративном ИИ, используют исключительно стек декодеров Трансформера.
- Принцип работы: В таких моделях отсутствует перекрёстное внимание к энкодеру, так как энкодера нет. Модель работает чисто в авторегрессионном режиме, предсказывая следующий токен на основе всех предыдущих токенов в той же последовательности. Входной промпт и уже сгенерированный текст обрабатываются вместе.
- Применение: Идеальны для задач, где требуется продолжить заданный текст (генерация текста, диалоговые системы, чат-боты).
- Примеры: Серия GPT, LLaMA, Claude.
Связь с энкодером
Взаимодействие энкодера и декодера — это фундаментальный принцип для задач преобразования.
- Энкодер сжимает информацию о входной последовательности в набор векторов.
- Декодер использует этот набор векторов, чтобы последовательно сгенерировать новую последовательность.
Перекрёстное внимание позволяет декодеру на каждом шаге «консультироваться» с энкодером, чтобы понять, на какой части исходного текста следует сосредоточиться в данный момент. Например, при переводе предложения декодер, генерируя немецкое слово, может «посмотреть» на соответствующее ему английское слово из входа.
См. также
Литература
- Vaswani, A. et al. (2017). Attention Is All You Need. NIPS.