Почему LLM так плохо играют в шахматы (и что с этим делать)

в 10:10, , рубрики: gpt 3.5-turbo, gpt 4.0, gpt-4 omni, gpt-4o, llama, llama 3.1, llm, большие языковые модели, шахматы
Почему LLM так плохо играют в шахматы (и что с этим делать) - 1

В своём последнем посте я говорил об одной загадке: все большие языковые модели (LLM) ужасно играют в шахматы. Все, за исключением gpt-3.5-turbo-instruct, которая по какой-то причине умеет играть на уровне продвинутого любителя. И это несмотря на то, что этой модели больше года и она намного меньше новых моделей. Что происходит?

Я предложил четыре возможных объяснения:

  • Теория 1: достаточно большие базовые модели хороши в шахматах, но это свойство не сохраняется после их подстройки под чат-модели.

  • Теория 2: по какой-то причине gpt-3.5-turbo-instruct обучали на большем объёме шахматных данных.

  • Теория 3: в некоторых архитектурах LLM есть нечто магическое.

  • Теория 4: существует «конкуренция» между разными типами данных, поэтому чтобы LLM могла хорошо играть в шахматы, большая доля данных должна быть информацией о шахматных партиях.

В Интернете нашлось ещё множество других теорий. Самые распространённые из них:

  • Теория 5: OpenAI жульничает.

  • Теория 6: на самом деле LLM не могут играть в шахматы.

Я провёл новые эксперименты. Хорошие новости — ошибались все!

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

Но для начала скажу, что…

Не думаю, что OpenAI жульничает

Меня поразило то, что половина Интернета убеждена в жульничестве OpenAI. Очень многие люди предположили, что в gpt-3.5-turbo-instruct есть специальное условие, распознающее шахматную нотацию и вызывающая внешний шахматный движок.

Я считаю, что это крайне маловероятно. Потому что:

  1. Многие люди из OpenAI сказали, что они этого не делали. Да, бывает, что люди врут, но заговор поддерживать сложно; к тому же зачем врать об этом?

  2. В шахматах можно прийти к одному и тому же состоянию доски путём разных последовательностей ходов. Шахматным движкам это не важно, в отличие от gpt-3.5-turbo-instruct, которая играет играет очень по-разному при разных последовательностях ходов.

  3. Хотя по стандартам шахматных любителей gpt-3.5-turbo-instruct великолепна, она плоха по стандартам экспертов и ужасна по стандартам шахматных движков. Если уж вы собрались жульничать, то зачем останавливаться на Elo 1750?

  4. Если изменить промт gpt-3.5-turbo-instruct, то это немного изменит и способ её игры. Существует ли какая-нибудь нейросеть, анализирующая текст и устанавливающая уровень умений шахматного движка?

  5. Более поздние модели OpenAI по умолчанию намного хуже в шахматах. Неужели компания удалила этот чит?

  6. Ниже я покажу, что новые модели OpenAI тоже могут хорошо играть, если использовать нужные заклинания.

Если же OpenAI действительно сжульничала, то она зашла в этом настолько далеко, что всё выглядит именно так, как будто LLM выбирает ходы, и совсем не похоже на вызов внешнего шахматного движка.

Да, LLM могут играть в шахматы

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

Это не так. LLM определённо могут играть в шахматы, и с этим нужно смириться.

Например, gpt-3.5-turbo-instruct редко предлагает недопустимые ходы, даже на поздних стадиях партии. Для этого требуется «понимание» шахмат. Если вас это не убедило, то призываю вас написать программу, получающую строки вида 1. e4 d5 2. exd5 Qxd5 3. Nc3, а затем сообщающую, был ли последний ход допустимым.

Попробуйте доказать, что LLM не могут играть в шахматы, посмотрев на примеры реальных игр. Вот десяток из них: 1 2 3 4 5 6 7 8 9 10. gpt-3.5-turbo-instruct играет вполне неплохо даже в совершенно новых состояниях доски, которые не существовали ни в одной предыдущей игре в истории.

Так что же происходит?

Почему одна LLM справляется отлично, а все остальные ужасно?

Позвольте напомнить, о чём идёт речь. Сначала возьмём gpt-3.5-turbo-instruct. Это «завершающая» модель, то есть единственная её задача — взять некий текст и сгенерировать новый текст, который идти после него. Я передавал ей такой текст:

[Event "Shamkir Chess"]
[White "Anand, Viswanathan"]
[Black "Topalov, Veselin"]
[Result "1-0"]
[WhiteElo "2779"]
[BlackElo "2740"]

1. e4 e5 2. Nf3 Nc6 3.

А затем брал первые несколько символов и использовал их в качестве хода.

Теперь возьмём gpt-4o-mini и gpt-4o. Это чат-модели, то есть мы передаём им «системный промт», в котором говорится, что им нужно сделать, и «пользовательский промт», после чего они пытаются ответить пользователю. Я использовал такой системный промт:

Ты шахматный гроссмейстер.
Я передам тебе частично завершённую партию.
Увидев её, ты должна выбрать следующий ход.
Используй стандартную алгебраическую нотацию, например, "e4", "Rdf8" или "R1a3".
НИКОГДА не указывай номер хода.
НИКОГДА не объясняй свой выбор.

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

Скрытый текст

То есть я использовал вот такие пользовательские промты:

Ты шахматный гроссмейстер.
Я передам тебе частично завершённую партию.
Увидев её, ты должна выбрать следующий ход.
Используй стандартную алгебраическую нотацию, например, "e4", "Rdf8" или "R1a3".
НИКОГДА не указывай номер хода.
НИКОГДА не объясняй свой выбор.

[Event "Shamkir Chess"]
[White "Anand, Viswanathan"]
[Black "Topalov, Veselin"]
[Result "1-0"]
[WhiteElo "2779"]
[BlackElo "2740"]

1. e4 e5 2. Nf3 Nc6 3.

Вот результаты игры всех трёх моделей против Stockfish (стандартного шахматного ИИ) на уровне 1, с максимумом в 0,01 секунды на каждый ход. После завершения игры я вычислил оценку после каждого хода в «сантипешках», где пешка стоит 100 очков, а ±1500 обозначает победу или выигрыш. Вот средние значения для 50 игр:

Что мы выяснили в предыдущей статье

Что мы выяснили в предыдущей статье

Примечание: в прошлой статье я выяснил, что gpt-3.5-turbo-instruct выиграла каждую из игр, а gpt-4o проиграла во всех. Сейчас разница заключается в том, что теперь у нас есть 50 сэмплов вместо десяти.

В этом-то и заключается тайна: gpt-3.5-turbo-instruct играет отлично, а другие модели ужасно. В прошлый раз я тестировал множество открытых моделей, и все они тоже были ужасны. Почему?

Чтобы ответить на этот вопрос, давайте проверим, сможем ли мы заставить эти модели лучше играть в шахматы.

Нужно ли нам как-то экспериментировать с промтом?

Вы можете придраться к промтам, которые я составлял для чат-моделей: правильно ли повторять системный промт в начале пользовательского? Правильно ли добавлять все метаданные наподобие имён игроков перед списком ходов?

Насколько мне известно, никто этого не знает. Поэтому я попробовал комбинацию этих элементов. В случае gpt-4o-mini (маленькая модель) это, похоже, практически ни на что не повлияло.

Почему LLM так плохо играют в шахматы (и что с этим делать) - 3

В случае gpt-4o (модель побольше) ... похоже, какая-то разница есть.

Почему LLM так плохо играют в шахматы (и что с этим делать) - 4

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

Нужно ли добавлять примеры?

Если мы хотим попросить LLM что-нибудь сделать, обычно рекомендуют дать ей несколько примеров. Поэтому я создал три небольших примера состояний доски и допустимых ходов. Я передал их «корректно», при помощи API, а не запихнув их в пользовательский промт.

Скрытый текст
  • Ввод A1.

  • Вывод Ae4

  • Ввод B1. e4

  • Вывод Bd5

  • Ввод C1. e4 e5 2. Nf3 Nc6 3.

  • Вывод CBb5

Вот и всё, что я использовал, только три этих примера.

Результаты оказались такими:

Почему LLM так плохо играют в шахматы (и что с этим делать) - 5

Очень хорошо.

Неожиданно ли это? Мне показалось, что да.

Да, разумеется, всё это «контекстное обучение» и делает LLM столь восхитительными. И исследователи LLM чаще всего рекомендуют давать им примеры.

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

Нужно ли выполнять fine tuning?

Ещё один стандартный (хотя и более сложный) способ улучшения LLM — это fine tuning с целью оптимизации весов под задачу с использованием данных для этой задачи.

Я проделал это для gpt-4o-mini и gpt-4o.

Для генерации данных fine tuning я заставил Stockfish сыграть 100 игр против самого себя на максимальном уровне сложности. Для каждой игры я выбирал случайный ход и использовал его в качестве примера. Затем Stockfish играл ещё в 100 игр в качестве данных валидации.

Скрытый текст

Вот один пример:

  • Системный промт: (тот же, что и раньше)

  • Пользовательский промт1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e5 7. Nb3 Be7 8. Be3 Be6 9. f4 exf4 10. Bxf4 Nc6 11. Qd3 Ne5 12. Qg3 Nh5 13. Qe3

  • Желательный выводNxf4

Результаты были такими:

Почему LLM так плохо играют в шахматы (и что с этим делать) - 6

Здорово! Fine tuning помогает.

Примечание: при первом fine tuning gpt-4o результаты казались плохими, поэтому я выполнил его снова с меньшим размером шага. Пришлось понервничать.

Следует ли комбинировать примеры и fine tuning?

Если примеры — это хорошо, и fine tuning тоже, то, может быть, соединить их будет ещё лучше?

Я предполагал, что нет, потому что три контекстных примера казались тривиальными по сравнению с сотней примеров fine tuning. После завершения fine tuning я решил, что примеры будут излишними.

Оказалось, что нет, но по другим причинам:

Почему LLM так плохо играют в шахматы (и что с этим делать) - 7

Судя по этому графику, fine tuning помогает. И примеры помогают. Но после выполнения fine tuning примеры ни на что не влияют. А после примеров fine tuning на самом деле вредит (?).

Хм, ну ладно.

Нужно ли приводить допустимые ходы?

Иногда LLM испытывают проблемы с генерацией допустимых ходов. В моих экспериментах я попробовал десять раз, и если не получалось ни одного допустимого хода, я просто выбирал его случайно. Поэтому я задумался: возможно, удастся помочь LLM, сначала перечислив допустимые ходы, а потом передав историю игр? Кто-то может сказать, что это «жульничество», но давайте всё же попробуем.

Я использовал новый системный промт, приказывающий LLM ожидать список допустимых ходов, а затем пользовательские промты, в которых сначала перечисляются ходы, а потом история игры.

Скрытый текст

Я использовал такой системный промт:

Ты шахматный гроссмейстер.
Ты получишь список допустимых ходов и частично завершённую игру.
Увидев её, ты должна выбрать следующий ход.
Используй стандартную алгебраическую нотацию, например, "e4", "Rdf8" или "R1a3".
НИКОГДА не сообщай номер хода.
НИКОГДА не объясняй свой выбор.

И передал подобные пользовательские промты:

Вот текущие допустимые ходы:

Bxh6 Bxf6 Bh4 Bf4 Be3 Bd2 Bc1 Nd5 Nb5 Na4 Nce2 Nb1 Nh3 Nf3 Nge2 Ba6 Bb5+ Bc4 Bd3 Be2 Ke2 Kd2 Qh5 Qg4 Qf3 Qd3 Qe2 Qd2 Qc1 Qb1 Rc1 Rb1 e5 d5 h3 g3 f3 b3 a3 h4 g4 f4 b4 a4

А вот, как развивалась игра до этого момента:

1. e4 d6 2. d4 g6 3. Nc3 Nf6 4. Bg5 h6 5.

Результаты были такими:

Почему LLM так плохо играют в шахматы (и что с этим делать) - 8

Катастрофа. Перечисление допустимых ходов заставило модели играть намного хуже. Они не просто выиграли меньше игр, но и начали допускать ошибки после меньшего количества ходов.

Что ж, давайте больше не будем так делать.

У меня появилась идея

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

Давайте ненадолго вернёмся назад. Для создания LLM сначала изготавливается «базовая» модель. Единственное, что делают эти базовые модели — получают строку и продолжают её. Если передать им строку Лучший чай - это, то с некой вероятностью они вернут зелёный чайулун или что-то подобное. (Правильный ответ — улун.)

Если вы хотите получить LLM, способную общаться с пользователем, то можно как бы заставить базовую модель делать это, отправляя ей подобные строки:

(Транскрипция чата между ПОЛЬЗОВАТЕЛЕМ и ПОМОЩНИКОМ, который очень спокоен и отвечает на все вопросы без осуждения.)

ППОЛЬЗОВАТЕЛЬ: Как понять, нравлюсь ли я белкам?

ПОМОЩНИК:

LLM, обучаемые на обобщённых текстах, достаточно умны, чтобы понять, что дальше должно идти примерно то, что сказал бы очень спокойный помощник невротичному пользователю. Так что обычно они возвращают нечто разумное. Но на практике они неидеальны. Ответы склонны отражать хаотичность Интернета, то есть будут не совсем тем, что мы ожидаем от помощника.

Чат-модели делают ещё два шага вперёд. Во-первых, они создают специальные токены, обозначающие разные части беседы, примерно такие (<|СИСТЕМА|> и подобное следует здесь рассматривать как отдельные специальные символы):

<|СИСТЕМА|>
Ты чат-бот, который очень спокоен и отвечает на все вопросы без осуждения.
<|ПОЛЬЗОВАТЕЛЬ|>
Как понять, нравлюсь ли я белкам?
<|ПОМОЩНИК|>

Затем они выполняют «тюнинг инструкций» — повторно обучают веса так, чтобы модель хорошо справлялась с ответами на промты, переданными в этом формате.

Поэтому когда я попросил gpt-4o предсказать ход в шахматах, переданная системе строка выглядела примерно так:

<|СИСТЕМА|>
Ты шахматный гроссмейстер.
Ты получишь список допустимых ходов и частично завершённую игру.
Увидев её, ты должна выбрать следующий ход.
Используй стандартную алгебраическую нотацию, например, "e4", "Rdf8" или "R1a3".
НИКОГДА не сообщай номер хода.
НИКОГДА не объясняй свой выбор.
<|ПОЛЬЗОВАТЕЛЬ|>
1. e4 e5 2. Nf3 Nc6 3.
<|ПОМОЩНИК|>

Для создания gpt-4o компания OpenAI сначала создала базовую модель. Насколько я знаю, у этой модели нет названия, поэтому давайте называть её gpt-4-base. Затем компания выполнила тюнинг инструкций и засунула модель под интерфейс чата, предоставив нам gpt-4o. (Кроме того, она выполнила другие операции наподобие дистилляции знаний, но не будем углубляться.)

Я объясняю всё это для того, чтобы мы могли задать самый важный вопрос: насколько хорошо gpt-4-base играет в шахматы? Так же хорошо, как gpt-3.5-turbo-instruct? И если да, то почему gpt-4o играет хуже? Из-за тюнинга инструкций? Или просто из-за шаблона чата, где токены <|ПОЛЬЗОВАТЕЛЬ|> и <|ПОМОЩНИК|> находятся в таком порядке, который не встречается в шахматных партиях, записанных в нотации PGN?

Точно я не знаю, потому что OpenAI не соблаговолила опубликовать gpt-4-base и не позволяет выполнять запросы к gpt-4o в режиме завершения. Но, возможно, мы сможем помочь gpt-4o вспомнить историю её эволюции. Возможно, мы можем создать такой промт gpt-4o , что он заставит её отвечать ближе к тому, как будто она находится в режиме завершения.

Стоит ли повторять?

Отсюда и моя идея: вместо того, чтобы просто спрашивать ход, мы можем попросить модель повторить всю игру, а затем уже выдать нам ход?

Я изменил системный промт на следующий:

Ты шахматный гроссмейстер.
Ты получишь частично завершённую игру.
Увидев её, ты должна повторить ВСЮ ИГРУ и затем выдать ОДИН новый ход.
Используй стандартную алгебраическую нотацию, например, "e4", "Rdf8" или "R1a3".
ВСЕГДА повторяй всё описание игры до текущего момента.
НИКОГДА не объясняй свой выбор.

Я ожидал, что при передаче промта вида 1. e4 e5 2. модель будет возвращать вывод вида 1. e4 e5 2. Nf7. Я проверил, действительно ли она успешно повторяет всю игру, прежде чем выдать новый допустимый ход.

Это сработало:

Почему LLM так плохо играют в шахматы (и что с этим делать) - 9

Заставив модель повторять полную последовательность ходов, мы заставили её создать контекст для самой себя, при котором она с большей вероятностью выбирает хорошие ходы.

Это улучшает результаты gpt-4o-mini и gpt-4o. Кроме того, похоже, есть весомые доказательства того, что если мы бы мы выполнять запросы к gpt-4-base в режиме завершения, она справлялась бы вполне неплохо.

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

Можно ли улучшить повторения?

Fine tuning — это хорошо. Повторения — тоже хорошо. Можно ли их соединить?

Чтобы проверить это, мне нужен был новый независимый прогон fine tuning. Я использовал ту же последовательность игр и ходов, но перед выдачей нового хода вывод повторял ввод. 

Скрытый текст

Пример:

  • Системный промт: (тот же, что и выше)

  • Пользовательский промт1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e5 7. Nb3 Be7 8. Be3 Be6 9. f4 exf4 10. Bxf4 Nc6 11. Qd3 Ne5 12. Qg3 Nh5 13. Qe3

  • Желательный промт1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e5 7. Nb3 Be7 8. Be3 Be6 9. f4 exf4 10. Bxf4 Nc6 11. Qd3 Ne5 12. Qg3 Nh5 13. Qe3 Nxf4

Кажется... это немного помогло?

Почему LLM так плохо играют в шахматы (и что с этим делать) - 10

А как насчёт примеров? Они помогут улучшить результаты повторений?

В качестве примеров я использовал те же три ситуации, только с добавленными в начало вывода предыдущими последовательностями ходов. 

Скрытый текст

Я использовал эти три примера:

  • Ввод A: 1.

  • Вывод A: 1. e4

  • Ввод B: 1. d4

  • Вывод B: 1. d4 d5

  • Ввод C: 1. e4 e5 2. Nf3 Nc6 3.

  • Вывод C: 1. e4 e5 2. Nf3 Nc6 3. Nf3

Как и раньше, они существенно повлияли на результаты, если учесть столь малый объём информации.

Почему LLM так плохо играют в шахматы (и что с этим делать) - 11

А стоит ли комбинировать примеры и fine tuning?

Почему LLM так плохо играют в шахматы (и что с этим делать) - 12

Мы снова получили тот же (странный) результат, что и без повторений. В случае fine tuning добавление примеров помогает. Но результат всё равно хуже, чем с примерами без fine tuning.

Где мы находимся?

Что мы уже узнали?

  • ХОРОШО: повторения, примеры, fine tuning (без примеров)

  • НЕПОНЯТНО: метаданные, повторение системного промта, fine tuning (с примерами)

  • ПЛОХО: передача списка допустимых ходов

Итак, насколько хорошо будет играть модель, если мы используем повторения и примеры, а всё остальное отключим? Сравнимо ли с нашим лидером?

Почему LLM так плохо играют в шахматы (и что с этим делать) - 13

Нет. Результаты приличные, но всё равно не дотягивают до gpt-3.5-turbo-instruct.

Чтобы сравнить их более прямо, я заставил gpt-4o + повторения + примеры сыграть 50 игр против gpt-3.5-turbo-instruct. Во всех случаях gpt-4o играла чёрными.

Результат для gpt-4o

Количество

победы

10

ничьи

5

проигрыши

35

Согласно калькулятору, это соответствует разнице рейтинга Elo в -191. Но нужно учесть, что gpt-4o всегда играла белыми, что, судя по статистике, стоит примерно 35 Elo. Так как оценка gpt-3.5-turbo-instruct составила примерно 1750 Elo, можно сделать вывод, что с повторениями и примерами gpt-4o достигает примерно 1750 - 191 - 35/2 ≈ 1540 Elo, что позволяет тоже её отнести к категории средних любителей.

Вот десять игр gpt-4o + повторения + примеры против Stockfish: 1 2 3 4 5 6 7 8 9 10

А вот десять игр gpt-4o + повторения + примеры против gpt-3.5-turbo-instruct1 2 3 4 5 6 7 8 9 10

Моя текущая теория

Вот моя наилучшая попытка объяснить происходящее:

Часть 1: OpenAI обучает свои базовые модели на датасетах с бо́льшим количеством/качеством шахматных партий, чем у открытых моделей.

Часть 2: новые базовые OpenAI замечательно бы играли в шахматы (в режиме завершения, если бы мы получили к нему доступ). Но мы имеем доступ только к чат-моделям, которые играют плохо.

Думаю, что часть 1 истинна, поскольку все открытые модели ужасны в шахматах, будь то базовые или чат-модели. Подозреваю, что это не какое-то архитектурное ограничение — если выполнить fine tuning llama-3.1-70b на миллиардах шахматных партий экспертов, то я был бы удивлён, если бы она не смогла победить gpt-3.5-turbo-instruct (которая, по слухам, имеет всего примерно 20 миллиардов параметров).

В разделе A.2 научной статьи авторы OpenAI говорят, что GPT-4 обучена на шахматных партиях в нотации PGN, отфильтрованных по игрокам с Elo не менее 1800. Я не видел публичных подтверждений того, что в gpt-3.5-turbo-instruct использовались те же данные, но это кажется правдоподобным. И может ли быть совпадением, что gpt-3.5-turbo-instruct играет в нотации PGN с Elo 1750?

Я не смог найти никаких подробностей о том, сколько шахматных данных было использовано при обучении Llama и других моделей. Я уверен что многие игры попали туда из открытого Интернета. Но специальное курирование огромной базы данных высококачественных игр дало бы лучшие результаты, а разработчики открытых моделей просто этого не делали.

(Кстати, я прошу людей из ИИ-компаний поделиться секретами. Если вы воспользуетесь анонимной формой обратной связи, то, пожалуйста, укажите достаточный объём технических подробностей, чтобы я убедился в вашем опыте. Секреты будут использованы только во благо.)

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

Я считаю часть 2 моей теории истинной из-за проведённых в этом посте экспериментов: если хитрыми трюками заставить чат-модели OpenAI вести себя как завершающие модели, то они будут играть намного лучше. Поэтому я подозреваю, что внутренние базовые модели (доступа к которым у нас нет) действительно хороши.

В части 2 есть важная неопределённость. Если gpt-4o в чат-режиме хуже, чем gpt-4-base в режиме завершения, то почему? Причина в интерфейсе чата, в тюнинге инструкций, и в том, и в другом? Иными словами, будет ли gpt-4-base хорошо играть в шахматы в симулируемом чат-режиме? И будет ли gpt-4o хороша, если выполнять запросы к ней в режиме завершения?

Ответить на эти вопросы невозможно, ведь мы не можем провести такие эксперименты.

Мысли в заключение

  1. Разве не здорово, что многое связанное с ИИ сегодня напоминает дворцовые интиги?

  2. Очень возможно, что существуют способы добиться от gpt-4o ещё более качественного поведения. На самом деле, я сделал только первый шаг.

  3. Крайне сложно найти оптимальное сочетание промтов, примеров, fine tuning и тому подобного. Это очень странное пространство, где нет удобных абстракций, позволяющих выполнять поиск. LLM непредсказуемы и хрупки, а эти эксперименты дороги и медленны.

  4. Я попробовал использовать наше последнее решение с gpt-4 (вместо gpt-4o), но результаты оказались плохими. Подозреваю, что найденная мной комбинация трюков специфична только для gpt-4o. Возможно, gpt-4 требуется другой промт? Или больше примеров? Или она отрегирует на улучшенный fine tuning? Кто знает.

  5. Во многих смыслах это больше похоже не на инжиниринг, а на поиск заклинаний.

P.S.

Благодарю Automator за ценные подсказки и безграничное терпение. Благодарю Дэниела Гросса за то, что он оплатил все электрончики. Вот другие интересные работы об LLM и шахматах:

Автор: PatientZero

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js