Чтобы понять AlphaGo, стоит вспомнить об игре в крестики-нолики, известной большинству детей. Делая первый ход и располагая знак в центре сетки, вы либо выигрываете, либо играете вничью. Первый ход дает преимущество: у вас будет пять ходов, в то время как у вашего соперника – всего четыре. Большинство детей интуитивно понимают это и, играя с терпеливыми взрослыми, настаивают на праве первого хода.
Достаточно просто написать компьютерную программу для игры в крестики-нолики против человека (первая такая программа была составлена в 1952 г.). Существует алгоритм, набор правил, применение которых позволит компьютеру всегда побеждать или играть вничью. Подобно «Hello, world!», программирование игры в крестики-нолики считается простым упражнением на вводных уроках информатики.
Го – игра куда более сложная, однако также играется на доске, представляющей собой сетку. Каждому игроку дается горстка черных или белых камешков. Новички играют на сетке из девяти горизонтальных и девяти вертикальных линий, мастера – на сетке 19×19. Черные ходят первыми, размещая камень на пересечении линий. Следом ходят белые, также помещая камень на пересечении. Игроки ходят по очереди, стремясь «захватить» камни соперника и окружить их.
Люди играют в го около 3000 лет. Разработчики и поклонники этой игры изучали ее закономерности начиная с 1965 г., а первая программа для го была написала в 1968 г. Существует целое научное направление, посвященное только этой игре, названное (как ни странно) компьютерное го.
Игроки и исследователи компьютерного го годами накапливали записи игр, которые выглядят примерно так:
(; GM [1]
FF [4]
SZ [19]
PW [Sadavir]
WR [7d]
PB [tzbk]
BR [6d]
DT [2017 – 05–01]
PC [The KGS Go Server at http://www.gokgs.com/]
KM [0.50]
RE [B+Resign]
RU [Japanese]
CA [UTF-8]
ST [2]
AP [CGoban:3]
TM [300]
OT [3x30 byo-yomi]
; B [qd]; W [dc]; B [eq]; W [pp]; B [de]; W [ce]; B [dd]; W [cd]; B [ec]; W [cc]; B [df]; W [cg]; B [kc]; W [pg]; B [pj]; W [oe]; B [oc]; W [qm]; B [of]; W [pf]; B [pe]; W [og]; B [nf]; W [ng]; B [nj]; W [lg]; B [mf]; W [lf]; B [mg]; W [mh]; B [me]; W [li]; B [kh]; W [lh]; B [om]; W [lk]; B [qo]; W [po]; B [qn]; W [pn]; B [pm]; W [ql]; B [rq]; W [qq]; B [rm]; W [rl]; B [rn]; W [rj]; B [qr]; W [pr]; B [rr]; W [mn]; B [qi]; W [rh]; B [no]; W [on]; B [nn]; W [nm]; B [nl]; W [mm]; B [ol]; W [mp]; B [ml]; W [ll]; B [np]; W [nq]; B [mo]; W [mq]; B [lo]; W [kn]; B [ri]; W [si]; B [qj]; W [qk]; B [kq]; W [kp]; B [ko]; W [jp]; B [lp]; W [lq]; B [jq]; W [jo]; B [jn]; W [in]; B [lm]; W [jm]; B [ln]; W [hq]; B [qh]; W [rg]; B [nh]; W [re]; B [rd]; W [qe]; B [pd]; W [le]; B [md])
Человеку может показаться, что текст выше – полная бессмыслица, но он структурирован для компьютерной обработки. Такая структура называется «Умный игровой формат» (SGF, Smart Games Format). Из набора цифр и букв мы узнаем о том, кто играл партию, где, какие ходы были сделаны и как игра завершилась.
Ход игры описан в той части, где мы видим максимально плотный текст. Колонки в го маркированы в алфавитном порядке слева направо, а строки – сверху вниз. В нашем случае черные (B) ходили первыми и поместили камешек на пересечении колонок q и d, что записано как;B [qd]. Следующие символы;W [dc] говорят о том, что камень белых (W) оказался на пересечении d и c. Каждый последующий ход записан в подобном формате. Итог игры (RE) зафиксирован как RE [B+Resign], что означает капитуляцию черных.
Разработчики AphaGo собрали огромный массив данных из 30 млн SGF-файлов. Все эти архивы не искусственно симулированные матчи, а записи реальных игр, сыгранных реальными людьми (и иногда компьютерами). Так, играя в го на одном из множества сайтов, любители и профессионалы, по сути, добавляли опыт своей игры в массив. На самом деле не так уж и сложно создать видеоигру в го: в интернете можно найти достаточно инструкций и свободного исходного кода. Кроме того, все видеоигры могут сохранять данные партий. Правда, одни из них делают это, другие – нет. Некоторые хранят данные ваших партий и затем передают их разработчикам. Создатели сайтов для онлайн-игры в го публикуют онлайн архивы сыгранных партий в виде огромных пакетов. В результате все эти пакеты были объединены в массив из 30 млн игр, собранный командой AlphaGo.
Программистам понадобилось 30 млн игр, чтобы «натренировать» модель, которую они назвали AlphaGo. Кроме того, вы должны понять, что профессиональные игроки в го годами играют в компьютерное го. Так они тренируются. Вследствие этого 30 млн игр также включают в массив и игры лучших игроков мира. Миллионы часов человеческого труда были ценой тренировочных данных – хотя большинство историй об AlphaGo повествует о волшебных алгоритмах, а не о людях, которые годами незаметно для окружающих (и без вознаграждения) создавали тренировочный массив.
Разработчики программы AlphaGo использовали метод под названием поиск Монте-Карло для того, чтобы выбрать из 30 млн игр множество ходов, которые с наибольшей вероятностью ведут к победе. Затем они запрограммировали его использовать алгоритм, выбирающий следующий ход из множества. Кроме того, они также реализовали отдельный алгоритм, подсчитывающий вероятность победы для каждого конкретного хода из множества. Вычисления происходили в масштабах, едва вообразимых человеком. В го существует 10163 возможных позиций. Так, благодаря наложению нескольких вычислительных методов и выбору хода с наибольшей вероятностью победы разработчики создали программу, победившую лучших игроков в го.
Умна ли AlphaGo? Ее разработчики – определенно. Им удалось решить сложную математическую задачу, над которой десятилетиями бились десятки лучших умов. Одной из наиболее поразительных вещей в математике является то, что она учит видеть закономерности в окружающем мире. Большинство вещей функционирует согласно математическим правилам: кристаллы растут регулярным образом, цикады впадают в спячку под землей на годы и просыпаются лишь тогда, когда температура почвы достигает нужной отметки, и таких примеров множество. AlphaGo – это прорыв в математике, достижение, которое было бы невозможным без аппаратного и программного прогресса в вычислительной технике. Стоит признать достижение команды разработчиков.
Однако AlphaGo не является разумной машиной. У нее нет сознания. Она делает только одну вещь: играет в компьютерную игру. Она содержит данные 30 млн игр, сыгранных любителями и профессионалами го, поэтому в каком-то смысле AlphaGo в высшей степени глупа. Чтобы победить одного-единственного мастера, программе требуется грубая сила и плоды труда множества людей. Программа и заложенные в ней вычислительные методы пригодятся для более полезных задач, требующих массивной переработки чисел. И это действительно полезно для мира – но далеко не все в мире является вычислениями.