Обучение функции оценки шахмат

#machine-learning #evaluation #chess #reinforcement-learning #reward

#машинное обучение #оценка #шахматы #подкрепление-обучение #награда

Вопрос:

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

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

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

Ответ №1:

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

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

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

Ответ №2:

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

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

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