От TD-Gammon к современному AI: 30 лет reinforcement learning
В 1992 году Джеральд Tesauro опубликовал в IBM Research статью, описывающую программу для коротких нард, которая обучилась игре через self-play, используя temporal-difference learning над нейронной сетью. За год обучения на (тогда внушительном) железе TD-Gammon вышел на уровень, близкий к топу человеческой игры. Это была первая reinforcement learning система, достигшая уровня world-class в нетривиальной области.
Эта статья прослеживает, что произошло за 30+ лет с тех пор. Дуга идёт от TD-Gammon через open-source движки, институционализировавшие его подход, через эпоху AlphaGo, когда техники перенеслись на детерминированные игры, к современным системам, объединяющим поиск и нейронную оценку. Мы фокусируемся на том, что изменилось, что нет, и что всё ещё открыто конкретно в коротких и длинных нардах.
TD-Gammon (1992)
Сетап Tesauro был обманчиво простым:
- Сеть: 3-слойная feed-forward, ~80 скрытых юнитов, sigmoid-активации.
- Входы: 198-элементная сырая кодировка позиции (количества шашек на пунктах + сторона хода + куб).
- Выходы: четыре вероятности — выигрыш, выигрыш гаммоном, проигрыш, проигрыш гаммоном.
- Обучение: self-play партии. После каждого хода — TD(λ) обновление с λ=0.7. Сигнал награды: фактический исход партии в терминальном состоянии.
- Никаких человеческих игровых данных. Никаких дебютных книг. Никаких экспертных баз. Только self-play.
За месяцы обучения TD-Gammon 1.0 достиг среднего уровня игры. Версии 2.0 и 3.0 (с более глубокими сетями и поиском ply-2) достигли уровня лучших игроков-людей. Опубликованные отчёты Tesauro описывают, что TD-Gammon открывал ходы, которые человеческие эксперты не считали стандартными — особенно в дебютной игре и back-game позициях — что привело к пересмотру дебютной теории.
Что делало это замечательным в 1992 году:
- Доминирующее мнение состояло в том, что игровой AI требует ручных функций оценки или кодирования экспертных знаний.
- Reinforcement learning был нишевой темой в академическом ML, заслонённой supervised learning и символьным AI.
- Нейронные сети широко считались неспособными масштабироваться на интересные задачи (превалирующее настроение «AI winter»).
TD-Gammon был контрпримером ко всем трём утверждениям. Он повлиял на область глубоко, хотя большая часть внимания в то время была в другом месте.
Open-source институционализация: gnubg
После TD-Gammon техники просочились в community-built движки. Самым важным был GNU Backgammon (gnubg), начатый в конце 1990-х и поддерживаемый по сей день. gnubg использовал рецепт TD-Gammon — self-play TD-обучение над feed-forward сетью — но в гораздо большем масштабе и с несколькими уточнениями:
- Несколько сетей для разных фаз игры (контакт / гонка), маршрутизация в момент оценки.
- Более глубокий поиск (ply-2 по умолчанию, ply-3 и rollout’ы для серьёзного анализа).
- Таблицы match-equity для решений по кубу в матчевой игре.
- Полноценный UI, command-line инструменты и PGN/SGF-совместимость.
gnubg стал референсным движком для академического и соревновательного сообщества коротких нард. По сей день, когда исследователи хотят «проверить, что думает движок», они обычно проверяют gnubg.
Параллельно появился eXtreme Gammon (XG) как closed-source движок только под Windows. XG сильно сфокусировался на точности таблиц match-equity и произвёл то, что широко считается лучшим движком решений по кубу на рынке. У него нет API и нет версий под Linux/macOS, что ограничивает его использование в разработке ПО, но не подрывает его доминирование среди серьёзных турнирных игроков.
Эти два движка покрывали пространство «достаточно хорошо» более двух десятилетий. Академический интерес к RL в коротких нардах резко снизился после конца 1990-х — отчасти потому, что практическая задача казалась решённой, отчасти потому, что внимание сместилось на более сложные игры.
Интеррегнум Go и AlphaGo (2016)
В течение 15 лет после TD-Gammon глубокий RL на настольных играх был относительно бездействующим. Следующим водоразделом стал AlphaGo, использовавший уточнённую версию рецепта TD-Gammon, чтобы победить чемпиона мира Ли Седоля в 2016 году.
Стек AlphaGo:
- Policy network: обучалась изначально на партиях людей-экспертов (база KGS), затем уточнялась через self-play методами policy-gradient.
- Value network: обучалась на self-play партиях с TD-обновлениями.
- Monte-Carlo Tree Search: использовался в момент принятия решения, при этом policy network смещала расширение дерева, а value network оценивала листья.
Интеллектуальная преемственность от TD-Gammon очевидна: нейронная сеть, обученная из self-play, оцениваемая по исходам партий. AlphaGo добавил policy network (TD-Gammon использовал чисто value-based выбор) и MCTS (TD-Gammon использовал прямой ply-поиск). Но центральная идея — улучшать сеть, играя ею против самой себя — пришла из 1992 года.
Двумя годами позже AlphaZero (2017) обобщил AlphaGo, полностью убрав инициализацию из человеческих партий и использовав ту же архитектуру для шахмат, сёги и Go. AlphaZero играл во все три на сверхчеловеческом уровне после нескольких часов обучения на TPU.
Почему MCTS не захватил короткие нарды
Результаты AlphaZero были достаточно драматичными, чтобы можно было ожидать, что MCTS хлынет в движки коротких нард. По большому счёту этого не произошло. Две причины:
Кости раздувают дерево поиска. В Go каждый узел в MCTS-дереве — позиция, в которую вы пришли через детерминированные последовательности ходов. В коротких нардах за каждым узлом следует chance-узел (бросок костей) с 21 ребёнком. Чтобы получить ту же эффективную глубину, надо разворачивать в 21 раз больше узлов на ply, либо сэмплировать кости и принимать дисперсию.
Сеть+поиск уже хорошо работают. gnubg с оценкой ply-2 силён. Маржинальный выигрыш от MCTS поверх «сеть+ply-2» в коротких нардах гораздо меньше, чем выигрыш от MCTS над alpha-beta в шахматах (что показал AlphaZero). Соотношение цена/польза переноса MCTS на игры с костями было сложнее обосновать.
Тем не менее, гибридные подходы существуют. wildbg (Rust, 2022+) и несколько исследовательских движков экспериментировали с sampled-MCTS для коротких нард. Результаты интересные, но не произвели доминирующего движка.
Современный стек: что изменилось со времён gnubg
Если бы вы писали движок коротких нард сегодня, нацеливаясь на железо и софтверные экосистемы 2026 года, вы бы сделали другие выборы, чем gnubg в конце 1990-х — даже несмотря на то, что алгоритмическое ядро то же самое. Различия в основном инженерные:
GPU-инференс. ONNX runtime + CUDA дают суб-миллисекундную оценку позиции на современном GPU. gnubg работает на CPU. Для multi-tenant API-обслуживания GPU необходим.
Rust вместо C. Memory safety без сборщика мусора, сильная типовая система для инвариантов движка, современная build-система. Качество жизни инженера драматически выше.
HTTP API. gnubg и XG — это локально-процессные инструменты. Движок 2026 года должен экспонировать оценки через HTTP для использования в веб-приложениях, мобильных приложениях, тренерских платформах.
Multi-phase сети. gnubg использует 2 фазы (контакт + гонка). Для длинных нард мы используем 4 (блокировка, гонка, X-escaped, O-escaped) плюс единая сеть для ранних позиций. Цена небольшая (~2МБ дополнительных весов), выигрыш в точности оценки осмысленный.
Реальные экспертные партии в обучающем наборе. TD-Gammon и gnubg обучались почти исключительно из self-play. Современные обучающие пайплайны выигрывают от инъекции реально сыгранных партий в обучающий набор, особенно decision points из партий между сильными игроками-людьми. Разнообразие «интересных позиций» в реальных партиях трудно воспроизвести только из self-play.
Непрерывное обучение в продакшене. Модель улучшается, пока сервис работает. Каждый новый чемпион турнира заменяет предыдущего, а старые позиции переоцениваются новым чемпионом, чтобы уточнить их обучающие метки. Работает бесконечно на одном GPU.
Это эволюционные, а не революционные изменения. Фундаментальный алгоритм — TD-обучение над нейронной функцией ценности, обучаемой преимущественно из self-play — не изменился с 1992 года.
Состояние длинных нард
Длинные нарды получили практически нулевое академическое внимание на протяжении всей этой дуги. Причина географическая и культурная: игра доминирующе играется в России и постсоветском пространстве, в то время как AI/RL исследовательское сообщество концентрировалось на играх, знакомых западным исследователям (шахматы, короткие нарды, Go).
Это начинает меняться. Минспорт России формализовал правила в 2024 году (приказ Минспорта России №734 от 22.07.2024), дав стабильную ссылку на правила для инжиниринга. Несколько движков (Nardex среди них) теперь нативно поддерживают длинные нарды с phase-segmented сетями и правильной структурой выходов марс/кокс.
Но экосистема на десятилетия отстаёт от коротких нард. Нет общепризнанного референсного движка вроде «gnubg для нард». Нет эквивалента таблиц match-equity XG. Валидационные наборы курируются вручную, не стандартизированы сообществом. Работа интересна именно потому, что она молода.
Что ещё открыто
Три области, где у текущего state of the art есть явное пространство для улучшения:
Ply-3 инференс по умолчанию. Современные GPU поддерживают более глубокий поиск, чем сейчас используется в real-time UI. С аккуратной батчевой обработкой и кешированием ply-3 должен быть достижим как дефолт. Латентность — ограничение, а не сырые вычисления.
Архитектуры, специфичные для варианта. Большинство движков для длинных нард — адаптации сетей коротких нард (модифицировать кодировку входов, переобучить). Архитектура с нуля, спроектированная под пространство состояний длинных нард — эксплуатирующая голову, четыре фазы, призовую структуру — могла бы дать лучшую точность на параметр.
Hosted-анализ в масштабе. Экосистема всё ещё предполагает, что вы встраиваете движок в ваше приложение. Queryable API, обрабатывающий анализ для тысяч одновременных партий — это другая инженерная задача, чем десктоп-инструмент, и мы ещё в начале её решения.
Следующие две статьи в этой серии покрывают практическую сторону: как на самом деле выглядит обучающий пайплайн (Training a backgammon NN) и какова наша конкретная архитектура (Inside Nardex Engine).