Шрифт:
Интервал:
Закладка:
Рассмотрим однопользовательскую игру Breakout, показанную на рис. 27. В ней игрок с помощью джойстика передвигает “ракетку” (белый прямоугольник в правом нижнем углу) из стороны в сторону. “Мяч” (белый кружок) отскакивает от ракетки и ударяется о разноцветные прямоугольные “кирпичи”. Мяч также отскакивает от серых “стен” по бокам. Когда мяч попадает по одному из кирпичей (узорчатые прямоугольники), кирпич исчезает, игрок получает очки, а мяч отскакивает назад. Кирпичи с верхних рядов приносят больше очков, чем с нижних. Когда мяч ударяется о “землю” (нижнюю часть экрана), игрок теряет одну из пяти “жизней”, но если у него еще остались “жизни”, то в игру вводится новый мяч. Цель игрока – набрать максимум очков за пять жизней.
Любопытно, что игра Breakout появилась, когда Atari попробовала создать однопользовательскую версию успешной игры Pong. Разработку и внедрение Breakout в 1975 году поручили двадцатиоднолетнему сотруднику по имени Стив Джобс. Да, тому самому Стиву Джобсу, который впоследствии стал одним из основателей Apple. Поскольку Джобсу не хватало навыков, он привлек к работе над Breakout своего друга Стива Возняка, которому тогда было двадцать пять (и который впоследствии стал вторым основателем Apple). Возняк и Джобс спроектировали Breakout за четыре ночи, садясь за работу вечером, когда у Возняка кончался рабочий день в компании Hewlett-Packard. Вскоре Breakout, как и Pong, завоевала огромную популярность у геймеров.
Если вы тоскуете по былым временам, но у вас не сохранилось старой игровой приставки Atari 2600, в интернете есть множество сайтов, где все еще можно сыграть в Breakout и другие игры. В 2013 году группа канадских исследователей ИИ выпустила программную платформу Arcade Learning Environment (“Среда обучения аркадным играм”), которая облегчила тестирование систем машинного обучения на 49 таких играх[185]. Именно эту платформу специалисты DeepMind использовали в своей работе по обучению с подкреплением.
Специалисты DeepMind совместили обучение с подкреплением – в частности, Q-обучение – с глубокими нейронными сетями, чтобы создать систему, которая сумеет научиться играть в видеоигры Atari. Они назвали свой подход глубоким Q-обучением. Я объясню принцип работы глубокого Q-обучения на примере Breakout, но в DeepMind использовали один и тот же метод для всех игр Atari, с которыми велась работа. Впереди нас ждет немало технических подробностей, так что готовьтесь (или переходите к следующему разделу).
Вспомните, как мы использовали Q-обучение для тренировки собаки-робота Рози. В ходе эпизода Q-обучения на каждой итерации обучающийся агент (Рози) делает следующее: определяет свое текущее состояние, сверяет это состояние с матрицей Q, выбирает действие на основе ценностей из матрицы, выполняет это действие, возможно, получает сигнал подкрепления и – обучаясь – обновляет ценности в своей матрице Q.
Глубокое Q-обучение DeepMind работает по тому же принципу, но место матрицы Q занимает сверточная нейронная сеть. По примеру DeepMind я назову ее глубокой Q-сетью (DQN). Показанная на рис. 28 DQN напоминает ту, что использовалась DeepMind для обучения игре Breakout (но при этом проще нее). Входным сигналом для DQN служит состояние системы в конкретный момент времени, которое здесь определяется текущим “кадром” – положением пикселей на текущем снимке экрана – и тремя предыдущими кадрами (положением пикселей на трех предыдущих шагах). Такое определение состояния обеспечивает систему небольшим объемом памяти, что оказывается здесь полезным. На выходе сеть выдает расчетную ценность каждого возможного действия во входном состоянии. Возможные действия таковы: передвинуть ракетку Влево, передвинуть ракетку Вправо или выполнить NOP (“холостую команду”, то есть не передвигать ракетку). Сама сверточная нейронная сеть практически не отличается от той, которую я описала в главе 4. Вместо ценностей в матрице Q, как в примере с Рози, в глубоком Q-обучении система узнает веса в этой сети.
Рис. 28. Схема глубокой Q-сети (DQN) для Breakout
Система DeepMind учится играть в Breakout в ходе множества эпизодов. Каждый эпизод соответствует одному сеансу игры, а каждая итерация в рамках эпизода – одному действию системы. В частности, на каждой итерации система вводит свое состояние в DQN и выбирает действие на основании выходных значений DQN. Система не всегда выбирает действие с наибольшей расчетной ценностью: как я упоминала выше, обучение с подкреплением требует баланса исследования-использования[186]. Система выполняет выбранное действие (например, передвигает ракетку на некоторое расстояние влево) и, возможно, получает вознаграждение, если мяч попадает в один из кирпичей. Затем система совершает обучающий шаг, то есть обновляет веса в DQN по методу обратного распространения ошибки.
Как происходит обновление весов? В этом заключается главное различие обучения с учителем и обучения с подкреплением. Как вы помните из предыдущих глав, метод обратного распространения ошибки подразумевает изменение весов нейронной сети с целью снижения погрешности ее выходных сигналов. При обучении с учителем погрешность оценивается непосредственно. Помните описанную в главе 4 гипотетическую сверточную нейронную сеть, которая училась классифицировать фотографии, распознавая на них кошек и собак? Если на входной обучающей фотографии была собака, но выходная уверенность в категории “собака” составляла всего 20 %, то погрешность такого выходного сигнала равнялась 100 % – 20 % = 80 %. Иными словами, при идеальном раскладе выходная уверенность должна была быть на 80 % выше. Сеть могла рассчитать погрешность, потому что сверялась с меткой, присвоенной человеком.
Но в обучении с подкреплением меток нет. Конкретному кадру игры не присвоена метка с действием, которое необходимо предпринять. Как же в таком случае оценить погрешность выходного сигнала?
Вот ответ. Как вы помните, если вы обучающийся агент, то ценность действия в текущем состоянии определяется на основании вашей оценки того, насколько велико вознаграждение, которое вы получите в конце эпизода, выбрав это действие (и продолжая выбирать высокоценные действия). Эта оценка должна становиться лучше по мере приближения к концу эпизода, когда вы сможете провести учет всех полученных вознаграждений! Главное понимать, что выходные сигналы сети на текущей итерации точнее, чем на предыдущей итерации. В таком случае обучение заключается в том, чтобы корректировать веса сети (используя метод обратного распространения ошибки) с целью минимизации различия между выходными сигналами на текущей и предыдущей итерации. Один из разработчиков этого метода Ричард Саттон говорит, что здесь “догадка уточняется на основе догадки”[187]. Я внесу небольшую поправку: “догадка уточняется на основе лучшей догадки”.