Кружок Программирования

Нейросети для чайников. Часть 2. Как мы прокачали сеть и приблизились к AlphaZero

В первой части мы разобрали простую нейросеть для игры в Гомоку, реалезованную в ветке neural. Теперь посмотрим, как она была улучшена (в ветке neuro_alpha_zero) и чем стала отличаться от классического подхода.

Главная цель всей работы — приблизиться к идее AlphaZero: нейросети, которая сама учится играть, анализируя позиции и выбирая лучшие ходы.


1. Как работала старая версия нейросети

Обучение отчасти происходило прямо во время игры. Это приводило к тому, что:

  • данные были шумными
  • обучение зависело от текущей партии
  • сеть могла «забывать» предыдущий опыт

Кроме того, архитектура была проще: сеть сразу выдавала карту оценок ходов без разделения на policy и value.


2. Что изменилось в новой архитектуре

В новой версии мы сделали несколько принципиальных улучшений, которые приблизили систему к подходу AlphaZero.

Главные улучшения:

  • tanh-нормализация рейтинга
  • обучение распределению ходов
  • Разделение на две головы:
    • Policy — куда ходить
    • Value — кто выигрывает
  • Хранилище партии (gameHistory):
    • сначала собираем все ходы
    • потом обучаемся по всей партии
  • Отложенное обучение:
    • обучение происходит после завершения партии
    • данные становятся стабильнее и чище

Теперь процесс выглядит так:

игра → сохранение ходов → обучение по всей партии

Это важный шаг, потому что:

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

Кроме того, архитектура стала глубже:

  • общие сверточные слои
  • раздельные policy и value головы
  • использование dropout для устойчивости обучения

Итог:

Старая версия училась «на лету» и реагировала на отдельные ходы, а новая версия 👉 учится на всей партии сразу, что делает её гораздо ближе к современным подходам вроде AlphaZero.


3. Что показывают логи после улучшений

  • Winrate вырос с ~2% до ~10–13%
  • Появились победы за ноликов (O)
  • Spread (различие ходов) вырос с ~0 до 0.1–0.4
  • Policy_loss стал стабильнее

👉 Это означает, что сеть начала понимать игру, а не просто реагировать.


4. Что такое дерево поиска (в нашей системе)

В текущей реализации используется дерево, построенное легаси-алгоритмом.

Оно делает следующее:

  • генерирует допустимые ходы
  • оценивает их рейтинг
    • Если дочерние узлы ещё не вычислены, то рейтинг вычисляется по системе скоринга по количеству двоек, троек и четвёрок своих и оппонента
    • Если дочерние узлы уже известны, то используем рейтинг лучшего дочернего узла, но со знаком минус (что хорошо для оппонента - плохо для первого игрока)
  • сохраняет их как дочерние узлы

Это дерево:

  • детерминированное (всегда одинаковый результат)
  • основано на правилах и эвристиках
  • не исследует случайные варианты

👉 По сути, это жёсткий алгоритм, а не обучение.


5. Что такое MCTS (Monte Carlo Tree Search)

MCTS — это другой тип дерева.

Он работает так:

  1. пробуем ход
  2. играем случайную партию до конца
  3. смотрим результат
  4. повторяем много раз

В итоге получаем статистику:

ход A → 70% побед  
ход B → 20%  
ход C → 10%

👉 это даёт не один ответ, а распределение вероятностей.


6. Главное отличие дерева и MCTS

Характеристика Легаси-дерево MCTS
Тип Детерминированный Стохастический (случайный)
Источник решений Правила и эвристики Симуляции партий
Выход Лучший ход Распределение ходов
Исследование Нет Да
Обучение Нет Да (через статистику)

Главная идея:

дерево → выбирает  
MCTS → исследует

7. Где мы сейчас находимся

Текущая система — это гибрид:

  • нейросеть (policy + value)
  • дерево (легаси)

То есть:

нейросеть → дерево → обучение

А в AlphaZero:

нейросеть → MCTS → обучение

👉 Мы примерно на уровне:

70–80% от AlphaZero


8. Почему это уже работает

Даже без MCTS:

  • сеть учится на множестве ходов
  • получает распределение вероятностей
  • начинает понимать стратегию

👉 Это уже даёт:

  • рост winrate
  • появление защиты
  • осмысленные решения

9. Почему сеть ещё не побеждает стабильно

Потому что:

  • дерево не исследует новые позиции
  • мало разнообразия партий
  • нет случайных симуляций (как в MCTS)

👉 Сеть учится, но в ограниченном мире.


10. Что будет дальше

Есть два пути улучшения:

  • добавить self-play (игру самой с собой)
  • реализовать MCTS

Это даст:

  • больше разнообразия
  • лучшее обучение
  • рост до уровня AlphaZero

11. Итог

Мы прошли путь:

  • от простой нейросети
  • к системе, которая анализирует позиции и выбирает стратегии

И приблизились к AlphaZero:

✔ Policy + Value  
✔ Обучение распределению ходов  
✔ Использование дерева  

❗ Нет MCTS (пока)

Главный результат:

сеть начала думать

Следующий шаг — научить её исследовать и побеждать стабильно.

М.О.