В своём последнем посте я говорил об одной загадке: все большие языковые модели (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
есть специальное условие, распознающее шахматную нотацию и вызывающая внешний шахматный движок.
Я считаю, что это крайне маловероятно. Потому что:
-
Многие люди из OpenAI сказали, что они этого не делали. Да, бывает, что люди врут, но заговор поддерживать сложно; к тому же зачем врать об этом?
-
В шахматах можно прийти к одному и тому же состоянию доски путём разных последовательностей ходов. Шахматным движкам это не важно, в отличие от
gpt-3.5-turbo-instruct
, которая играет играет очень по-разному при разных последовательностях ходов. -
Хотя по стандартам шахматных любителей
gpt-3.5-turbo-instruct
великолепна, она плоха по стандартам экспертов и ужасна по стандартам шахматных движков. Если уж вы собрались жульничать, то зачем останавливаться на Elo 1750? -
Если изменить промт
gpt-3.5-turbo-instruct
, то это немного изменит и способ её игры. Существует ли какая-нибудь нейросеть, анализирующая текст и устанавливающая уровень умений шахматного движка? -
Более поздние модели OpenAI по умолчанию намного хуже в шахматах. Неужели компания удалила этот чит?
-
Ниже я покажу, что новые модели 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
(маленькая модель) это, похоже, практически ни на что не повлияло.
В случае gpt-4o
(модель побольше) ... похоже, какая-то разница есть.
Из этого можно сделать вывод, что повторение системного промта немного помогает, а метаданные немного вредят. Но не знаю точно, реально ли влияние, или это просто шум. Для простоты я решил не повторять системный промт и отключить метаданные в последующих экспериментах.
Нужно ли добавлять примеры?
Если мы хотим попросить LLM что-нибудь сделать, обычно рекомендуют дать ей несколько примеров. Поэтому я создал три небольших примера состояний доски и допустимых ходов. Я передал их «корректно», при помощи API, а не запихнув их в пользовательский промт.
Скрытый текст
-
Ввод A:
1.
-
Вывод A:
e4
-
Ввод B:
1. e4
-
Вывод B:
d5
-
Ввод C:
1. e4 e5 2. Nf3 Nc6 3.
-
Вывод C:
Bb5
Вот и всё, что я использовал, только три этих примера.
Результаты оказались такими:
Очень хорошо.
Неожиданно ли это? Мне показалось, что да.
Да, разумеется, всё это «контекстное обучение» и делает 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
Результаты были такими:
Здорово! Fine tuning помогает.
Примечание: при первом fine tuning gpt-4o
результаты казались плохими, поэтому я выполнил его снова с меньшим размером шага. Пришлось понервничать.
Следует ли комбинировать примеры и fine tuning?
Если примеры — это хорошо, и fine tuning тоже, то, может быть, соединить их будет ещё лучше?
Я предполагал, что нет, потому что три контекстных примера казались тривиальными по сравнению с сотней примеров fine tuning. После завершения fine tuning я решил, что примеры будут излишними.
Оказалось, что нет, но по другим причинам:
Судя по этому графику, 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 сначала изготавливается «базовая» модель. Единственное, что делают эти базовые модели — получают строку и продолжают её. Если передать им строку Лучший чай - это
, то с некой вероятностью они вернут зелёный чай
, улун
или что-то подобное. (Правильный ответ — улун
.)
Если вы хотите получить 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
. Я проверил, действительно ли она успешно повторяет всю игру, прежде чем выдать новый допустимый ход.
Это сработало:
Заставив модель повторять полную последовательность ходов, мы заставили её создать контекст для самой себя, при котором она с большей вероятностью выбирает хорошие ходы.
Это улучшает результаты 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
Кажется... это немного помогло?
А как насчёт примеров? Они помогут улучшить результаты повторений?
В качестве примеров я использовал те же три ситуации, только с добавленными в начало вывода предыдущими последовательностями ходов.
Скрытый текст
Я использовал эти три примера:
-
Ввод 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
Как и раньше, они существенно повлияли на результаты, если учесть столь малый объём информации.
А стоит ли комбинировать примеры и fine tuning?
Мы снова получили тот же (странный) результат, что и без повторений. В случае fine tuning добавление примеров помогает. Но результат всё равно хуже, чем с примерами без fine tuning.
Где мы находимся?
Что мы уже узнали?
-
ХОРОШО: повторения, примеры, fine tuning (без примеров)
-
НЕПОНЯТНО: метаданные, повторение системного промта, fine tuning (с примерами)
-
ПЛОХО: передача списка допустимых ходов
Итак, насколько хорошо будет играть модель, если мы используем повторения и примеры, а всё остальное отключим? Сравнимо ли с нашим лидером?
Нет. Результаты приличные, но всё равно не дотягивают до gpt-3.5-turbo-instruct
.
Чтобы сравнить их более прямо, я заставил gpt-4o + повторения + примеры
сыграть 50 игр против gpt-3.5-turbo-instruct
. Во всех случаях 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-instruct
: 1 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
хороша, если выполнять запросы к ней в режиме завершения?
Ответить на эти вопросы невозможно, ведь мы не можем провести такие эксперименты.
Мысли в заключение
-
Разве не здорово, что многое связанное с ИИ сегодня напоминает дворцовые интиги?
-
Очень возможно, что существуют способы добиться от
gpt-4o
ещё более качественного поведения. На самом деле, я сделал только первый шаг. -
Крайне сложно найти оптимальное сочетание промтов, примеров, fine tuning и тому подобного. Это очень странное пространство, где нет удобных абстракций, позволяющих выполнять поиск. LLM непредсказуемы и хрупки, а эти эксперименты дороги и медленны.
-
Я попробовал использовать наше последнее решение с
gpt-4
(вместоgpt-4o
), но результаты оказались плохими. Подозреваю, что найденная мной комбинация трюков специфична только дляgpt-4o
. Возможно,gpt-4
требуется другой промт? Или больше примеров? Или она отрегирует на улучшенный fine tuning? Кто знает. -
Во многих смыслах это больше похоже не на инжиниринг, а на поиск заклинаний.
P.S.
Благодарю Automator за ценные подсказки и безграничное терпение. Благодарю Дэниела Гросса за то, что он оплатил все электрончики. Вот другие интересные работы об LLM и шахматах:
-
Репозиторий chess gpt eval, Адама Карвонена, который провёл тщательные тесты качества игры
gpt-3.5-turbo-instruct
. -
Репозиторий chess llm interpretability Адама Карвонена и его статья Emergent World Models and Latent Variable Estimation in Chess-Playing Language Models, в которых, среди прочего, показано, что
gpt-3.5-turbo-instruct
, небольшая LLM, обученная на шахматных данных, похоже, действительно создаёт какое-то внутреннее представление состояния доски. -
Оценки рейтинга ELO Мэтью Арчера для
gpt-3.5-turbo-instruct
,gpt-3.5-turbo
иgpt-4
. Также он провёл эксперименты с разными температурами. -
Transcendence: Generative Models Can Outperform The Experts That Train Them
-
Playing chess with large language models Николя Карлини. Среди прочего, по оценке из этой статьи,
gpt-3.5-turbo-instruct
имеет Elo 1750±50. -
Репозиторий llm chess proofgame Дэниела Палеки.
Автор: PatientZero