Представьте себе цель обучить компьютерную программу играть в платформер, например Super Mario, самостоятельно. Этой программе будет позволено видеть экран, блоки, гумбы — так же, как это может сделать игрок-человек. И он может вводить команды — бегать, прыгать и тому подобное — как будто у него в руках контроллер.

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

Это не кажется возможным

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

Рассмотрим снова уровень Super Mario. Любое конкретное игровое действие — будь то прыжок с головы Гумбы или перепрыгивание через дыру в земле — можно описать всего несколькими числовыми значениями. Где был Марио, когда игрок нажал «прыжок»? Как быстро бежал Марио в то время? Какой высоты была труба, которую Марио нужно было очистить?

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

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

Обезьяны у пишущих машинок

Любой конкретный уровень Super Mario может состоять из сотен действий игрока от начала до конца. Каждое из этих действий будет состоять из нескольких показателей (например, направление, скорость и местоположение на экране). Это много данных. Чтобы проиллюстрировать принцип машинного обучения, давайте предположим уровень, который можно пройти всего за шестнадцать ходов.

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

На реальном уровне, требующем сотни ходов, слепой шанс становится громоздким.

Вот где биология берет верх

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

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

Но как программа решает, какие действия предпринять в первую очередь? Это совершенно случайно. Что ж — абсолютный первый прогон есть. Но успешные прогоны лишь незначительно изменяют одно или два действия. Это та же картина, которая наблюдается при случайных мутациях в генетических данных. Жизнь «открывает» более выгодные черты выживания. И с помощью незначительных, случайных изменений в успешных прогонах уровня программа может подправить их здесь и там, чтобы найти новый прогон, который будет еще более успешным.

Повторяйте для нескольких тысяч поколений.

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

Но действительно ли это эволюция?

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

1. Биологическая эволюция ненаблюдательна

В машинном обучении агент отслеживает и активно участвует в выборе оптимальных результатов. Дарвинизм, с другой стороны, прекрасно действует независимо от какого-либо управления.

2. Биологическая эволюция не сходится к концу

Насколько мы знаем. Лошади и зебры становятся все более разными, ребята.

3. Биологическая эволюция (как правило) не является односторонней

В приведенном выше примере со временем меняются только действия игрока. Все остальное остается прежним. Чтобы лучше имитировать эволюцию in vivo , можно было бы ввести хищника (т. е. позволить уровню адаптироваться к растущей компетентности игрока за счет увеличения сложности). Естественно — несколько мастеров уже натравили одно машинное обучение на другое.

Это просто царапает поверхность

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