Обучение с подкреплением · часть 1

Monte Carlo Tree Search

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

Игра с камнями

Перед двумя игроками лежит куча камней. Игроки ходят по очереди. За один ход можно забрать 1, 2 или 3 камня. Кто забирает последний камень — побеждает.

Сыграйте сами против простого соперника, чтобы почувствовать игру. Начинаете вы.

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

Куча камней

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

Дилемма: исследовать или использовать?

Прежде чем строить дерево, решим маленькую, но ключевую задачу. Представьте три игровых автомата. У каждого свой скрытый шанс выплаты, но вы его не знаете — узнать можно только дёргая ручку и глядя на результат. У вас ограниченное число попыток. Куда их тратить?

Возникает противоречие. Можно использовать (exploitation) — дёргать тот автомат, что пока приносит больше всего выигрышей. А можно исследовать (exploration) — пробовать редкие автоматы: вдруг один из них на самом деле лучше, просто ему не повезло на первых попытках. Всё время делать только одно — проигрышная стратегия.

Решение — оценка UCB1 (Upper Confidence Bound). Для варианта i, который выбирали Ni раз и который дал Wi выигрышей, при общем числе попыток N:

UCB1(i)=WiNiиспользование+clnNNiисследование

Каждый раунд выбирается вариант с наибольшим UCB1.

Левое слагаемое Wi/Ni — это средний выигрыш, оно тянет к проверенным вариантам. Правое — бонус за новизну: он велик, когда Ni мало́ (вариант редко пробовали), и тает по мере проб. Константа c (часто c=2) задаёт, насколько алгоритм «любопытен».

Сначала выполните несколько раундов по одному и перед каждым назовите автомат с наибольшей оценкой UCB. Затем увеличьте число раундов. Может ли алгоритм выбрать автомат с меньшим средним выигрышем и чем он это компенсирует?

Многорукий бандит

раунд 0
Автомат A
выигрышей 0 из 0
UCB = ∞
1 / 3
Автомат B
выигрышей 0 из 0
UCB = ∞
2 / 3
Автомат C
выигрышей 0 из 0
UCB = ∞
3 / 3
  • использование Wᵢ/Nᵢ
  • исследование (бонус)
Каждый автомат пока не пробовали — у всех бонус бесконечный.
Баланс исследования и использованияИсследовательский бонус может перевесить разницу средних выигрышей. Награда одного раунда случайна и не определяет истинное качество автомата.

Понаблюдайте: первые раунды UCB1 раздаёт по очереди всем автоматам (у нетронутых бонус бесконечный), потом всё чаще возвращается к лучшему — но никогда не бросает остальные совсем. Ровно этот механизм MCTS применяет на шаге Selection, спускаясь по дереву. Посмотрим, как из четырёх таких шагов складывается весь алгоритм.

Четыре шага, повторённые тысячи раз

MCTS не строит дерево целиком. Вместо этого он выращивает его по чуть-чуть, повторяя один и тот же цикл из четырёх шагов. Каждый цикл — это одна «прикидка» того, насколько хорош тот или иной ход.

Смысловые этапы метода
  1. SelectionВыборСпускаемся по дереву, выбирая многообещающие узлы, пока не дойдём до края изученного.
  2. ExpansionРасширениеДобавляем в дерево новый, ещё не исследованный узел-ребёнка.
  3. SimulationСимуляцияДоигрываем партию до конца случайными ходами и смотрим, кто победил.
  4. BackpropОбратный ходНесём результат вверх по дереву, обновляя статистику всех пройденных узлов.

Каждый узел дерева хранит всего два числа: Nсколько раз через него прошли, и Wсколько из этих раз привели к победе. Отношение W/N — это оценка «насколько хорош этот ход». Чем больше циклов, тем точнее оценка.

Один цикл MCTS, шаг за шагом

Ниже — настоящий MCTS, работающий на нашей игре с камнями. Жмите «Шаг», чтобы пройти фазы по очереди, или «×100», чтобы прогнать сотню циклов и увидеть, как дерево умнеет.

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

Готов к работе

ожидание
фаза 1selectionэтап цикла
фаза 2expansionэтап цикла
фаза 3simulationэтап цикла
фаза 4backpropagationэтап цикла

Состояние корень: камни — 15; ходит игрок 1; W — победы игрока 2; W/N — 0/0.

0циклов
1узел в дереве
ещё нет оценкинаиболее посещаемый ход
Один цикл MCTS внутри дереваОдин цикл последовательно выполняет выбор, расширение, симуляцию и обратное распространение статистики.

Обратите внимание: со временем алгоритм почти перестаёт спускаться в плохие ветки — рёбра к ним становятся тонкими, а N почти не растёт. Зато выигрышный ход исследуется всё глубже. Это и есть асимметричный рост дерева — фирменная черта MCTS.

А какой ход в итоге сделать?

Когда «время на размышление» вышло, бонус за исследование больше не нужен — рисковать незачем. Поэтому финальный ход выбирают не по UCB1, а просто по числу посещений N: самый «обкатанный» ребёнок корня и есть самый надёжный ход.

ход=argmaxiдети корняNi

Robust child: чаще всего посещали — значит, симуляции стабильно его одобряли.

Полный игрок просто оборачивает всё это в цикл: «подумал K циклов → сходил → соперник сходил → снова подумал». Попробуйте сыграть против настоящего MCTS, который вы только что построили:

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

Вы против MCTS

Бюджет
Куча из 15 камней. Ваш ход — попробуйте обыграть MCTS.
ещё нет оценки
Бюджет поиска меняет решениеБольший бюджет даёт больше наблюдений о продолжениях. Он не гарантирует лучшего исхода каждой партии: оценки остаются выборочными.