Глубокое обучение за последние годы достигло многих вех — сверточные нейронные сети превзошли человеческие возможности в таких задачах, как обнаружение объектов и классификация изображений. Трансформеры обеспечивают потрясающие результаты в задачах на естественном языке. Хотя это выдающиеся достижения, эти методы страдают тем, что требуют большого количества размеченных обучающих наборов данных, которые часто трудно получить. Кроме того, люди не учатся таким образом.

Обучение с подкреплением — это парадигма обучения, в которой агент ИИ учится на собственном опыте. Он взаимодействует с окружающей средой и получает от нее вознаграждение в виде обратной связи. Для обучения агента RL не требуется помеченный набор данных. Лидеры мнений в области ИИ воспринимают обучение с подкреплением как ключ к Общему искусственному интеллекту. В недавней статье DeepMind, дочерней компании Alphabet (Google), озаглавленной Награды достаточно, выдвигается гипотеза о том, что интеллект и способности, которые мы получаем от него, такие как восприятие, социальный интеллект, обобщение — можно понимать как максимизацию вознаграждения. Эта статья познакомит читателя с парадигмой обучения с подкреплением и покажет, как ее можно использовать для обучения агента RL посадке космического корабля.

Парадигма обучения с подкреплением

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

  • Метод проб и ошибок. Каждый агент (ребенок, птица или агент RL) делает много неудачных попыток, извлекая уроки из каждой неудачи.
  • Цель: у агента есть конкретная цель (стоять, летать или приземляться на космическом корабле).
  • Взаимодействие с окружающей средой: нет ни руководства, ни учителя, ни обучающего образца, на котором можно учиться. Единственная обратная связь – это обратная связь от ближайшего окружения. Обратная связь выражается в некотором вознаграждении или наказании.

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

Если я скажу то же самое на языке RL, то есть среда, состоящая из вас, собаки, мяча и земли. Агент — собака. Цель – забрать мяч. И вознаграждайте угощение, которое вы даете, когда оно приносит вам мяч. Конечная цель агента, собаки, состоит в том, чтобы найти политику $\pi$, которая максимизирует его вознаграждение:

Чтобы написать программы, которые могут обучаться с помощью обучения с подкреплением, нам нужно дать некоторое математическое представление всему этому. Мы делаем это, определяя три термина: состояния, действия и вознаграждения. Состояния, S, — это набор всех возможных состояний, s, которые могут существовать в нашей вселенной. Действия, A, представляют собой набор всех возможных действий, которые агенты могут выполнять на определенном временном шаге. А вознаграждение, R, — это обратная связь, которую он получает от окружающей среды.

Кроме того, у нас должна быть функция, которая может показывать изменение состояния s после того, как агент выполнил действие a. Обычно ее называют переходной функцией. Если вы создаете свою собственную среду, вы будете нести ответственность за определение их всех. Однако для облегчения обучения существует несколько фреймворков/библиотек с открытым исходным кодом, которые предоставляют готовые среды. Мы будем использовать библиотеку OpenAI GYM. Так что будьте готовы запустить космический корабль.

Лунный посадочный модуль

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

  • x: координата космического корабля.
  • y: координата космического корабля.
  • $v_x$: горизонтальная скорость космического корабля.
  • $v_y$: вертикальная скорость космического корабля.
  • $\theta$: ориентация в пространстве
  • $v_{\theta}$: угловая скорость космического корабля.
  • Логическое значение со значением True, если левая нога космического корабля касается земли.
  • * Логическое значение со значением True, если правая нога космического корабля касается земли.

Как вы догадались, верхние шесть являются непрерывными переменными, пространство действий, однако, дискретно — возможных действий четыре:

  • Ничего не делать
  • Огонь двигатель левой ориентации
  • Двигатель правой ориентации огня
  • Пожарный главный двигатель.

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

Случайный агент летит на космическом корабле

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

Для данной задачи мы будем использовать три метода, доступные в модуле Gym:

  • make: создает экземпляр указанной среды LunarLander-v2.
  • reset: сбрасывает среду до исходного состояния.
  • шаг: эта функция выполняет указанное действие в среде.

В приведенном ниже коде агент выбирает случайное действие с помощью метода sample. ОНО делает это неоднократно, пока задача не будет выполнена, то есть космический корабль не коснется земли:

import gym
env = gym.make('LunarLander-v2')
r = 0.0
obs = env.reset()
while True:
obs, rewards, dones, info = env.step(env.action_space.sample())
r += rewards
if dones:
break
print(r)

Независимо от того, сколько раз я пытался, агент получал отрицательное значение вознаграждения. Вы также можете попробовать запустить код; для запуска требуется всего несколько секунд. Вот ссылка на Jupyter Notebook того же самого, вы можете открыть его в Colab и запустить напрямую. В записной книжке также есть код для визуализации, выполнение которого занимает немного больше времени.

Помните, отрицательное вознаграждение эквивалентно наказанию

Сетевой агент Deep Q

Теперь, когда случайному агенту удается посадить космический корабль, это не оптимальное использование топлива, и при посадке могут быть резкие неровности. Что мы можем сделать? Мы можем обучить агента, который путем множества проб и ошибок узнает, что в данной ситуации лучше всего действовать.

Это очень похоже на создание шпаргалки — на самом деле базовый алгоритм называется Q-таблицей, где агент поддерживает таблицу, состоящую из значений Q для всех возможных пар состояние-действие. Q-функция (также называемая функцией значения действия состояния) политики $\pi$, $Q^{\pi}(s, a)$, измеряет ожидаемый доход или дисконтированную сумму вознаграждений, полученных от состояния $s. $, предприняв сначала действие $a$, а затем следуя политике $\pi$. Оптимальная Q-функция $Q^*(s, a)$ определяется как максимальный доход, который можно получить, начиная с наблюдения $s$, предпринимая действия $a$ и следуя оптимальной политике после этого. Записи таблицы обновляются по мере обучения агента с помощью выражения (уравнение Беллмана):

Теперь ведение таблицы невозможно, когда увеличивается пространство состояний и пространство действий. В 2015 году Google DeepMind предложил алгоритм — DQN-Deep Q Network, — в котором они использовали глубокую нейронную сеть для оценки значения Q при заданном состоянии. Для этого они минимизировали следующие потери на каждом временном шаге $i$:

где

Здесь $y_i$ называется целью временной разности (TD), а $y_i — Q$ называется ошибкой TD. $\rho$ представляет распределение поведения, распределение по переходам $\{s, a, r, s’\}$, собранное из среды.

Давайте обучим агента DQN, доступного в stable-baselines, посадке космического корабля. Мы будем использовать простую многоуровневую модель персептрона (MlpPolicy) в качестве Q-агента. Использовать библиотеку stable-baselines относительно просто; всего двумя строками вы можете обучить агента RL:

model = DQN(MlpPolicy, env, verbose=1, prioritized_replay=True,
tensorboard_log="./DQN_LunarLander_tensorboard/")
model.learn(total_timesteps=150000)

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

Заключительные слова об обучении с подкреплением

Это необыкновенно — не говоря уже о том, как ему удалось научиться только на собственном опыте. С победой AlphaGo над Ли Седолем алгоритмы RL закрепили свой успех на арене игр. Но это еще не все, определяя среду и правильную форму функции вознаграждения, можно обучить агента RL многим другим задачам — принятию бизнес-решений, прогнозированию цены акций и многому другому.

Если вы заинтересованы в создании собственных агентов RL с нуля и разработке собственной среды Gym, посмотрите 4-часовой тренинг в прямом эфире, который я провожу 20 июля. Вы также можете познакомиться с тонкостями TensorFlow, которые мы будем использовать для создания агентов RL и основ моделей глубокого обучения, из моей книги Глубокое обучение с TensorFlow 2 и Keras.

P.S. На данный момент Stable-baselines не поддерживает TensorFlow 2, поэтому вы увидите в блокноте некоторые предупреждения об устаревании, игнорируйте их.

Об авторе/Ai+ Speaker on Reinforcement Learning:

Амита Капур — автор бестселлеров в области искусственного интеллекта и глубокого обучения. Она наставляет студентов на различных онлайн-платформах, таких как Udacity и Coursera, и является научным и техническим консультантом таких организаций, как DeepSight AI Labs и MarkTechPost. Она начала свою академическую карьеру на кафедре электроники SRCASW Университета Дели, где она является доцентом. У нее более 20 лет опыта активных исследований и преподавания нейронных сетей и искусственного интеллекта на университетском уровне.