Шрифт:
Интервал:
Закладка:
AlphaZero позиционируется как универсальный фреймворк для разных и до какой-то степени непохожих настольных игр. Благодаря тому что программная часть, которая описывает правила игры, вынесена в независимый модуль, а сам алгоритм обучения является общим для всех этих игр, алгоритм показывает хорошие результаты и на го, и на сёги, и на шахматах, хотя эти игры существенно отличаются друг от друга — у них весьма разные правила, разный размер игровой доски, разные коэффициенты ветвления игрового дерева.
Хотя проект AlphaZero и стал серьёзным прорывом в области создания систем ИИ для настольных игр, в отношении результата для шахмат, описанного в препринте статьи, возник ряд критических замечаний. Если посмотреть на графики обучения, видно, что разница в силе игры между AlphaZero и Stockfish (даже несмотря на разгромный счёт матча из 100 партий, приведённый в статье: 28 побед, 72 ничейных результата и ни одного поражения AlphaZero) — не так уж велика. В матче Stockfish играл без дебютной библиотеки. В демонстрационном матче программы играли на несопоставимом оборудовании: Stockfish работал на обычном CPU, правда на 64-ядерном (32 физических ядра, соответствующие 64 виртуальным), а AlphaZero — на 4 TPU первой версии (неясно, идёт ли речь о четырёх чипах, ядрах или картах, в зависимости от интерпретации суммарная производительность TPU составляла от 92 до 368 Тфлопс[1962]). Сравнить производительность CPU и TPU напрямую достаточно сложно из-за разницы их архитектур. Если взять формальную производительность во флопсах (количество операций с плавающей запятой в секунду), то оборудование AlphaZero (4 TPU) оказывается примерно на два порядка более мощным, чем 64-ядерный CPU Stockfish: 92/184/368 Тфлопс против 3 Тфлопс. Правда, если сравнивать энергопотребление этих систем, разница не будет столь огромной: TPU первой версии потребляет[1963] порядка 40 Вт, в то время как энергопотребление CPU, по всей видимости, составляло около 100 Вт (точная марка использованного CPU неизвестна).
Заявленная скорость перебора у AlphaZero была существенно ниже, чем у Stockfish. AlphaZero просматривала порядка 80 000 позиций в секунду (node per second, NPS; формально говоря, речь идёт об узлах переборного дерева в секунду, но каждый узел такого дерева — это шахматная позиция), а Stockfish — 70 млн позиций. Однако такое сравнение нельзя признать в полной мере корректным, поскольку шахматные программы по-разному учитывают просмотренные позиции. При генерации возможных ходов в шахматной программе в некоторых узлах дерева может осуществляться сокращённая генерация — например только ходов со взятием фигур или с шахами. Далее, некоторые сгенерированные ходы могут быть отсеяны и без просмотра получаемой позиции — в результате действия различных эвристик. Включать или не включать отсеянные узлы в подсчёт количества узлов? Общей практики в этом вопросе не существует. Но даже если некий ход и не был отсеян сразу, то для позиции, получившейся на доске после этого хода, не всегда может быть вызвана функция оценки. Если же оценочная функция всё-таки вызвана, то может произойти ускоренная оценка [lazy evaluation]. То есть у современных шахматных программ есть множество нюансов, влияющих на подсчёт количества просматриваемых позиций. Даже программы, у которых алгоритмы перебора очень похожи, могут в качестве выходных данных выводить сильно отличающиеся по количеству просмотренных позиций показатели. Например, программа Rybka показывает значения NPS на порядок ниже, чем Stockfish, хотя архитектурно эти программы очень похожи. В целом и среди «классических» шахматных программ распространён подход, когда скорость перебора приносится в жертву более осмысленной стратегии перебора, при которой программы компенсируют потерю скорости за счёт отсечения большего количества ненужных для анализа позиций. Но, конечно, это целесообразно только тогда, когда приводит в итоге к росту силы игры программы.
Конечно, при сравнении оценочных функций AlphaZero и классической версии Stockfish бросается в глаза то, что вычисление оценки при помощи нейронной сети требует выполнения примерно полутора миллиардов операций с плавающей запятой, что явно больше, чем для функции, основанной на наборе правил. Но дело в том, что нейронная сеть в некотором смысле берёт на себя часть функций, которые в Stockfish выполняют алгоритмы перебора. Например, нейронная сеть в состоянии произвести подсчёт атак на различные фигуры и получить хорошую оценку взятий и разменов без рассмотрения конкретных вариантов. Таким образом, оценочные функции AlphaZero и Stockfish не совпадают в полной мере по набору решаемых ими задач.
В общем, сравнивать две программы по этой метрике — плохо. Учитывая не такую большую разницу в силе игры, а также большую мощность оборудования AlphaZero, сказать однозначно, что AlphaZero именно как программа сильнее Stockfish, пока сложно.
Критические замечания высказывались также в отношении настроек Stockfish при игре с AlphaZero (маленький размер хеш-таблицы при большом числе потоков приводил к большому числу блокировок, что замедляло процесс перебора). Контроль времени (одна минута на ход) также трудно признать оптимальным для Stockfish, поскольку таким образом «выбывают из игры» сложные эвристики Stockfish, позволяющие ему рационально распределять время на обдумывание ходов в партии. Критика проекта AlphaZero со стороны сообщества разработчиков шахматных программ была подогрета тем фактом, что «победа» AlphaZero над Stockfish была подана как свершившийся факт. AlphaZero не участвовала в публичных турнирах шахматных программ, не было организовано матча со Stockfish с независимыми судьями, а исходные коды AlphaZero не были опубликованы.
Тем не менее появление AlphaZero стало важным шагом вперёд в области компьютерных шахмат. Программ, эффективно использующих GPU или TPU для шахматных вычислений, до сих пор не существовало, как и сильных программ, использующих нейронные сети. Весьма вероятно, что AlphaZero стала сильнейшей в мире шахматной машиной (при этом не факт, что AlphaZero является сильнейшей в мире программой). Большой шаг вперёд — это переход от перебора, управляемого множеством эвристик, придуманных людьми, к перебору, который управляется моделью машинного обучения. Весьма вероятно, что эвристики, придуманные людьми, содержат в себе те или иные дефекты, являющиеся плодами предвзятости экспертов.
Критика препринта статьи создателей AlphaZero была частично учтена в публикации в Science. Число партий в тестовом матче было увеличено до тысячи, для тестов была взята наиболее актуальная версия Stockfish, были проведены тесты с использованием в качестве стартовых позиций из дебютного набора, применявшегося на чемпионате Top Chess Engine Championship (чемпионат сильнейших шахматных движков) 2016 г., что уравнивало шансы сторон в дебюте. Был использован классический контроль времени: 3 часа на партию с добавлением 15 секунд на ход. В тестах Stockfish использовал 44 ядра CPU (два 2,2 ГГц процессора Intel Xeon Broadwell) при размере хеш-таблицы