Перейти к содержанию

3.8 Итоги и перспективы

Материал из Охота на электроовец: Большая Книга Искусственного Интеллекта

Так как всякое настоящее состояние простой субстанции, естественно, есть следствие её предыдущего состояния, то настоящее её чревато будущим.

Готфрид фон Лейбниц. Монадология

Как описано в предыдущих главах, к началу 2010-х компьютерные программы доминировали практически во всех настольных играх: некоторые из них вообще оказались решены (например, шашки), для других решения были получены для некоторого, порой весьма внушительного, подмножества позиций, и даже в шахматах, которые часто назывались самой интеллектуальной игрой, достижения компьютерных программ не вызывали сомнений. Однако в то же время существовали игры, успех машин в которых был весьма скромным, — к ним, помимо го, относились, например, покер, бридж, игра аримаа (arimaa), созданная американским программистом индийского происхождения Амаром Саедом в качестве сложной для компьютеров игры[1].

Традиционные настольные и карточные игры по размеру поискового пространства в большинстве случаев существенно уступают стратегическим компьютерным играм, таким, например, как Civilization, Heroes of Might and Magic, не говоря уже о StarCraft или Dota. И в то же время стратегические компьютерные игры по этому показателю во много раз проще, чем ряд задач, возникающих перед интеллектуальным агентом в реальном мире. Если в арсенале методов искусственного интеллекта не было методов, позволяющих создавать ботов, способных обыгрывать человека в стратегические игры, значит, об успехах в решении стратегических задач в реальном мире можно было только мечтать. Чтобы сделать противостояние компьютерным противникам в играх более сложным, программисты нередко допускали некоторое жульничество — на сверхсложных уровнях в карточных играх компьютерные игроки могли заглядывать в карты противника (например, партнёр «Рентген» в программе «Марьяж» для игры в преферанс [2]), выполнять действия быстрее или с меньшей ценой (например, в Civilization компьютерные противники на высоких уровнях быстрее совершают открытия и выполняют улучшения[3]) и, наконец, просто управлять всеми персонажами (юнитами) одновременно и «видеть» всю игровую карту целиком. В реальном мире, однако, большая часть из подобных трюков невозможна, поэтому нужно искать другие решения.

Попробуем разобраться в причинах, по которым для одних игр удалось быстро найти методы, позволяющие машинам играть достаточно сильно, в то время как в других они надолго задержались в статусе новичков. Например, очень часто в качестве причины того, что успехи машин в го гораздо скромнее, чем в шахматах, приводилось сравнение количества позиций и возможных партий в шахматах и го. Многих удовлетворяло это объяснение, поскольку чудовищные числа 10170 или 10360 буквально гипнотизировали людей и подавляли их волю к критическому мышлению. Между тем довольно очевидно, что размер поискового пространства игры не зависит от того, кто в неё играет — человек или компьютер. Кроме того, несмотря на то что успехи машин в играх были тем скромнее, чем больше было поисковое пространство этих игр, это правило всё-таки имело некоторые исключения. Например, в игре «отелло» (её также иногда называют «реверси») программы достигли уровня игры лучших людей-игроков на границе 1970–1980-х гг.: в 1980 г. программа Moor, созданная Майком Ривом, Майклом Стином и Дэвидом Леви, смогла выиграть одну из шести партий в матче с чемпионом мира Хироси Иноуэ[4]. Количество возможных позиций в «отелло» составляет[5] порядка 1028, а игр — 1050. Аналогичные показатели для английских шашек гораздо скромнее — 1020 и 1031, однако Шефферу удалось достичь подобного успеха только в 1990-е гг. В нарды — с их огромным количеством[6] позиций (1020) и игр (10144) — программа Берлинера выиграла у чемпиона мира в 1979 г.

В шахматном программировании прогресс на протяжении многих лет был связан с совершенствованием методов оценки позиции и алгоритмов, определяющих приоритетность рассмотрения тех или иных вариантов в игровом дереве. В основе этих методов и алгоритмов были эвристические правила. Задача оценки существенно упрощается, если эту оценку можно разъять на несколько относительно независимых компонентов. Первые шахматные программы независимо оценивали материал, проходные пешки, мобильность и расположение фигур и так далее. Со временем в оценочных функциях увеличивалось количество нелинейных компонентов. Например, «цена» проходных пешек или оценки расположения фигур стали зависеть от фазы игры, со временем появились и нелинейные подходы к оценке материала — добавились компоненты, отвечающие за те или иные сочетания фигур. Усложнение оценочных функций стало возможно не только и не столько потому, что разработчики программ изобрели новые компоненты оценки, а скорее в силу того, что стали доступны масштабные вычислительные эксперименты для подбора значений растущего множества этих компонентов. В XXI в. благодаря дешевизне и доступности высокопроизводительных вычислительных машин стало возможным использование сотен тысяч и даже миллионов партий на сверхкоротких контролях времени для подстройки различных параметров шахматных эвристик. Для решения таких задач появились и общедоступные инструменты. Например, Реми Кулом, автор шахматной программы Crazy Bishop и программы для игры в го — Crazy Stone, создал утилиту CLOP (Confident Local OPtimization, уверенная локальная оптимизация) для оптимизации параметров чёрного ящика в условии наличия шумов (Noisy Black-Box Parameter Optimization). Модифицируя различные параметры вашей программы по результатам множества тестовых игр, CLOP может подобрать значения этих параметров, позволяющие программе играть лучше[7].

Создатели движка Stockfish используют для экспериментов по улучшению своей программы распределённую платформу под названием Fishtest. В вычислительных экспериментах на этой платформе периодически задействовалось свыше 2000 машин с более чем 11 000 вычислительных ядер, что позволяло играть более 10 000 тестовых шахматных партий в минуту. Всего на платформе было осуществлено свыше 110 000 тестов, каждый из которых в среднем включал несколько десятков тысяч партий[8], [9]. Несмотря на столь внушительное количество тестов, оценочная функция классической версии Stockfish базируется на наборе признаков, изобретённых людьми, хотя «цена» каждого отдельного признака и подобрана в результате автоматизированного оптимизационного процесса. Нетрудно заметить, что успех подобной стратегии во многом зависит от того, насколько удачно было произведено разделение оценки на элементарные компоненты. Поэтому одним из важных барьеров на пути достижения машинами сверхчеловеческого уровня во многих играх стала неспособность людей качественно формализовать методы, применяемые ими при оценке позиции, удачно выделить компоненты этой оценки. По мере развития методов автоматизированной подстройки параметров игровых программ многие исследователи стали задумываться над тем, чтобы автоматизировать также и задачу подбора самого множества параметров. В конце концов, если люди регулярно допускают ошибки в оценке значений тех или иных параметров, то, быть может, они неправильно выбрали и сам их набор? Благодаря созданию программ, способных играть в некоторые игры на сверхчеловеческом уровне, стало ясно, что в ряде случаев цена экспертного человеческого знания не столь уж и велика, — вспомним хотя бы игру гроссмейстера Уолтера Брауна с программой Томпсона в окончании «ферзь против ладьи» или историю со «столетней позицией» Стёрджеса.

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

Точно так же мастер го, умеющий с одного взгляда дать оценку позиции на доске, не в силах описать набор правил, лежащий в основе произведённой им оценки. Выходит, что человеческий мозг в процессе обучения способен создавать сложные методы анализа информации, хотя часто и не в состоянии их в полной мере осознать. Один из возможных путей решения возникших проблем заключался в том, чтобы выполнить своеобразный разбор на части, реверс-инжиниринг[10] этой способности мозга с целью последующего воспроизведения её в системах искусственного интеллекта. Об этом пути и о его плодах мы подробно поговорим в следующей части.

  1. Syed O. The Creation of Arimaa // http://arimaa.com/arimaa/
  2. Натансон Л., Серов А., Лесной Д. МАРЬЯЖ для Windows: академическое издание // https://dr-vamp-r.ucoz.ru/load/1-1-0-5
  3. The Computer Is A Cheating Bastard: Civilization / TV Tropes // https://tvtropes.org/pmwiki/pmwiki.php/TheComputerIsACheatingBastard/Civilization
  4. Müller K., Schaeffer J. (2018). Man Vs. Machine: Challenging Human Supremacy at Chess. New York, NY, USA: Russell Enterprises, Incorporated // https://books.google.ru/books?id=0GV2DwAAQBAJ
  5. Victor Allis (1994). Searching for Solutions in Games and Artificial Intelligence (PDF). Ph. D. Thesis, University of Limburg, Maastricht, The Netherlands // http://fragrieu.free.fr/SearchingForSolutions.pdf
  6. Tesauro G. (1992). Practical issues in temporal difference learning / Machine Learning, Vol. 8, Iss. 3—4, pp. 257—277 // https:// doi.org/10.1007/BF00992697
  7. Coulom R. (2011). CLOP: Confident Local Optimization for Noisy Black-Box Parameter Tuning // https://www.remi-coulom.fr/CLOP/
  8. Stockfish Testing Queue, retrieved 2020-04-25 // http://tests.stockfishchess.org
  9. Stockfish Testing Queue, retrieved 2022-01-28 // http://tests.stockfishchess.org
  10. * Реверс-инжиниринг — так в технике и программировании называют исследование некоторого устройства или программы, а также сопроводительной документации в целях обнаружения недокументированных возможностей, изменения исходной системы или её воспроизводства без прямого копирования.

Loading comments...