Архитектура seq2seq

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
 
(1 промежуточная версия не показана)
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''DeepSeek-V4''' и проверена участником [[Участник:Vokov|К.В.Воронцов]] 17:30, 7 июля 2026 (MSD)}}
 
-
{{TOCright}}
 
-
 
'''Seq2seq''' (от англ. ''sequence-to-sequence'', «последовательность-в-последовательность») — класс архитектур [[Искусственная нейронная сеть|искусственных нейронных сетей]], предназначенных для преобразования одной последовательности данных в другую. В отличие от многих других моделей, seq2seq не требует, чтобы входная и выходная последовательности имели одинаковую длину, что делает её фундаментальным инструментом для решения широкого круга задач, от [[Машинный перевод|машинного перевода]] до анализа временных рядов.
'''Seq2seq''' (от англ. ''sequence-to-sequence'', «последовательность-в-последовательность») — класс архитектур [[Искусственная нейронная сеть|искусственных нейронных сетей]], предназначенных для преобразования одной последовательности данных в другую. В отличие от многих других моделей, seq2seq не требует, чтобы входная и выходная последовательности имели одинаковую длину, что делает её фундаментальным инструментом для решения широкого круга задач, от [[Машинный перевод|машинного перевода]] до анализа временных рядов.
Строка 16: Строка 13:
=== Энкодер ===
=== Энкодер ===
-
Энкодер представляет собой рекуррентную нейронную сеть, которая последовательно считывает элементы входной последовательности '''x = (x₁, x₂, , x_T)'''. На каждом временном шаге '''t''' сеть обновляет своё внутреннее скрытое состояние '''h_t''', стремясь аккумулировать смысловую информацию о прочитанной части<ref name="tensorflow2025">{{cite web |url= https://www.tensorflow.org/text/tutorials/nmt_with_attention |title= Neural Machine Translation with Attention |publisher= TensorFlow |year= 2025}}</ref>.
+
Энкодер представляет собой рекуррентную нейронную сеть, которая последовательно считывает элементы входной последовательности <tex>\mathbf{x} = (x_1, x_2, \dots, x_T)</tex>. На каждом временном шаге <tex>t</tex> сеть обновляет своё внутреннее скрытое состояние <tex>h_t</tex>, стремясь аккумулировать смысловую информацию о прочитанной части<ref name="tensorflow2025">{{cite web |url= https://www.tensorflow.org/text/tutorials/nmt_with_attention |title= Neural Machine Translation with Attention |publisher= TensorFlow |year= 2025}}</ref>.
-
По завершении обработки всего входа финальное скрытое состояние '''h_T''' интерпретируется как '''вектор контекста c''' — сжатое представление всей входной последовательности в виде вектора фиксированной размерности:
+
По завершении обработки всего входа финальное скрытое состояние <tex>h_T</tex> интерпретируется как '''вектор контекста''' <tex>\mathbf{c}</tex> — сжатое представление всей входной последовательности в виде вектора фиксированной размерности:
-
'''c = h_T = Энкодер(x₁, x₂, , x_T)'''
+
<tex> \mathbf{c} = h_T = </tex> Энкодер<tex>(x_1, x_2, \dots, x_T) </tex>
На практике в качестве ячеек энкодера чаще всего используются модификации RNN, такие как LSTM (''Long Short-Term Memory'')<ref name="hochreiter1997">{{статья |автор= Hochreiter, S., Schmidhuber, J. |заглавие= Long Short-Term Memory |издание= Neural Computation |год= 1997 |том= 9 |выпуск= 8 |страницы= 1735–1780 |doi= 10.1162/neco.1997.9.8.1735}}</ref> или GRU (''Gated Recurrent Unit'')<ref name="chung2014">{{статья |автор= Chung, J., Gulcehre, C., Cho, K., Bengio, Y. |заглавие= Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling |издание= arXiv:1412.3555 |год= 2014}}</ref>. Данные ячейки эффективно решают проблему затухающих градиентов, что позволяет обучать модели на длинных последовательностях.
На практике в качестве ячеек энкодера чаще всего используются модификации RNN, такие как LSTM (''Long Short-Term Memory'')<ref name="hochreiter1997">{{статья |автор= Hochreiter, S., Schmidhuber, J. |заглавие= Long Short-Term Memory |издание= Neural Computation |год= 1997 |том= 9 |выпуск= 8 |страницы= 1735–1780 |doi= 10.1162/neco.1997.9.8.1735}}</ref> или GRU (''Gated Recurrent Unit'')<ref name="chung2014">{{статья |автор= Chung, J., Gulcehre, C., Cho, K., Bengio, Y. |заглавие= Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling |издание= arXiv:1412.3555 |год= 2014}}</ref>. Данные ячейки эффективно решают проблему затухающих градиентов, что позволяет обучать модели на длинных последовательностях.
Строка 26: Строка 23:
=== Декодер и Teacher Forcing ===
=== Декодер и Teacher Forcing ===
-
Декодер является второй рекуррентной сетью, которая получает вектор контекста '''c''' и генерирует выходную последовательность '''y = (y₁, , y_T')''' авторегрессионным способом — по одному токену за раз, используя ранее сгенерированные элементы<ref name="pytorch2025">{{cite web |url= https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html |title= NLP From Scratch: Translation with a Sequence to Sequence Network and Attention |publisher= PyTorch |year= 2025}}</ref>:
+
Декодер является второй рекуррентной сетью, которая получает вектор контекста <tex>\mathbf{c}</tex> и генерирует выходную последовательность <tex>\mathbf{y} = (y_1, \dots, y_{T'})</tex> авторегрессионным способом — по одному токену за раз, используя ранее сгенерированные элементы<ref name="pytorch2025">{{cite web |url= https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html |title= NLP From Scratch: Translation with a Sequence to Sequence Network and Attention |publisher= PyTorch |year= 2025}}</ref>:
-
'''P(y₁, , y_T' | x₁, , x_T) = ∏_{t=1}^{T'} P(y_t | y₁, , y_{t-1}, c)'''
+
<tex> P(y_1, \dots, y_{T'} \mid x_1, \dots, x_T) = \prod_{t=1}^{T'} P(y_t \mid y_1, \dots, y_{t-1}, \mathbf{c}) </tex>
В процессе обучения для стабилизации и ускорения сходимости применяется техника '''Teacher Forcing'''<ref name="williams1989">{{статья |автор= Williams, R. J., Zipser, D. |заглавие= A Learning Algorithm for Continually Running Fully Recurrent Neural Networks |издание= Neural Computation |год= 1989 |том= 1 |выпуск= 2 |страницы= 270–280 |doi= 10.1162/neco.1989.1.2.270}}</ref>. На каждом шаге обучения декодеру подаётся не его собственное предсказание с предыдущего шага, а правильный (референсный) токен из обучающей выборки. Это предотвращает накопление ошибок, однако порождает проблему ''exposure bias'' — модель привыкает к идеальным входным данным, которые отсутствуют на этапе инференса. Для смягчения этого эффекта используется ''Scheduled Sampling'', при котором доля использования реальных ответов постепенно снижается<ref name="bengio2015">{{статья |автор= Bengio, S., Vinyals, O., Jaitly, N., Shazeer, N. |заглавие= Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks |издание= Advances in Neural Information Processing Systems |год= 2015 |ссылка= https://proceedings.neurips.cc/paper/2015/hash/e995f98d56967d946471af29d7bf99f1-Abstract.html}}</ref>.
В процессе обучения для стабилизации и ускорения сходимости применяется техника '''Teacher Forcing'''<ref name="williams1989">{{статья |автор= Williams, R. J., Zipser, D. |заглавие= A Learning Algorithm for Continually Running Fully Recurrent Neural Networks |издание= Neural Computation |год= 1989 |том= 1 |выпуск= 2 |страницы= 270–280 |doi= 10.1162/neco.1989.1.2.270}}</ref>. На каждом шаге обучения декодеру подаётся не его собственное предсказание с предыдущего шага, а правильный (референсный) токен из обучающей выборки. Это предотвращает накопление ошибок, однако порождает проблему ''exposure bias'' — модель привыкает к идеальным входным данным, которые отсутствуют на этапе инференса. Для смягчения этого эффекта используется ''Scheduled Sampling'', при котором доля использования реальных ответов постепенно снижается<ref name="bengio2015">{{статья |автор= Bengio, S., Vinyals, O., Jaitly, N., Shazeer, N. |заглавие= Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks |издание= Advances in Neural Information Processing Systems |год= 2015 |ссылка= https://proceedings.neurips.cc/paper/2015/hash/e995f98d56967d946471af29d7bf99f1-Abstract.html}}</ref>.
Строка 45: Строка 42:
=== Вычисление контекстного вектора ===
=== Вычисление контекстного вектора ===
-
Для текущего скрытого состояния декодера '''s_{t-1}''' и каждого скрытого состояния энкодера '''h_i''' вычисляется '''оценка внимания''' (alignment score) '''e_{ti}'''. Эти оценки нормализуются с помощью функции softmax, формируя '''веса внимания''' '''α_{ti}'''<ref name="britannica2025">{{cite web |url= https://www.britannica.com/technology/attention-mechanism |title= Attention mechanism |publisher= Encyclopedia Britannica |year= 2025}}</ref>:
+
Для текущего скрытого состояния декодера <tex>s_{t-1}</tex> и каждого скрытого состояния энкодера <tex>h_i</tex> вычисляется '''оценка внимания''' (alignment score) <tex>e_{ti}</tex>. Эти оценки нормализуются с помощью функции softmax, формируя '''веса внимания''' <tex>\alpha_{ti}</tex><ref name="britannica2025">{{cite web |url= https://www.britannica.com/technology/attention-mechanism |title= Attention mechanism |publisher= Encyclopedia Britannica |year= 2025}}</ref>:
-
'''α_{ti} = exp(e_{ti}) / Σ_{j=1}^{T_x} exp(e_{tj})'''
+
<tex> \alpha_{ti} = \frac{\exp(e_{ti})}{\sum_{j=1}^{T_x} \exp(e_{tj})} </tex>
-
Вектор контекста для шага '''t''' вычисляется как взвешенная сумма скрытых состояний энкодера:
+
Вектор контекста для шага <tex>t</tex> вычисляется как взвешенная сумма скрытых состояний энкодера:
-
'''c_t = Σ_{i=1}^{T_x} α_{ti} h_i'''
+
<tex> \mathbf{c}_t = \sum_{i=1}^{T_x} \alpha_{ti} \mathbf{h}_i </tex>
=== Модификации внимания ===
=== Модификации внимания ===
Строка 57: Строка 54:
Существует несколько способов вычисления оценки внимания. В работе Бахданау<ref name="bahdanau2015"/> была предложена '''аддитивная''' (или ''additive'') модель:
Существует несколько способов вычисления оценки внимания. В работе Бахданау<ref name="bahdanau2015"/> была предложена '''аддитивная''' (или ''additive'') модель:
-
'''e_{ti} = v_a^T · tanh(W_a · s_{t-1} + U_a · h_i)'''
+
<tex> e_{ti} = \mathbf{v}_a^\top \tanh(\mathbf{W}_a \mathbf{s}_{t-1} + \mathbf{U}_a \mathbf{h}_i) </tex>
Позже Т. Луонг и соавторы<ref name="luong2015">{{статья |автор= Luong, T., Pham, H., Manning, C. D. |заглавие= Effective Approaches to Attention-based Neural Machine Translation |издание= Proceedings of EMNLP |год= 2015 |ссылка= https://aclanthology.org/D15-1166/}}</ref> предложили более простую '''мультипликативную''' (или ''dot-product'') модель:
Позже Т. Луонг и соавторы<ref name="luong2015">{{статья |автор= Luong, T., Pham, H., Manning, C. D. |заглавие= Effective Approaches to Attention-based Neural Machine Translation |издание= Proceedings of EMNLP |год= 2015 |ссылка= https://aclanthology.org/D15-1166/}}</ref> предложили более простую '''мультипликативную''' (или ''dot-product'') модель:
-
'''e_{ti} = s_t^T · W_a · h_i'''
+
<tex> e_{ti} = \mathbf{s}_t^\top \mathbf{W}_a \mathbf{h}_i </tex>
Введение внимания позволило не только значительно повысить качество перевода, особенно для длинных предложений, но и сделало модели интерпретируемыми — визуализация весов внимания показывает, на какие участки исходного текста модель опирается при генерации каждого слова<ref name="ghader2017">{{статья |автор= Ghader, H., Monz, C. |заглавие= What Does Attention in Neural Machine Translation Pay Attention To? |издание= arXiv:1710.03348 |год= 2017 |ссылка= https://arxiv.org/abs/1710.03348}}</ref>.
Введение внимания позволило не только значительно повысить качество перевода, особенно для длинных предложений, но и сделало модели интерпретируемыми — визуализация весов внимания показывает, на какие участки исходного текста модель опирается при генерации каждого слова<ref name="ghader2017">{{статья |автор= Ghader, H., Monz, C. |заглавие= What Does Attention in Neural Machine Translation Pay Attention To? |издание= arXiv:1710.03348 |год= 2017 |ссылка= https://arxiv.org/abs/1710.03348}}</ref>.
Строка 73: Строка 70:
На каждом шаге выбирается токен с максимальной апостериорной вероятностью:
На каждом шаге выбирается токен с максимальной апостериорной вероятностью:
-
'''y_t = argmax_y P(y | y₁, , y_{t-1}, c)'''
+
<tex> y_t = \arg\max_{y} P(y \mid y_1, \dots, y_{t-1}, \mathbf{c}) </tex>
Этот метод вычислительно эффективен, однако склонен к субоптимальным решениям из-за локальной жадности<ref name="wiseman2016">{{статья |автор= Wiseman, S., Rush, A. M. |заглавие= Sequence-to-Sequence Learning as Beam-Search Optimization |издание= Proceedings of EMNLP |год= 2016 |ссылка= https://aclanthology.org/D16-1123/}}</ref>.
Этот метод вычислительно эффективен, однако склонен к субоптимальным решениям из-за локальной жадности<ref name="wiseman2016">{{статья |автор= Wiseman, S., Rush, A. M. |заглавие= Sequence-to-Sequence Learning as Beam-Search Optimization |издание= Proceedings of EMNLP |год= 2016 |ссылка= https://aclanthology.org/D16-1123/}}</ref>.
-
=== Поиск по лучу ===
+
==== Поиск по лучу ===
-
'''Beam Search''' поддерживает '''k''' (ширина луча) наиболее вероятных частичных гипотез. На каждом шаге для каждой гипотезы рассматриваются все возможные продолжения, и из полученного множества отбираются '''k''' лучших кандидатов<ref name="koehn2010">{{книга |автор= Koehn, P. |заглавие= Statistical Machine Translation |издательство= Cambridge University Press |год= 2010 |isbn= 978-0521874151}}</ref>. Данный подход значительно улучшает качество генерации для длинных последовательностей. Для устранения смещения в сторону более коротких гипотез применяется нормализация по длине:
+
'''Beam Search''' поддерживает <tex>k</tex> (ширина луча) наиболее вероятных частичных гипотез. На каждом шаге для каждой гипотезы рассматриваются все возможные продолжения, и из полученного множества отбираются <tex>k</tex> лучших кандидатов<ref name="koehn2010">{{книга |автор= Koehn, P. |заглавие= Statistical Machine Translation |издательство= Cambridge University Press |год= 2010 |isbn= 978-0521874151}}</ref>. Данный подход значительно улучшает качество генерации для длинных последовательностей. Для устранения смещения в сторону более коротких гипотез применяется нормализация по длине:
-
'''score_норм(y) = (1 / T'^α) · Σ_{t=1}^{T'} log P(y_t | y₁, , y_{t-1})'''
+
'''score'''<sub>норм</sub>'''(y)''' = <tex> \frac{1}{T'^{\alpha}} \sum_{t=1}^{T'} \log P(y_t \mid y_1, \dots, y_{t-1}) </tex>
-
где '''α''' — гиперпараметр, часто принимающий значение 0.6—0.7.
+
где <tex>\alpha</tex> — гиперпараметр, часто принимающий значение 0.6—0.7.
== Применение ==
== Применение ==

Текущая версия

Seq2seq (от англ. sequence-to-sequence, «последовательность-в-последовательность») — класс архитектур искусственных нейронных сетей, предназначенных для преобразования одной последовательности данных в другую. В отличие от многих других моделей, seq2seq не требует, чтобы входная и выходная последовательности имели одинаковую длину, что делает её фундаментальным инструментом для решения широкого круга задач, от машинного перевода до анализа временных рядов.

В основе архитектуры seq2seq лежит пара рекуррентных нейронных сетей (RNN), которые работают в тандеме: энкодер и декодер. Этот подход был впервые предложен в 2014 году и заложил основы для современных систем обработки естественного языка.

Содержание

История и предпосылки

До появления архитектуры seq2seq задачи преобразования последовательностей решались с помощью статистических моделей и классических рекуррентных нейронных сетей, которые сталкивались с проблемой обработки последовательностей переменной длины. Прорыв произошёл в 2014 году, когда в работах Ильи Сутскевера (Google Brain)[1] и Киёси Чо (Университет Монреаля)[1] была предложена архитектура, состоящая из двух рекуррентных сетей — энкодера и декодера. Эта структура легла в основу современных систем обработки естественного языка[1].

Архитектура

Общая архитектура seq2seq базируется на двух основных компонентах: кодирующем и декодирующем модулях.

Энкодер

Энкодер представляет собой рекуррентную нейронную сеть, которая последовательно считывает элементы входной последовательности \mathbf{x} = (x_1, x_2, \dots, x_T). На каждом временном шаге t сеть обновляет своё внутреннее скрытое состояние h_t, стремясь аккумулировать смысловую информацию о прочитанной части[1].

По завершении обработки всего входа финальное скрытое состояние h_T интерпретируется как вектор контекста \mathbf{c} — сжатое представление всей входной последовательности в виде вектора фиксированной размерности:

 \mathbf{c} = h_T = Энкодер(x_1, x_2, \dots, x_T)

На практике в качестве ячеек энкодера чаще всего используются модификации RNN, такие как LSTM (Long Short-Term Memory)[1] или GRU (Gated Recurrent Unit)[1]. Данные ячейки эффективно решают проблему затухающих градиентов, что позволяет обучать модели на длинных последовательностях.

Декодер и Teacher Forcing

Декодер является второй рекуррентной сетью, которая получает вектор контекста \mathbf{c} и генерирует выходную последовательность \mathbf{y} = (y_1, \dots, y_{T'}) авторегрессионным способом — по одному токену за раз, используя ранее сгенерированные элементы[1]:

 P(y_1, \dots, y_{T'} \mid x_1, \dots, x_T) = \prod_{t=1}^{T'} P(y_t \mid y_1, \dots, y_{t-1}, \mathbf{c})

В процессе обучения для стабилизации и ускорения сходимости применяется техника Teacher Forcing[1]. На каждом шаге обучения декодеру подаётся не его собственное предсказание с предыдущего шага, а правильный (референсный) токен из обучающей выборки. Это предотвращает накопление ошибок, однако порождает проблему exposure bias — модель привыкает к идеальным входным данным, которые отсутствуют на этапе инференса. Для смягчения этого эффекта используется Scheduled Sampling, при котором доля использования реальных ответов постепенно снижается[1].

Проблема информационного узкого места

Ключевым ограничением базовой архитектуры seq2seq является информационное узкое место, создаваемое вектором контекста фиксированной размерности[1]. Вся информация о входной последовательности, какой бы длинной она ни была, сжимается в один вектор фиксированной размерности. Это приводит к двум негативным эффектам:

  1. Потеря релевантной информации для длинных или сложных предложений, что ухудшает качество генерации.
  2. Ослабление долгосрочных зависимостей: связи между элементами, находящимися далеко друг от друга, трудноуловимы для модели.

Механизм внимания

Кардинальным решением проблемы узкого места стало введение механизма внимания (Attention), предложенного Д. Бахданау и соавторами в 2015 году[1]. Вместо использования единственного фиксированного вектора контекста внимание позволяет декодеру на каждом шаге динамически выбирать, какие части входной последовательности наиболее значимы для генерации текущего токена.

Вычисление контекстного вектора

Для текущего скрытого состояния декодера s_{t-1} и каждого скрытого состояния энкодера h_i вычисляется оценка внимания (alignment score) e_{ti}. Эти оценки нормализуются с помощью функции softmax, формируя веса внимания \alpha_{ti}[1]:

 \alpha_{ti} = \frac{\exp(e_{ti})}{\sum_{j=1}^{T_x} \exp(e_{tj})}

Вектор контекста для шага t вычисляется как взвешенная сумма скрытых состояний энкодера:

 \mathbf{c}_t = \sum_{i=1}^{T_x} \alpha_{ti} \mathbf{h}_i

Модификации внимания

Существует несколько способов вычисления оценки внимания. В работе Бахданау[1] была предложена аддитивная (или additive) модель:

 e_{ti} = \mathbf{v}_a^\top \tanh(\mathbf{W}_a \mathbf{s}_{t-1} + \mathbf{U}_a \mathbf{h}_i)

Позже Т. Луонг и соавторы[1] предложили более простую мультипликативную (или dot-product) модель:

 e_{ti} = \mathbf{s}_t^\top \mathbf{W}_a \mathbf{h}_i

Введение внимания позволило не только значительно повысить качество перевода, особенно для длинных предложений, но и сделало модели интерпретируемыми — визуализация весов внимания показывает, на какие участки исходного текста модель опирается при генерации каждого слова[1].

Стратегии декодирования

На этапе вывода (инференса), когда правильные ответы неизвестны, вместо Teacher Forcing применяются эвристические стратегии поиска.

Жадный поиск

На каждом шаге выбирается токен с максимальной апостериорной вероятностью:

 y_t = \arg\max_{y} P(y \mid y_1, \dots, y_{t-1}, \mathbf{c})

Этот метод вычислительно эффективен, однако склонен к субоптимальным решениям из-за локальной жадности[1].

= Поиск по лучу

Beam Search поддерживает k (ширина луча) наиболее вероятных частичных гипотез. На каждом шаге для каждой гипотезы рассматриваются все возможные продолжения, и из полученного множества отбираются k лучших кандидатов[1]. Данный подход значительно улучшает качество генерации для длинных последовательностей. Для устранения смещения в сторону более коротких гипотез применяется нормализация по длине:

scoreнорм(y) =  \frac{1}{T'^{\alpha}} \sum_{t=1}^{T'} \log P(y_t \mid y_1, \dots, y_{t-1})

где \alpha — гиперпараметр, часто принимающий значение 0.6—0.7.

Применение

Архитектура seq2seq (в том числе в модификациях с вниманием) используется в следующих областях:

Влияние и развитие

Хотя оригинальная архитектура seq2seq с RNN-энкодером и декодером постепенно уступает место моделям на основе механизма Трансформер (2017)[1], многие принципы, заложенные в seq2seq, остаются фундаментальными. Концепции авторегрессионной генерации, Teacher Forcing, внимания и Beam Search активно используются в современных больших языковых моделях, таких как GPT[1] и BERT[1].

См. также

Примечания

Литература

Личные инструменты