Cypha / Шахматы

Демонстрация продукта

Сыграйте в шахматы против Cypha

Cypha никогда не видела шахматной партии. Она училась, глядя, как думает обычная шахматная программа — 26 568 позиций, каждая размечена собственным вердиктом этой программы о том, кто выигрывает — пока Cypha не научилась выдавать вердикт сама.

То, во что вы играете ниже, — это она, работающая в вашем браузере внутри неглубокого перебора. Её можно обыграть, и она по-прежнему проигрывает той программе, у которой училась. Каждое число на этой странице вышло из того прогона обучения, который дал загружаемые страницей веса.

Измерено, а не заявлено

Среднеквадратичная ошибка (RMSE) ниже — обычная мера того, насколько далеко промахнулся набор догадок; чем она меньше, тем ближе модель к своему учителю.

R² на отложенных
—
RMSE
—
Позиций
—
против учителя
—

R² считается на отложенных позициях, которых модель при подгонке не видела. Матчевая строка — это Cypha на глубине перебора 2 против движка-учителя на той же глубине, со случайными дебютами и чередованием цветов. Все четыре числа описывают модель в том виде, в каком её дистиллировали — они зафиксированы и не являются измерениями вашей копии.

Ваша копия продолжает учиться. Cypha учится онлайн, поэтому голова не перестаёт подгоняться, когда загрузка закончилась. Каждый ход, который она делает против вас, — это ещё одна обучающая пара, и панель под доской показывает, насколько ваша копия отошла от той, что поставлялась.
И играть лучше это её пока не заставляет. Измерено, а не предположено. За 12 партий с самой собой поправка уменьшает ошибку головы относительно её собственного перебора от 0.76 к 0.67 пешки — и там, где замороженная голова уходит на 4.6% хуже за сессию, обучающаяся становится на 5.2% лучше. То есть подгонка настоящая. Но копия, обученная на 1119 позициях, а затем сыгравшая против поставляемой копии 24 партии на глубине 2 с чередованием цветов, заканчивает со счётом 6 побед–7 поражений–11 ничьих: полное равенство.

Это ожидаемый результат, и его стоит назвать, а не спрятать. Сигналом служит собственный перебор модели на глубину 2, который едва глубже того, что видит сама статическая голова — научиться соглашаться с самим собой не то же самое, что стать сильнее. Тысяча позиций против 26 568, на которых её дистиллировали, — это тоже ничто. Честное утверждение в том, что онлайн-обучение работает и делает ровно то, что заявлено; утверждение, что оно обыграет поставляемую модель, не заслужено.
Простыми словами

Что это такое за минуту

Проблема

Каждая новая конструкция искусственного интеллекта (ИИ) приходит с объяснением, почему она должна работать. Чтение объяснения не говорит ничего о том, работает ли она. Шахматы это решают, потому что ответ не дело вкуса: либо она играет разумно и по правилам, либо нет, и вы можете сесть и выяснить.

Решение

Обычная шахматная программа оценивает позицию перебором ходов вперёд. Cypha показали 26 568 таких оценок и подогнали одну формулу, чтобы их воспроизвести — одна строка математики над 388 числами, описывающими доску. В архитектуру ради шахмат ничего не добавили. Поменялись только числа, которые в неё подавали.

Кому это нужно

Всем, кто взвешивает Cypha и предпочёл бы проверить, а не поверить на слово. Тем, кто работает с машинным обучением и хочет посмотреть, как модель продолжает учиться прямо во время использования. И всем, кому просто хочется партию — всё работает в браузере, и ничего из сыгранного никуда не уходит.

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

cypha::Cypha — шахматная голова учится

Кликните по фигуре, затем по полю, куда она идёт. Допустимые поля отмечены.

Позиция

Загрузка модели…
Скачиваются дистиллированные веса.
Оценка Cypha
—
Узлов
—

Что рассматривала Cypha

Ходы

Учится у вас

Рейтинг на этой глубине
—
Используемая модель
глубина 2
Выучено позиций
0
Сыграно партий
0
Отход от поставляемой
0.00%
Последняя поправка
—

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

Рейтинг считается по внутренней лестнице, а не по шкале Fédération Internationale des Échecs (FIDE) — нет честного способа поставить число FIDE тому, кто никогда не играл с рейтинговым человеком. Эталонный движок на глубине 1 закреплён за 1000, и всё подогнано по 210 партиям методом максимального правдоподобия Брэдли — Терри, так что от порядка партий это не зависит. Измеренная лестница: эталон 1000 / 1171 / 1245 на глубинах 1–3, Cypha 798 / 1010 / 1161. Cypha отстаёт примерно на одну глубину перебора от движка, из которого дистиллирована, а погрешности примерно ±50 — вот что дают 210 партий.

У каждой настройки силы своя модель. Голову, играющую на глубине 1, поправляют в сторону перебора глубины 1; на глубине 3 цель другая и лучше. Загонять обе в один вектор весов — значит просто заставить их спорить. Переключите силу, и счётчики сменятся вместе с ней.

Оценка — это линейная функция от 388 признаков. У неё нет собственной глубины перебора, нет дебютной книги и нет эндшпильных знаний. Обыграть её — дело ожидаемое; интересно другое: что одна отбелённая линейная голова вообще воспроизводит оценку поиска движка — и продолжает поправлять себя, пока вы играете.
Движок, признаки, дистиллированные веса и игрок — всё работает локально. Никуда ничего не отправляется, и никакая модель не скачивается сверх пары килобайт коэффициентов. То, чему научилась ваша копия, хранится в вашем браузере, принадлежит вам и никогда не выгружается — так что чужие партии не сдвинут вашу модель, а ваши не сдвинут чужую.
Метод

Как движок становится моделью Cypha

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

Цепочка дистилляции: эталонный движок, проверенный perft, размечает 26 568 позиций, которые превращаются в 388 признаков и подгоняются в голову Cypha размером 9,4 килобайта с R-квадрат 0,866 на отложенных данных
прокрутите, чтобы увидеть всю схему →
Дистилляция, а не открытие. Каждое число в последнем блоке измерено тем прогоном обучения, который дал веса, загружаемые этой страницей.
Шаг 1

Учитель

Движок на 0x88 с полной генерацией легальных ходов, оценкой по материалу и таблицам фигура-клетка, упорядочиванием «самая ценная жертва – наименее ценный атакующий» (MVV-LVA) и поиском спокойных позиций. Проверен на пяти стандартных позициях perft, включая kiwipete, так что правила доказуемо верны ещё до того, как из него что-то выучат.

Шаг 2

Данные

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

Шаг 3

Признаки

388 измерений: разность занятости по таблицам «фигура — поле» шириной 384 (6 типов × 64 поля) плюс пара слонов, сдвоенные пешки, подвижность и стадия партии. Всегда с точки зрения той стороны, которая ходит, так что один вектор весов обслуживает оба цвета.

Шаг 4

Подгонка

WorldPrior θ₀, подгоняемый онлайн по Велфорду, отбеливание как метрика естественного градиента, нормализованные обновления весов методом наименьших средних квадратов (LMS), затухание по минимальной длине описания (MDL), тянущее веса обратно к априору, и буфер повтора со взвешиванием по неожиданности с эталонной для Cypha долей 0,30.

Почему это честная демонстрация

Работу сделала архитектура, а не предметная область

Каждый компонент из шага 4 — это настоящий компонент Cypha, делающий свою настоящую работу. WorldPrior — то же самое онлайновое гауссово распределение, которое даёт двумерному классификатору на странице Cypha его поверхность решения. Отбеливание — это утверждение информационной геометрии, доведённое до конкретики: обновления идут по естественному градиенту, а не по сырому. Затухание MDL — это априор Соломонова, выраженный как член сжатия.

Для шахмат изменились отображение признаков и голова — регрессия вместо классификации. Ровно это README Cypha и утверждает про один тип, который делает несколько работ, проверенное на области, где ответ однозначен: либо она играет легальные, разумные шахматы, либо нет.

Чего это не показывает

Честные границы

  • Она линейная. Линейная функция признаков фигура-клетка не может выразить безопасность короля, взаимодействие пешечной структуры или что-либо, требующее произведения двух признаков. У неё тот же потолок, который README Cypha описывает для исключающего ИЛИ (XOR).
  • Учитель скромный. Эталонный движок — грамотный классический перебор, а не Stockfish. Хорошо дистиллировать его — значит хорошо повторить скромный оценщик.
  • Своей глубины перебора нет. Сила здесь в основном идёт от альфа-бета обёртки, ровно как и у учителя.
  • Дистилляция — это не открытие. Cypha воспроизвела показанную ей оценочную функцию. Она не училась шахматам с нуля, и ничто на этой странице этого не утверждает.
Воспроизвести: node tools/chess/perft.js проверяет движок на стандартных тестовых позициях, а node tools/chess/train.js заново порождает модель с нуля с фиксированным зерном. Числа вверху этой страницы читаются прямо из файла, который создаёт этот прогон.