Тренировка шахматной оценочной функции

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

Я не специалист по машинному обучению, я пытаюсь учиться по учебникам и учебникам. В каждом уроке вознаграждение довольно простое, часто 1, 0, может быть -1, но в шахматах такого очевидного вознаграждения нет (независимо от позиций мат-мат). Например, предположим, у меня есть ситуация на доске. Я делаю 10 (случайных) ходов, и в этот момент я должен рассчитать вознаграждение, разницу (или ошибку) между начальной позицией и текущей. Как это сделать, когда моя единственная оценочная функция находится на тренировке?

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

2 ответа

Решение

Вы не можете сделать это напрямую.

Несколько подходов, которые я могу предложить:

  • Использование скоринга из внешнего источника неплохо для того, чтобы, по крайней мере, запустить ваш алгоритм. Алгоритмы оценки заданной позиции довольно ограничены, и ваш ИИ не сможет достичь мастер-уровня, используя это в одиночку.
  • Изучите возможность оценки позиции с помощью другого ИИ, играющего в шахматы (в идеале с открытым исходным кодом). Скажем, у вас есть "учитель" ИИ. Вы запускаете 2 экземпляра и начинаете игру с позиции, которую хотите оценить. Позвольте им играть друг против друга оттуда до конца игры. Был ли этот шаг успешным? Вознаградите свой собственный ИИ с учетом результата.
  • Чтобы добавить некоторую изменчивость (вы не хотите быть лучше, чем один ИИ), сделайте то же самое с другими ИИ. Или даже, ваш собственный ИИ играет против самого себя. Однако для того, чтобы последний работал, он, вероятно, должен быть прилично играть в шахматы, а не играть совершенно случайно. Вы можете повторить одно и то же движение много раз и завершить игру, позволяя вашему ИИ случайным образом исследовать новые ходы и стратегии (пример: попытка 2-го лучшего движения в будущем).
  • Накормите свой ML, используя наборы данных игр между реальными игроками. Таким образом, каждый ход выигравших и проигравших игроков может быть "усилен"
  • Пусть ваш ИИ учится, играя против реальных игроков. Усильте как ваши действия ИИ (проигрышные и выигрышные), так и движения игроков.

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

Я делаю это, играя около 5-10 игр со случайными ходами открытия книги. Это сделано для того, чтобы модель не переподгонялась, потому что она анализирует одни и те же позиции. Затем я собираю результаты игр и оценки всех позиций, которые искал движок. Результат игры был представлен как -1 для победы черных, 0 для ничьей и +1 для победы белых, и поэтому необходима некоторая функция, чтобы уменьшить оценку, чтобы она находилась в диапазоне от -1 до +1. Здесь я использовал tanh(0.5*Eval(pos)).

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

Другие вопросы по тегам