Cypha / Шахматы
Сыграйте в шахматы против Cypha
Cypha никогда не видела шахматной партии. Она училась, глядя, как думает обычная шахматная программа — 26 568 позиций, каждая размечена собственным вердиктом этой программы о том, кто выигрывает — пока Cypha не научилась выдавать вердикт сама.
То, во что вы играете ниже, — это она, работающая в вашем браузере внутри неглубокого перебора. Её можно обыграть, и она по-прежнему проигрывает той программе, у которой училась. Каждое число на этой странице вышло из того прогона обучения, который дал загружаемые страницей веса.
Среднеквадратичная ошибка (RMSE) ниже — обычная мера того, насколько далеко промахнулся набор догадок; чем она меньше, тем ближе модель к своему учителю.
R² считается на отложенных позициях, которых модель при подгонке не видела. Матчевая строка — это Cypha на глубине перебора 2 против движка-учителя на той же глубине, со случайными дебютами и чередованием цветов. Все четыре числа описывают модель в том виде, в каком её дистиллировали — они зафиксированы и не являются измерениями вашей копии.
Это ожидаемый результат, и его стоит назвать, а не спрятать. Сигналом служит собственный перебор модели на глубину 2, который едва глубже того, что видит сама статическая голова — научиться соглашаться с самим собой не то же самое, что стать сильнее. Тысяча позиций против 26 568, на которых её дистиллировали, — это тоже ничто. Честное утверждение в том, что онлайн-обучение работает и делает ровно то, что заявлено; утверждение, что оно обыграет поставляемую модель, не заслужено.
Что это такое за минуту
Каждая новая конструкция искусственного интеллекта (ИИ) приходит с объяснением, почему она должна работать. Чтение объяснения не говорит ничего о том, работает ли она. Шахматы это решают, потому что ответ не дело вкуса: либо она играет разумно и по правилам, либо нет, и вы можете сесть и выяснить.
Обычная шахматная программа оценивает позицию перебором ходов вперёд. Cypha показали 26 568 таких оценок и подогнали одну формулу, чтобы их воспроизвести — одна строка математики над 388 числами, описывающими доску. В архитектуру ради шахмат ничего не добавили. Поменялись только числа, которые в неё подавали.
Всем, кто взвешивает Cypha и предпочёл бы проверить, а не поверить на слово. Тем, кто работает с машинным обучением и хочет посмотреть, как модель продолжает учиться прямо во время использования. И всем, кому просто хочется партию — всё работает в браузере, и ничего из сыгранного никуда не уходит.
cypha::Cypha — шахматная голова учится
Кликните по фигуре, затем по полю, куда она идёт. Допустимые поля отмечены.
Позиция
Что рассматривала Cypha
Ходы
Учится у вас
Отход — это величина изменения вектора весов относительно дистиллированного. Последняя поправка — это насколько статическая голова ошибалась в позиции, из которой только что сделала ход, в пешках, относительно её собственного более глубокого перебора.
Рейтинг считается по внутренней лестнице, а не по шкале 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 цель другая и лучше. Загонять обе в один вектор весов — значит просто заставить их спорить. Переключите силу, и счётчики сменятся вместе с ней.
Как движок становится моделью Cypha
Это дистилляция знаний, выполненная теми же компонентами, что и любое другое приложение Cypha. Ничего специфически шахматного в архитектуру не добавляли — только признаки.
Учитель
Движок на 0x88 с полной генерацией легальных ходов, оценкой по материалу и таблицам фигура-клетка, упорядочиванием «самая ценная жертва – наименее ценный атакующий» (MVV-LVA) и поиском спокойных позиций. Проверен на пяти стандартных позициях perft, включая kiwipete, так что правила доказуемо верны ещё до того, как из него что-то выучат.
Данные
Позиции взяты из игры с самой собой со случайными дебютами и намеренным шумом, так что набор охватывает настоящие партии, а не одну узкую линию. Каждая размечена собственной оценкой поиска учителя, обрезанной до ±12 пешек, чтобы матовые оценки не задавили всё остальное.
Признаки
388 измерений: разность занятости по таблицам «фигура — поле» шириной 384 (6 типов × 64 поля) плюс пара слонов, сдвоенные пешки, подвижность и стадия партии. Всегда с точки зрения той стороны, которая ходит, так что один вектор весов обслуживает оба цвета.
Подгонка
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 заново порождает модель с нуля с фиксированным зерном. Числа вверху этой страницы читаются прямо из файла, который создаёт этот прогон.