Self-play создаёт учебную программу без готового набора правильных ходов: соперник растёт вместе с агентом. Но игра против собственной текущей версии может вращаться по кругу. Нужны поиск, архив стратегий и оценка, которая не подыгрывает новому чемпиону.

Камень, ножницы, бумага уже предупреждают

Пусть строковый игрок выбирает смешанную стратегию pp, столбцовый — qq, а матрица выигрыша первого

A=(011101110).A= \begin{pmatrix} 0&-1&1\\ 1&0&-1\\ -1&1&0 \end{pmatrix}.

Ожидаемый выигрыш равен pAqp^\top Aq. Равновесие Нэша — равномерная смесь (1/3,1/3,1/3)(1/3,1/3,1/3). У неё нет единственного «лучшего хода»; ценна непредсказуемость.

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

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Матрица результатов трёх стратегий и циклический граф доминирования
Рис. 72.1. Победа над предшественником скрывает цикл

Слева дана матрица win rate, справа стрелки показывают отношение «побеждает чаще 50%». Упорядочить вершины сверху вниз невозможно: граф содержит цикл. Серый столбец «против смеси» даёт другой, более устойчивый итог.

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

В конечной игре с нулевой суммой первый игрок решает

maxpminqpAq,\max_p\min_q p^\top Aq,

второй —

minqmaxppAq.\min_q\max_p p^\top Aq.

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

В последовательной игре состояние ss содержит позицию, действие — допустимый ход, терминальная награда z{1,0,1}z\in\{-1,0,1\}. Это MDP с особой частью состояния: очередью хода соперника. Для симметричной игры ценность позиции с точки зрения текущего игрока меняет знак после перехода.

Почему self-play создаёт данные

В шахматах число возможных позиций огромно, а экспертные партии покрывают лишь узкую область. Self-play генерирует тройки:

(st,πt,z),(s_t,\pi_t,z),

где πt\pi_t — улучшенное поиском распределение ходов, zz — итог партии. Сеть учится одновременно предсказывать policy и value:

L=(zvθ(s))2πlogpθ(s)+λθ2.\mathcal L=(z-v_\theta(s))^2 -\pi^\top\log p_\theta(\cdot\mid s) +\lambda\|\theta\|^2.

Цель policy берётся не из человеческой записи, а из поиска. Цель value приходит только после конца партии и переносится ко всем посещённым состояниям. Это длинный credit assignment, знакомый по actor–critic, но с терминальным исходом.

Поиск MCTS и правило PUCT

Monte Carlo Tree Search многократно проходит дерево:

  1. выбирает перспективные рёбра;
  2. расширяет новую позицию;
  3. оценивает её сетью;
  4. переносит значение назад;
  5. после бюджета ходов строит policy из счётчиков посещений.

В AlphaZero-подобной схеме действие выбирают по

a=argmaxa[Q(s,a)+cpuctPθ(as)bN(s,b)1+N(s,a)].a=\arg\max_a\left[ Q(s,a)+ c_{\mathrm{puct}}P_\theta(a\mid s) \frac{\sqrt{\sum_bN(s,b)}}{1+N(s,a)} \right].

QQ использует найденные результаты, prior PθP_\theta направляет поиск, дробь поощряет мало посещённые ветви. Это локальная версия обмена между исследованием и использованием из задачи о бандитах: каждый узел решает её заново для собственных действий. В начале prior силён; с ростом NN фактические оценки получают больший вес.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Дерево игры с этапами selection expansion evaluation backup
Рис. 72.2. Одна итерация дерева MCTS по шагам

Красный путь показывает selection по PUCT, новый узел обведён, рядом сеть выдаёт value и priors. Синие стрелки backup возвращают значение с чередующимся знаком. У рёбер подписаны (N,Q,P)(N,Q,P) до и после итерации.

Лаборатория лиги

Self-play, циклы лучших ответов и лига стратегий

Загружается живая иллюстрация…

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

Поменяйте правило допуска чемпиона: одна серия из 20 игр даёт шумный вывод. Сравните его с 400 играми и перестановкой цвета/первого хода. Не принимайте процент побед без доверительного интервала.

Лига вместо зеркала

Архив хранит прошлые policy и специализированных соперников. Новая версия играет не только с собой, но и со смесью архива. Распределение соперников можно повышать для тех, против кого win rate около 50%: они дают информативные партии.

В population-based training несколько агентов развиваются параллельно. Meta-game строит матрицу результатов между ними, а затем выбирает смесь, устойчивую к лучшим ответам. Это ближе к равновесию, чем лестница одного рейтинга.

Однако архив увеличивает вычисления и может зафиксировать старые слабости. Нужна политика отбора: хранить разнообразные стратегии, а не каждую контрольную точку.

Оценка без утечки

Если кандидат участвовал в выборе тестовых соперников, результат оптимистичен. Нужен замороженный evaluation pool, не влияющий на обучение. Цвета и начальные позиции балансируют; seed фиксируют; повторяющиеся дебюты учитывают как зависимые наблюдения.

Для пары игроков можно оценить Elo:

Pr(i побеждает j)=11+10(RjRi)/400.\Pr(i\text{ побеждает }j)= \frac1{1+10^{(R_j-R_i)/400}}.

Но Elo предполагает транзитивную одномерную силу. При циклах матрица попарных результатов содержит больше информации, чем рейтинг. Полезны exploitability, Nash averaging и performance profiles.

Связь с моделью Брэдли–Терри прямая: обе превращают разность скрытых баллов в вероятность победы, обе ломаются на систематической нетранзитивности.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Попарная матрица восьми агентов, Elo-рейтинг и остатки модели
Рис. 72.3. Рейтинг сжимает матрицу и теряет циклы

Слева показаны win rates всех пар. В центре — одномерный Elo. Справа — остатки «наблюдаемая минус предсказанная вероятность»: треугольный рисунок выявляет цикл стилей, невидимый в одном числе.

От AlphaGo к AlphaZero

AlphaGo сочетала обучение на человеческих партиях, reinforcement learning и поиск. AlphaGo Zero начинала только с правил и self-play, а AlphaZero распространила схему на шахматы и сёги. Это не означает «данные не нужны»: партии self-play и вычисления поиска сами являются огромным набором данных, созданным системой.

Правила должны быть точными, симулятор — быстрым, результат — объективным. В открытом мире нет удобного терминального zz, а действия могут иметь необратимые последствия. Поэтому перенос self-play на диалог, экономику или безопасность требует модели оппонента и очень осторожной постановки.

Практика с OpenSpiel

OpenSpiel содержит реализации игр, алгоритмы и метрики. Для школьного исследования подойдут крестики-нолики, Kuhn poker или Leduc poker. У крестиков-ноликов можно вычислить точный minimax, поэтому это хороший unit test. Kuhn poker требует смешанных стратегий и скрытой информации.

Сравните три режима: self-play против последней версии, равномерный архив и лига с приоритетом соперников около 50% win rate. Одинаковый бюджет измеряйте не эпохами, а числом симуляций или позиций. Итогом должна быть полная матрица игр, а не одна победная серия.

Мини-исследование: стратегия, которая проходит турнир, но проигрывает лиге

Сконструируйте четыре агента для расширенной игры камень–ножницы–бумага. Первый играет равномерно, второй в 70% выбирает камень, третий является лучшим ответом ко второму, четвёртый — лучшим ответом к третьему. Проведите полную round-robin матрицу минимум по 10 000 партий на пару.

Теперь сравните три правила выбора чемпиона: win rate против непосредственного предшественника, средний win rate против всех и worst-case win rate против любого соперника. Рейтинги разойдутся. Участник, созданный как лучший ответ, может выглядеть великолепно в одной колонке и быть хрупким в остальных.

Составьте evaluation mixture из архива и вычислите expected win rate каждого агента. Затем найдите такую смесь, которая максимизирует минимальный результат против чистых соперников. Для маленькой матрицы это линейная программа. Полученная смесь может не включать агента с лучшим средним.

Этот опыт подготавливает попарные модели предпочтений: одномерный score удобен, но полная матрица хранит нетранзитивную структуру. На защите показывайте обе, если residual рейтинговой модели систематичен.

Повторите tournament после ограничения каждой пары лишь двадцатью играми. Bootstrap-ом пересэмплируйте исходы и получите распределение выбора чемпиона. Циклическая структура останется, но sampling noise добавит нестабильность. Разделите эти эффекты: uncertainty уменьшается новыми партиями, нетранзитивность — нет.

Для sequential games дополнительно меняйте первый ход и начальные позиции. Иначе агент может получить рейтинг за преимущество стороны. Матрица должна хранить paired results при обоих цветах, как блокированный эксперимент.

Лига сильнее последней версии

Self-play — генератор задач, подстраивающихся под текущий уровень. MCTS превращает оценки сети в улучшенные цели, а сеть возвращает поиску обобщение. Но нетранзитивность разрушает простую идею «новее значит сильнее». Архив, лига и независимое оценивание входят в алгоритм не меньше loss-функции.

Задачи