October 4

Новые способности ценой прозрачности: что не так с Astra от OpenAI

Есть глобально два способа сделать модель лучше:

  • сделать её больше;
  • добавить больше вычислений при том же размере.

Первые несколько волн прогресса у трансформеров (это наши любимые GPT, Claude и иже с ними) пришли с увеличением числа слоёв, объёма данных и мощности процессоров. А потом придумали цепочки рассуждений (chain-of-thoughts), и трансформеры стали ещё круче.

Цепочки рассуждений — это подход к решению задач: модели дают задачу и требуют расписать каждый шаг решения. Например, дают какой-нибудь сложный математический пример, и она расписывает: сначала раскроем скобки, потом выполним умножение, потом сложение, — и результат получается точнее при том же размере самой модели и при том же наборе обучающих данных.

Сейчас нейросети (я использую слова “нейросеть”, “модель” и “языковая модель” как синонимы в этом посте) стали огромные, и им нужны всё более мощные процессоры, и процессоры дорожают.

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

Поэтому исследователи почесали в затылке, вернулись к идее оптимизировать вычисления и придумали вставить в трансформер рекуррентный блок.

“Рекуррентный” значит “возвратный” или “повторяемый”. Это такой блок, который много раз гоняет один и тот же кусочек данных через одни и те же вычисления.

Допустим, наши данные — это текст, и допустим, что наша модель обрабатывает его слово за словом. “Обычная” модель обрабатывает одно слово, выдаёт результат, обрабатывает следующее и так далее. Модель с рекуррентным блоком берёт одно слово и несколько раз его пересчитывает, каждый раз извлекая из него немного больше информации.

Эта идея описана в статье “Scaling up Test-Time Compute with Latent Reasoning: A Recurrent Depth Approach” (“Масштабируем вычисления скрытыми рассуждениями: подход через рекуррентную глубину”). Рассмотрим схему из этой статьи:


Процесс состоит из трёх этапов:

  1. Текст, который передали модели на вход, превращается в векторы — это на схеме голубой блок P;
  2. Рекуррентный блок крутит одно слово несколько раз — это зелёные блоки;
  3. Наконец, получается матрица, которая трансформируется в предсказание следующего слова — розовый блок.

Этапы 1 и 3 стандартные, а вот этап 2 новый. На вход в него подаётся векторное представление слова (e на схеме). В блоке R происходит вычисление: там просто математическая формула, которая меняет вектор, в который превратилось слово, и получается новый вектор.

А потом они берут новый вектор, исходный вектор, склеивают их и снова прогоняют через формулу, и получается третий вектор. Потом берут этот третий вектор, исходный — и опять в ту же формулу.

Хорошая математическая аналогия — формула Герона для нахождения квадратного корня числа. Вот она:

½*(x_n + a/x_n)

Это как будто наш блок R.

Допустим, мы хотим посчитать квадратный корень из 25. Для начала нам надо выбрать число наобум — допустим, 7, — и подставить его в формулу вместо x_n.

Вместо a в формуле мы подставим 25 (потому что мы ищем его корень). Получится так:

½*(7 + 25/7) –> примерно 5,29.

Потом мы берём 5,29 (наш новый вектор) и подставляем его обратно в формулу:

½*(5,29 + 25/5,29) –> получится примерно 5,008.

Можно сказать, мы уже получили ответ. Но давайте его тоже подставим в формулу:

½*(5,008 + 25/5,008) = 5,000006 — мы медленно приближаемся к числу 5.

А когда мы 5 подставим в формулу, получится

½*(5 + 25/5) = 5.

Здорово, правда? Дальше результат не будет меняться, и вот мы получили квадратный корень — можно даже без калькулятора обойтись. Можете попробовать подставить разные числа и посмотреть, что получится.

Рекуррентный блок делает примерно то же самое: он на каждом шаге получает немного более точный ответ до тех пор, пока ответ не перестанет заметно меняться. И выходит, что модель та же, данные те же, а результат лучше.

Astra — новая модель OpenAI — использует такую архитектуру: эти ребята времени зря не теряют и собирают пылесосом все новые идеи, у которых есть потенциал.

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

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

В техническое описание OpenAI недавно добавили отчёт о проверках безопасности, но сама архитектура закрыта (во всяком случае, пока).

Посмотрим, во что выльется эта история, но наблюдать за ней интересно. Я вот думаю, что методами механистической интерпретации в рекуррентные блоки заглянуть можно: собирать результаты после каждого прогона, потом их изучать и смотреть, что поменялось. В Astra влезть не выйдет: это закрытая коммерческая модель. Но есть некоторые открытые эксперименты. Туда можно попробовать влезть.

Что почитать, чтобы лучше разобраться в теме

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