Несколько сомнений относительно применения обучения с подкреплением в таких играх, как шахматы

9

Я изобрел шахматную настольную игру. Я построил двигатель, чтобы он мог играть автономно. Двигатель в основном дерево решений. Он состоит из:

  1. Функция поиска, которая на каждом узле находит все возможные законные ходы
  2. Функция оценки, которая присваивает числовое значение позиции на доске (положительное значение означает, что первый игрок получает преимущество, отрицательное означает, что второй игрок выигрывает вместо этого)
  3. Алгоритм обрезка алгоритм Negamax

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

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

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

Пинья
источник

Ответы:

6

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

Имейте в виду: обучение подкреплению - это большой сложный предмет. Хотя это может отвлечь вас от игровых ботов, вы можете изучить основы RL. Хорошее место, чтобы начать - Обучение Укрепления Саттона и Барто : Введение

Какое еще вознаграждение в игре является частью выигрыша или проигрыша (1 или 0)?

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

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

Если я использую другие награды, например, вывод из функции оценки на каждом ходу, как я могу это реализовать?

Обычно это не так. Применение самоиграющего RL - это изучение функции возврата (иногда называемой утилитарностью ), которая предсказывает ожидание вашей общей награды + 1/0 / -1 к концу игры. Вы бы использовали это вместо вашей текущей эвристики для минимаксного поиска. Или же вы могли бы настроить свою текущую эвристическую функцию для вывода в том же диапазоне и использовать RL для оптимизации ее весов, чтобы сделать наилучшее приближение к истинной оптимальной функции возврата при воспроизведении (которая, вероятно, слишком сложна для точного вычисления).

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

Это то, что разные RL подходы, которые все пытаются сделать, есть множество разных решателей. Нет короткого способа объяснить это. Вы можете начать с простого метода, такого как Q-Learning . Q-Learning изучает оценки Q (s, a) (называемые значением действия), которые представляют собой ожидаемый доход в состоянии s и при выполнении действия a, а затем в соответствии с оптимальной политикой. Для начала он делает произвольное предположение и уточняет его ближе к истинному значению с каждым шагом в учебной среде. Простые табличные Q-ученики делают это уточнение, просто сохраняя большую таблицу всех состояний и действий с наилучшей оценкой до настоящего момента истинного значения, и усредняя в каждой новой оценке, когда она получена.

Также возможно объединить метод RL для эвристики с упреждающим минимаксным поиском - это то, что делал оригинальный AlphaGo, и что AlphaGo Zero делает во время обучения. Это мощный подход, потому что минимаксный поиск будет работать для двойной проверки сгенерированной RL эвристики. Хотя для достаточно простых игр RL может выучить идеальную эвристику, и вам потребуется только локальный поиск (каким должен быть следующий ход).

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

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

Нил Слэйтер
источник
«Укрепление обучения предназначено для работы в средах с задержкой вознаграждений. Добавление« вспомогательных »вознаграждений за временные нецелевые задачи обычно приводит к обратным результатам». Я хотел бы отметить, что есть статья, в которой предпринята попытка решить проблему редкого вознаграждения путем введения промежуточных целей « Воспроизведение опыта задним числом ».
Nbro
1
@nbro: Есть много попыток решить редкие награды, это большой открытый вопрос в RL, один из способов повысить сложность задачи - сделать награды более разреженными. Следы приемлемости являются еще одной попыткой, иерархическая RL является еще одной многообещающей областью. , , Я не думаю, что хочу добавить эти методы к ответу здесь, так как это больше о выполнимости проблемы ОП и введении в тему
Нил Слейтер