Прокатитесь в MountainCar спортзала OpenAI Gym, чтобы изучить теорию RL.

Авторы Ханна Петерсон и Джордж Уильямс ([email protected])

Вы можете вспомнить из предыдущего поста в этой серии об обучении с подкреплением (RL), что Марковский процесс принятия решений (MDP) - это математическая основа для моделирования задач RL. Чтобы обосновать математическую теорию MDP на практике, мы определили каждый из ее элементов в контексте игры MountainCar OpenAI Gym. Теперь, когда мы понимаем их по отдельности, давайте рассмотрим, как они объединяются в уравнения, продолжая ссылаться на MountainCar, когда это применимо. Область RL состоит из использования различных алгоритмов для приближения оптимальных решений уравнений, которые мы здесь выводим.

Заявление об ограничении ответственности: вся математика, используемая в MDP, может легко оказаться непосильной, поэтому я не буду вдаваться в пошаговые инструкции для каждого уравнения. Кроме того, нет одного правильного способа написать эти уравнения - они имеют несколько представлений, использующих самые разные понятия, из которых я выбрал те, которые я нашел наиболее интуитивно понятными. Если вас интересуют объяснения более низкого уровня, я предлагаю взглянуть на ресурсы, на которые я ссылаюсь, в разделе «Ссылки»

Основы OpenAI Gym

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

Команда env = gym.make("MountainCar-v0") создает экземпляр игровой среды MountainCar. Напомним, что в этой игре состояние (то есть снимок окружающей среды) определяется горизонтальным положением и скоростью автомобиля, которые теоретически могут быть бесконечными. Вот почему, когда мы обращаемся к атрибуту observation_space среды (то есть ко всем ее возможным состояниям), мы обнаруживаем, что он представлен в виде двухмерного блока. Напротив, мы видим, что его action_space состоит из 3 дискретных значений, соответствующих 3 действиям, доступным автомобильному агенту в данном состоянии: ускоряться влево, не ускоряться или ускоряться вправо, закодированные как действия 0, 1 и 2 соответственно. Действия предпринимаются для перехода между состояниями, создавая серию состояний, известных в RL как эпизод или траектория.

Чтобы начать эпизод, мы вызываем функцию reset() игры, которая возвращает вектор со случайно сгенерированной позицией и скоростью 0, представляющий начальное состояние эпизода. Вызов env.action_space.sample() генерирует случайное действие (0, 1 или 2) из ​​области действий. Мы предпринимаем действие, вводя его в функцию step(), которая возвращает массив [state, reward, done, info]. Здесь state, reward и done соответствуют новому текущему состоянию, полученному вознаграждению и логическому значению того, достиг ли агент своей цели в результате выполнения действия (info не имеет значения в этой игре - это просто пустой толковый словарь). Мы можем видеть, что выполнение случайного действия приводит к новому состоянию с немного другим положением и ненулевой скоростью по сравнению с начальным состоянием.

Ознакомившись с основами OpenAI Gym, мы можем теперь задать очень важный вопрос: Как наша машина определяет, какие действия предпринимать? Выше мы использовали функцию случайного env.action_space.sample(), которая выбирает из равномерное распределение по всем действиям - то есть каждое из трех наших действий имеет вероятность быть выбранным с вероятностью 0,33. При таком наивном подходе к принятию решений мы можем представить себе, какое чрезвычайно большое количество испытаний потребуется автомобилю, чтобы добраться до флага на вершине холма. Теперь мы рассмотрим математику, используемую для обучения нашего агента более разумному способу выбора между действиями.

Решение, какие действия предпринять

Функция политики

Естественный подход к этой проблеме - думать, что флаг находится справа от машины, поэтому машина должна просто разогнаться вправо, чтобы добраться до него; однако игра построена таким образом, что автомобиль не может преодолеть силу тяжести, только ускоряясь вправо - скорее, он должен наращивать свой импульс, перемещаясь влево и вправо между двумя склонами, чередуя свое ускорение. Чтобы определить, когда переключаться между этими действиями, тележка должна учитывать ее текущее положение и скорость, то есть ее состояние. В RL функция, которая определяет, какое действие a должно быть выполнено в конкретном состоянии s, называется политикой, π :

Эта функция представляет собой распределение, принимающее состояние в качестве входных данных и выводящее вероятность для каждого возможного действия, которая выбирается во время игрового процесса, чтобы определить, какое действие следует предпринять. Как мы обсуждали выше, политика для env.action_space.sample() - это равномерное распределение по всем 3 действиям, не учитывающее состояние ввода s. Давайте посмотрим, как может выглядеть оптимальная политика MountainCar, которая учитывает состояние, учитывая, что это значительно упрощенный пример:

В идеале такая политика должна со 100% уверенностью знать, какое действие лучше всего предпринять в любом состоянии, то есть она должна выдавать вероятность 1 для этого действия и 0 для двух других. Напомним, что начальная позиция тележки выбирается случайным образом для каждого эпизода, поэтому не существует единого оптимального маршрута для изучения политики. Кроме того, мы видим, что агент обращается к политике в каждом состоянии, чтобы определить, какое действие следует предпринять; То есть это не значит, что политика просто принимает начальное состояние эпизода и выводит оптимальную серию действий, которую агент должен выполнить до конца, - скорее, она выводит одно действие для каждого состояния. Это связано с тем, что, хотя заранее спланированный подход потенциально может работать для простой игры, такой как MountainCar, MDP также используются для моделирования динамической среды, в которой агенту необходимо принимать решения на основе реальных своевременная информация о его состоянии.

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

  1. Эта награда - показатель интереса
  2. Что мы должны полагаться на ожидание

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

Определение ожидаемого вознаграждения

Включение слова ожидать в основную цель RL означает, что:

  1. У агента есть некоторое представление о будущем
  2. Будущее связано с неопределенностью

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

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

Функция состояния-значения

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

Здесь первый член в операторе ожидания - это немедленное вознаграждение, которое агент ожидает получить, находясь в s, а остальные члены - это вознаграждения за последовательные состояния, которые мы видим взвешиваются по γ. γ - это константа от 0 до 1, называемая коэффициентом дисконтирования, потому что она возводится в степень, чтобы взвешивать будущие ожидаемые вознаграждения в меньшей степени в сумма общих ожидаемых вознаграждений, приписываемых s, с учетом неопределенности будущего таким образом. Чем ближе γ к 1, тем большее вознаграждение в будущем учитывается при приписывании ценности текущему состоянию и наоборот. Мы можем сгруппировать дисконтированные термины вместе, получив следующее представление функции состояния-ценности :

Кроме того, именно функция политики π определяет траекторию состояний, которые принимает агент, поэтому π можно рассматривать как еще один параметр функции:

Это то, что известно как уравнение Беллмана для функции значения состояния. Уравнение Беллмана - это тип уравнения оптимизации, который определяет, что «значение» проблемы решения в данный момент времени зависит от значения, полученного в результате первоначального выбора, и значения результирующего выбора, и, следовательно, является рекурсивным по своей природе. .

Функция действия-значения

Теперь, когда у нас есть средство сопоставления значения с заданным состоянием, мы можем использовать тот факт, что действие - это переход между состояниями, чтобы сопоставить значения с парами состояние-действие также. Используя такое сопоставление, агент в любом состоянии будет иметь способ оценить ценность выполнения каждого доступного ему действия, чтобы он мог выбрать то, которое с наибольшей вероятностью внесет вклад в максимальное общее вознаграждение. Это достигается с помощью функции значения действия, которая принимает состояние s и действие a и выводит ожидаемое вознаграждение (скалярное значение). для получения a от s и следования политике π для последующих действий:

Вы можете заметить, что это также уравнение Беллмана, и оно очень похоже на функцию состояния-значения. Как связаны эти два уравнения? Значение состояния s можно определить, взяв сумму значений действия для всех действий, где каждый член значения действия взвешен по вероятности выполнения соответствующего действия a из s, что, как известно, определяется политикой. Таким образом, функцию значения состояния можно переписать как:

В MountainCar, например, предположим, что автомобиль следует некоторой политике π, которая выводит вероятности 0,3, 0,1 и 0,6, а его функция значения действия выдает значения 1,2, 0,4 и 2,8 для трех действий с учетом его текущего состояния s. Тогда значение s равно 0,3 (1,2) + 0,1 (0,4) + 0,6 (2,8) = 2,08.

Мы также можем определить функцию ценности действия в терминах функции ценности состояния. При вычислении значения действия для состояния s и некоторого действия a необходимо учитывать стохастический характер среды, то есть даже если агент решит выполнить a, случайное взаимодействие с окружающей средой может вызвать другое действие. Из первого блога вы можете вспомнить, что эта случайность кодируется в MDP как матрица P, где запись P_ss ' - это вероятность попасть в состояние s ', выбрав получение a из s. Мы можем визуализировать это на примере в MountainCar. В этом случае предположим, что политика принимает состояние s и выводит вероятности 0,8, 0,06 и 0,14 для действий 0, 1 и 2 соответственно. Агент извлекает из этого распределения и выбирает действие 0 (ускорение влево), как и ожидалось, учитывая, что оно имеет наибольшую вероятность. Несмотря на этот выбор, вероятность P_ss ’ того, что агент действительно выполнит это действие, меньше достоверной и равна, например, 0,9, а оставшаяся вероятность распределяется между двумя другими действиями:

Эта неопределенность в выполнении действий означает, что для расчета ожидаемого вознаграждения (т. Е. Ценности действия) за выполнение любого действия a в состоянии s, немедленное ожидаемое вознаграждение для a и s должны быть добавлены к дисконтированной сумме ожидаемых вознаграждений (т. е. значений состояния) всех возможных состояний-преемников, взвешенных по их вероятностям наступления:

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

Проблема оптимизации

Функция «действие-значение» дает нам способ определения значения любого действия a из любого состояния s на траектории, определяемой политикой π - тем выше результат действия. -значение, тем лучше действие для накопления высокой награды в ходе траектории. Таким образом, оптимальная политика будет знать, какие действия приводят к наивысшим значениям действий со 100% уверенностью, и, как мы обсуждали ранее с первым примером MountainCar, выдает вероятность 1 для этих действий и 0 для остальных:

Таким образом, мы приходим к уравнению оптимальности Беллмана для функции действие-ценность:

Это то, что обучение с подкреплением призвано решить с помощью самых разных подходов. В следующем блоге этой серии мы рассмотрим теорию, лежащую в основе одного популярного подхода под названием «Q-Learning», чтобы получить оценку этой оптимальной функции «действие-ценность» с помощью MountainCar.

использованная литература