Почему LLM не могут копировать: 2D-RoPE решает задачу, с которой провалились GPT-5.5 и Gemini 3.1

Почему LLM не могут копировать: 2D-RoPE решает задачу, с которой провалились GPT-5.5 и Gemini 3.1

Большие языковые модели решают задачи олимпиадного уровня по математике, пишут код, который проходит конкурсы, и рассуждают о квантовой физике. Но если попросить GPT-5.5 или Gemini 3.1 Pro просто скопировать бинарную строку длиной 2000 символов — они провалятся. Точность упадёт ниже 50%, а на длинах 8000+ символов модели генерируют откровенную бессмыслицу.

Это не шутка и не баг API. Исследователи из Tsinghua University опубликовали работу, которая показывает: даже frontier-модели не умеют копировать, если строка содержит повторяющиеся паттерны. Но решение оказалось неожиданно простым — нужно просто перестать смотреть на текст как на одномерную последовательность.

Парадокс: копирование проще рассуждения, но LLM проваливаются

Задача звучит элементарно: берём бинарную строку (последовательность нулей и единиц) и просим модель вывести её точно в таком же виде. Никаких трансформаций, никаких вычислений — просто точная копия.

Кажется, это должно быть тривиально для модели с контекстом 128K токенов. Но есть нюанс: строки генерируются не случайно, а с повторяющимися паттернами. Например, 01010101010101010101 или 000111000111000111000. И вот здесь начинается магия (или её отсутствие).

Модели GPT-5.5, Gemini 3.1 Pro и DeepSeek V4 Pro тестируют на строках длиной от 128 до 8192 символов. Результаты неутешительные:

  • На длине 128 символов точность около 80-90% (модели всё ещё справляются)
  • На длине 512 символов точность падает до 30-50%
  • На длине 2048+ символов точность стремится к нулю

Причём это не просто «модель ошибается в нескольких битах». Модель полностью теряет способность отслеживать позицию и генерирует случайный шум, отдалённо напоминающий исходную строку.

Почему это происходит: RoPE и локальный контекст

Чтобы понять корень проблемы, нужно заглянуть под капот трансформеров. Все современные LLM используют RoPE (Rotary Position Embedding) — механизм, который кодирует позицию токена через вращение векторов в пространстве.

RoPE работает хорошо для большинства задач, потому что он кодирует относительные расстояния между токенами. Если в предложении «кот сидит на коврике» вы сдвинете слова, RoPE корректно отразит новые отношения. Но для задачи копирования это становится ловушкой.

Когда модель пытается скопировать строку 010101010101..., она использует следующий эвристический алгоритм:

  1. Смотрит на текущую позицию
  2. Ищет в истории похожий локальный контекст (например, последние 3-4 токена)
  3. Предполагает, что следующий токен будет таким же, как после этого контекста раньше

Это работает, если паттерны уникальны. Но если строка состоит из повторяющихся блоков 0101, то контекст 010 встречается десятки раз, и модель не может понять, какой именно 010 она должна скопировать сейчас. Она начинает «перепрыгивать» между копиями и теряет синхронизацию.

Исследователи называют это length-dependent retrieval (извлечение, зависящее от длины). Чтобы скопировать строку длиной N, модель должна обратиться к позиции N шагов назад. Но RoPE не предоставляет явного механизма для такого длинного «прыжка» — он оптимизирован для коротких зависимостей.

Парадокс в том, что чем длиннее строка, тем хуже работает эвристика «найди похожий контекст рядом». На коротких строках (128 символов) ещё можно найти уникальный контекст для каждого токена. Но на длинных строках (2048+ символов) почти каждый контекст встречается десятки раз, и модель теряет способность однозначно определить, какой именно токен она должна скопировать сейчас.

Решение: смотреть на текст как на 2D-сетку

Идея 2D-RoPE проста до гениальности: вместо того чтобы кодировать позицию как одномерный индекс i, разбейте текст на двумерную сетку, где каждая позиция имеет координаты (строка, столбец).

Конкретно: если у вас есть строка 01010101010101010101, вы разбиваете её на строки (например, по 10 символов):

Строка 0: 0 1 0 1 0 1 0 1 0 1
Строка 1: 0 1 0 1 0 1 0 1 0 1
Строка 2: 0 1 0 1 0 1 0 1 0 1

Теперь позиция каждого токена кодируется парой (row, column). Токен в строке 0, столбце 3 имеет координаты (0, 3). Токен в строке 2, столбце 3 имеет координаты (2, 3).

Когда модель генерирует выход, она должна скопировать токен из позиции (row, column). С 2D-RoPE это становится тривиальной задачей: модель просто ищет токен с тем же column, но из предыдущей row. Никакого length-dependent retrieval — только фиксированное смещение по одному измерению.

Технически 2D-RoPE реализован через модификацию RoPE: размерность head (обычно 128) делится пополам. Первая половина кодирует относительные позиции по строкам, вторая половина — по столбцам. При этом матрица вращения строится как блочно-диагональная: первые d/4 блоков отвечают за строки, остальные — за столбцы. Это позволяет модели одновременно учитывать отношения между строками и между столбцами, что критично для задачи копирования.

Эксперименты: от 0% до 100% точности

Исследователи обучили три модели на архитектуре Qwen3 с разными размерами: 350M, 730M и 1.4B параметров. Все модели предобучены на датасете DCLM (DataComp-LM) с контекстом 2K токенов, затем дообучены на задаче копирования бинарных строк.

Результаты впечатляют:

Стандартный RoPE (baseline):

  • Модель 1.4B параметров на строках длиной 1024: точность 26.8%
  • На длине 2048: точность 0%
  • На длине 4096: точность 0%

2D-RoPE:

  • Модель 1.4B параметров на строках длиной 1024: точность 100%
  • На длине 2048: точность 100%
  • На длине 4096: точность 92%
  • На длине 8192: точность 61.8%

Даже на длинах, в 4 раза превышающих тренировочный контекст (2K токенов), 2D-RoPE сохраняет высокую точность. Это называется length generalization — способность модели работать с последовательностями длиннее тех, что она видела во время обучения.

Что особенно важно: 2D-RoPE не ухудшает качество модели на стандартных задачах. На бенчмарках common-sense reasoning (ARC, HellaSwag, MMLU, WinoGrande и др.) модели с 2D-RoPE показывают те же результаты, что и с обычным RoPE. То есть способность копировать не конкурирует со способностью рассуждать.

Гибридный подход: лучшее из обоих миров

Исследователи также протестировали гибридную архитектуру H-RoPE, где слои трансформера чередуются: один слой использует 2D-RoPE, следующий — обычный RoPE, и так далее.

Результаты H-RoPE:

  • На длине 1024: точность 73.6% (лучше чем RoPE, но хуже чем 2D-RoPE)
  • На длине 2048: точность 3.6% (резкий обрыв)
  • На common-sense reasoning: результаты идентичны обычному RoPE

Гибридный подход даёт частичное улучшение, но не решает проблему полностью. Это говорит о том, что для задачи копирования нужен последовательный 2D-сигнал во всех слоях, а не чередование.

Почему это важно для практики

На первый взгляд, задача «скопируй бинарную строку» кажется искусственной и не имеющей отношения к реальным сценариям. Но это не так.

Во-первых, копирование — это базовая операция для многих агентских задач. Если AI-агент должен скопировать JSON из одного API и отправить в другой, или воспроизвести код из документации, он полагается на те же механизмы позиционирования, что и в эксперименте.

Во-вторых, проблема повторяющихся паттернов возникает везде, где есть структурированные данные. Конфигурационные файлы, логи, шаблоны кода — всё это содержит повторяющиеся блоки. Если модель не умеет надёжно копировать такие паттерны, она будет совершать ошибки в реальных задачах.

В-третьи, 2D-RoPE показывает, что архитектурные ограничения могут быть неочевидны. Мы привыкли думать, что масштабирование модели (больше параметров, больше данных) решает все проблемы. Но если архитектура имеет фундаментальное ограничение (в данном случае — неспособность к length-dependent retrieval), то масштабирование не поможет. Нужно менять сам механизм.

Auto-2D-RoPE: адаптивный вариант для реальных задач

В реальных задачах текст не всегда разделён на строки. Что если разделитель не перевод строки, а запятая, точка с запятой или любой другой символ? Авторы решают эту проблему через Auto-2D-RoPE — адаптивный вариант, который автоматически определяет разделитель и разбивает текст на строки.

Механизм работает так: модель обучается предсказывать, какой токен является разделителем строк, и динамически перестраивать 2D-координаты. Это расширяет применимость 2D-RoPE за пределы синтетических задач копирования на любые задачи, где структура данных имеет повторяющуюся природу — от JSON-массивов до CSV-таблиц и списков параметров.

Теоретический результат: почему 2D работает

Авторы не ограничиваются эмпирикой — они доказывают, что 2D-RoPE теоретически способен решить задачу копирования с помощью однослойного трансформера, тогда как стандартный RoPE требует как минимум двух слоёв. Конкретно: 2D-RoPE позволяет attention-слою напрямую адресовать токен по столбцу (column index), что превращает задачу копирования в простую операцию lookup. Это не просто улучшение константы — это качественное снижение сложности.

Теорема также показывает, что для стандартного RoPE задача копирования требует экспоненциально роста числа слоёв (относительно длины строки), тогда как 2D-RoPE решает её за константное число слоёв. Это объясняет, почему модели с обычным RoPE катастрофически теряют точность при увеличении длины — им физически не хватает глубины для точного извлечения.

Ограничения и открытые вопросы

Работа оставляет несколько открытых вопросов.

Первый: как 2D-RoPE поведёт себя на задачах, где важна именно одномерная структура? Например, в естественном языке предложения — это линейные последовательности, и разбивка на 2D-сетку может нарушить синтаксические зависимости. Исследователи показывают, что на common-sense reasoning 2D-RoPE не ухудшает результаты, но более сложные задачи (перевод, суммаризация, диалог) не тестировались.

Второй: как определить оптимальную ширину столбца в 2D-сетке? В эксперименте используется фиксированная ширина, но в реальных задачах структура данных может быть иерархической или переменной длины.

Третий: можно ли комбинировать 2D-RoPE с другими механизмами, такими как sliding window attention или sparse attention? Гибридные архитектуры могут дать ещё лучшие результаты.

Итог

Работа «Frontier Language Models Struggle to Copy: Text Can Be Better Viewed in 2D» (arXiv 2607.16072) показывает, что даже самые мощные LLM имеют фундаментальные ограничения, связанные с архитектурой. Позиционное кодирование RoPE, которое работает хорошо для большинства задач, становится瓶颈 (узким местом) для операций, требующих точного отслеживания позиций на длинных дистанциях.

2D-RoPE предлагает элегантное решение: если задача требует извлечения информации на расстоянии N шагов, разбейте пространство на два измерения, и задача сведётся к извлечению на фиксированном смещении. Это не просто трюк — это смена парадигмы в том, как мы думаем о позиционном кодировании.

Для исследователей это означает: прежде чем масштабировать модель, проверьте, нет ли архитектурных ограничений, которые масштабирование не преодолеет. Иногда простая идея (2D вместо 1D) даёт больше, чем удвоение параметров.

Для практиков это означает: если ваша задача включает точное воспроизведение структурированных данных (копирование конфигов, воспроизведение шаблонов, агентские операции с JSON), будьте готовы к ошибкам на длинных последовательностях. И следите за развитием 2D-позиционных кодирований — они могут стать стандартом в следующих поколениях LLM.

Код и модели доступны на GitHub: https://github.com/hhhhhh-925/copy-2dRoPE

← Все записи