Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#946

Что такое Transformer-XL? Как решает проблему ограниченного контекста через recurrence?

Краткий тезис

Transformer-XL — это модификация архитектуры Transformer, решающая проблему ограниченной длины контекста за счёт введения механизма recurrence на уровне сегментов (segment-level recurrence). Базовая модель обрабатывает последовательность фиксированными чанками, теряя информацию о предыдущих блоках. Transformer-XL сохраняет и передаёт скрытые состояния между такими чанками, позволяя модели оперировать контекстом, в несколько раз превышающим стандартное окно внимания. Дополнительно архитектура использует relative positional encoding, что устраняет искажения при склейке сегментов и улучшает обобщение на более длинные последовательности.

2. Transformer-XL: recurrence между сегментами (скрытые состояния)

Для преодоления указанной проблемы Transformer-XL вводит механизм segment-level recurrence — рекуррентную передачу скрытых состояний между соседними сегментами при обработке последовательности.

Как это работает

Пусть последовательность разбита на сегменты длины ( L ): ( \mathbf{x}1, \ldots, \mathbf{x}\tau, \mathbf{x}{\tau+1}, \ldots ). Для текущего сегмента ( \mathbf{x}{\tau+1} ) модель использует не только его скрытые состояния, но и вычисленные ранее скрытые состояния предыдущего сегмента ( \mathbf{x}_\tau ).

Формально, если обозначить скрытые состояния предыдущего сегмента как ( \mathbf{h}^{l-1}_\tau ) (выход слоя ( l-1 )), то для текущего сегмента входом в слой ( l ) становится конкатенация:

[ \mathbf{h}^{l-1}{\tau+1} = [text](/wiki/text){Concat}([text](/wiki/text){SG}(\mathbf{h}^{l-1}\tau),, \mathbf{h}^{l-1}_{\tau+1,[text](/wiki/text){new}}) ]

где:

  • ([text](/wiki/text){SG}(\cdot)) — stop-gradient (градиенты не распространяются в предыдущий сегмент при обучении; обратное распространение идёт только в пределах текущего чанка, но информация из прошлого сохраняется);
  • (\mathbf{h}^{l-1}_{\tau+1,[text](/wiki/text){new}}) — скрытые состояния, вычисленные для токенов текущего сегмента на предыдущем слое.

Затем вычисляется внимание на увеличенной длине — теперь ключи и значения включают как текущие токены, так и токены предыдущего сегмента (до ( L + M ), где ( M ) — длина предыдущего сохранённого контекста). Таким образом, каждый слой получает доступ к контексту, выходящему за границы сегмента.

Преимущества

  • Контекст растёт линейно с числом слоёв — при глубине ( N ) эффективная длина контекста составляет ( O(L \cdot N) ), а не ( O(L) ).
  • Передача информации без обучения на новых параметрах — рекуррентные связи используют те же веса внимания и FFN, что и внутри сегмента.
  • Сохраняется возможность параллельной обработки — каждый сегмент по-прежнему обрабатывается как последовательность, но с дополнительным контекстом из предыдущего чанка.

На практике Transformer-XL позволяет работать с контекстом длиной до нескольких тысяч токенов (например, 3800+ в текстах), что значительно превосходит стандартное окно в 512.


3. Relative positional encoding

Классический позиционный кодировщик Transformer использует абсолютные позиции токенов (синусоидальные или обучаемые). При повторном использовании сегментов абсолютные позиции становятся проблемой: токен из предыдущего сегмента имеет другую абсолютную позицию, чем если бы он стоял в текущем. Это разрушает логику внимания.

Transformer-XL вводит relative positional encoding (относительное позиционное кодирование), которое моделирует не абсолютные расстояния между токенами, а их относительный сдвиг.

Суть подхода

Вместо того чтобы добавлять позиционный вектор к входному эмбеддингу, позиционная информация внедряется непосредственно в вычисление оценок внимания:

[ [text](/wiki/text){Score}(i,j) = Q_i^T K_j + u^T K_j + v^T W_{pos}(i-j) ]

где:

  • ( Q_i ) — запрос для токена ( i ),
  • ( K_j ) — ключ для токена ( j ),
  • ( u, v ) — обучаемые векторы,
  • ( W_{pos}(i-j) ) — обучаемая позиционная матрица для относительного сдвига ( i-j ).

Относительное кодирование:

  • Не зависит от абсолютных позиций, поэтому токен "через границу сегмента" получает корректную метрику расстояния.
  • Позволяет модели обобщать на длины последовательностей, не встречавшиеся при обучении (экстраполяция).
  • Устраняет конфликт повторяющихся абсолютных позиций при склейке сегментов.

Эффект

Благодаря относительному кодированию Transformer-XL может обрабатывать последовательности произвольной длины (в разумных пределах) и лучше улавливает дальние зависимости. Этот механизм стал основой для многих современных моделей с длинным контекстом (в т.ч. RoFormer, ALiBi).


4. Контекст в несколько раз длиннее

За счёт сочетания рекуррентной передачи состояний и относительного позиционного кодирования Transformer-XL достигает контекстной длины, в 4–8 раз превышающей размер сегмента. Например, при сегменте в 512 токенов модель может использовать 1280–2048 токенов контекста (за счёт стека из 4–8 слоёв, каждый передаёт свой сохранённый контекст). Более глубокие модели (12–16 слоёв) способны работать с 3000–4000 токенов.

Сравнение с другими подходами:

  • Vanilla Transformer (сегментное разбиение без recurrence): эффективный контекст = размер сегмента.
  • Transformer-XL: контекст = размер сегмента × глубина.
  • Longformer/BigBird (sparse attention): контекст может быть длиннее, но теряет полную информацию о дальних парах токенов.
  • Linformer (низкоранговая проекция): контекст линеен, но качество страдает на сильно длинных последовательностях.

Transformer-XL остаётся эталоном для задач, где требуется точное моделирование дальних зависимостей без разрежения внимания. Он лёг в основу моделей Segment-Level Recurrence в генерации текста (например, WikiText-103 показал state-of-the-art perplexity на момент выхода).


5. Пет-проект для закрепления

Задача: Реализовать упрощённую версию Transformer-XL на PyTorch для задачи языкового моделирования на небольших текстах (например, на датасете Wikitext-2) и сравнить её с обычным сегментным Transformer.

Инструменты:

  • Python, PyTorch
  • Hugging Face Datasets / токенизатор
  • Jupyter Notebook для экспериментов

Шаги:

  1. Загрузить датасет Wikitext-2, токенизировать, разбить на сегменты по 64 токена.
  2. Реализовать класс TransformerXLLayer:
    • Механизм внимания с relative positional encoding.
    • Передача скрытых состояний между сегментами (с помощью state = None в первом сегменте и сохранением после каждого шага).
  3. Реализовать класс SegmentTransformer (без recurrence) — обычные сегменты с абсолютным кодированием.
  4. Обучить обе модели на одинаковых гиперпараметрах (2 слоя, 4 головы, 128 размер эмбеддинга) для предсказания следующего токена.
  5. Измерить perplexity на валидации, а также сравнить качество генерации текста (например, сгенерировать по 200 токенов обеими моделями и оценить связность).

Ожидаемый результат:

  • Модель Transformer-XL должна показывать более низкую perplexity (на 5–10%) и более связный текст, особенно в ситуациях, где важны дальние зависимости (анафоры на расстоянии >64 токенов).
  • График сходимости: Transformer-XL быстрее снижает loss, чем сегментный вариант.
  • Понимание на практике механизма передачи состояний и влияния относительного кодирования.

Связь с другими вопросами

ВопросТема
281Базовое self-attention, на котором построен Transformer-XL

Навигация

  • Предыдущий: 945
  • Следующий: 947
  • Индекс: 00. Индекс разборов