Что такое 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.
Инструменты:
Шаги:
- Загрузить датасет Wikitext-2, токенизировать, разбить на сегменты по 64 токена.
- Реализовать класс
TransformerXLLayer:- Механизм внимания с relative positional encoding.
- Передача скрытых состояний между сегментами (с помощью
state = Noneв первом сегменте и сохранением после каждого шага).
- Реализовать класс
SegmentTransformer(без recurrence) — обычные сегменты с абсолютным кодированием. - Обучить обе модели на одинаковых гиперпараметрах (2 слоя, 4 головы, 128 размер эмбеддинга) для предсказания следующего токена.
- Измерить perplexity на валидации, а также сравнить качество генерации текста (например, сгенерировать по 200 токенов обеими моделями и оценить связность).
Ожидаемый результат:
- Модель Transformer-XL должна показывать более низкую perplexity (на 5–10%) и более связный текст, особенно в ситуациях, где важны дальние зависимости (анафоры на расстоянии >64 токенов).
- График сходимости: Transformer-XL быстрее снижает loss, чем сегментный вариант.
- Понимание на практике механизма передачи состояний и влияния относительного кодирования.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 281 | Базовое self-attention, на котором построен Transformer-XL |
Навигация
- Предыдущий: 945
- Следующий: 947
- Индекс: 00. Индекс разборов