Краткое введение в обучение с подкреплением и основы тренажерного зала OpenAI. Добро пожаловать в практическое руководство для начинающих по RL для задач навигации и вождения.

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

Эта статья сначала познакомит вас с основами обучения с подкреплением, его текущими достижениями и несколько подробным практическим примером использования автономного вождения. После этого мы испачкаемся в коде и узнаем об OpenAI Gym, инструменте, который часто используют исследователи для стандартизации и тестирования результатов. Когда придет раздел кодирования, откройте свой терминал и приготовьтесь к практическим занятиям. Совет для экономии времени: вы можете сразу перейти к разделу «Концептуальное понимание», если вы хотите пропустить основы и хотите попробовать только тренажерный зал Open AI напрямую.

В чем разница?

В основном три категории обучения: контролируемое, неконтролируемое и подкрепление. Давайте посмотрим на основные различия между ними. При обучении с учителем мы пытаемся предсказать целевое значение или класс, в котором входным данным для обучения уже присвоены метки. В то время как при неконтролируемом обучении используются немаркированные данные для изучения шаблонов для создания кластеров или для обнаружения PCA / аномалий. Алгоритмы RL подобны процедурам оптимизации, чтобы найти лучшие методы для получения максимального вознаграждения, то есть дать выигрышную стратегию для достижения цели.

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

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

Обучение с подкреплением: введение

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

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

Агент и среда

Давайте сначала качественно определим концепцию агента и среды формально, прежде чем перейти к пониманию технических деталей RL. Окружающая среда - это совокупность агентов, которая изменяет состояние агента при выполнении над ним данного действия. Агент - это система, которая воспринимает окружающую среду с помощью датчиков и выполняет действия с исполнительными механизмами. В приведенных ниже ситуациях Гомер (слева) и Барт (справа) - наши агенты, а Мир - их среда. Они совершают в ней действия и улучшают свое состояние, получая в качестве награды счастье или удовлетворение.

Последние достижения и объем

Начиная с самой популярной серии игр со времен Deep Blue от IBM против Каспарова, который вызвал огромный ажиотаж в отношении ИИ. И нечеловеческая осведомленность об агенте глубокого обучения с подкреплением в серии соревнований AlpaGo против Ли Седола в го. Овладение игрой с большей конфигурацией доски, чем атомы во Вселенной, против мастера den 9 показывает мощь, которой обладают такие умные системы. Также заслуживают похвалы недавние прорывы в исследованиях RL и победы над World Pros с ботами Dota от OpenAI. Поскольку агенты обучаются работе в таких сложных и динамичных средах, освоение этих игр является примером проверки пределов возможностей ИИ-агентов для обработки очень сложных ситуаций, подобных иерархии. С точки зрения приложений, и без того сложные приложения, такие как беспилотные автомобили и умные дроны, работают в реальном мире.

Давайте разберемся с некоторыми основами обучения с подкреплением, а затем начнем с тренажерного зала OpenAI, чтобы создать собственного агента. После этого я порекомендую вам перейти к Deep RL и решать более сложные ситуации. Объем всех приложений RL выходит за рамки воображения и может применяться во многих областях, таких как прогнозирование временных рядов, здравоохранение, автоматизация цепочки поставок и так далее. Но здесь мы обсудим один из самых популярных вариантов использования автономных транспортных средств с автономным управлением и навигационные задачи в целом.

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

Концептуальное понимание

С RL в качестве каркаса агент действует с определенными действиями, которые изменяют состояние агента, каждое действие связано со значением вознаграждения. Он также использует политику для определения своего следующего действия, которое состоит из последовательности шагов, которые сопоставляют пары состояние-действие с вычисленными значениями вознаграждения. Качественно политику можно определить как способ поведения агента в данный момент времени. Теперь политики могут быть детерминированными и стохастическими, поиск оптимальной политики является ключом к решению данной задачи.

Кроме того, разные действия в разных состояниях будут иметь разные связанные значения вознаграждения. Как команда "Огонь" в игра Pocket Tanks не всегда может иметь одинаковую ценность награды, так как иногда лучше сохранить стратегически хорошую позицию. Чтобы решить эту сложную динамическую проблему с такими огромными комбинациями запланированным образом, нам нужна таблица Q-значений (или action-value), в которой хранится карта пар состояние-действие к наградам.

Теперь, определяя среду в контексте RL как функциональный компонент, он просто выполняет действие в заданном состоянии в качестве входных данных и возвращает новое состояние и значение вознаграждения, связанные с парой действие-состояние.

Тем не менее, что интересно, нейронные сети вступают в картину с их способностью с легкостью изучать вознаграждения пар состояние-действие, когда среда становится очень сложной для обработки с вычислительно ограничивающими итеративными алгоритмами, и это известно как Deep RL. Как играть в более ранние игры, такие как Mario, Atari, PAC-MAN и т. Д.

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

Практическое занятие: почему тренажерный зал OpenAI?

Исследование Nature 2016 года показало, что более 70 процентов исследователей пытались и не смогли воспроизвести эксперименты другого ученого, а более половины не смогли воспроизвести свои собственные эксперименты.

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

Откройте свой терминал и приготовьтесь к работе с CTRL + C и CTRL + V !! Но, конечно, я не рекомендую.

Давайте заниматься спортом вместе

Что такое тренажерный зал OpenAI? Эта библиотека Python предоставляет нам огромное количество тестовых сред для работы с алгоритмами нашего RL-агента с общими интерфейсами для написания общих алгоритмов и их тестирования. Приступим, просто введите pip install gym в терминале для простой установки, и вы получите классическую среду для работы с агентом. Скопируйте приведенный ниже код и запустите его, ваша среда загрузится. Вы можете ознакомиться с другими доступными средами, такими как Algorithmic, Atari, Box2D и Robotics, здесь и использовать второй из перечисленных ниже компонентов фрагмента кода для перечисления всех доступных сред.

# 1. It renders instances for 500 timesteps, performing random actions.
import gym
env = gym.make('Acrobot-v1')
env.reset()
for _ in range(500):
    env.render()
    env.step(env.action_space.sample())
# 2. To check all env available, uninstalled ones are also shown.
from gym import envs 
print(envs.registry.all())

Когда объект взаимодействует со средой с действием, функция step () возвращает observation, которое обычно представляет следующее состояние среды, reward вознаграждение за предыдущее действие, done, когда пришло время сбросить среду или достигнутую цель и info dict для отладки, его можно использовать для обучения, если он содержит исходные вероятности последнего состояния среды. Посмотрите, как это работает, из фрагмента кода ниже. Также обратите внимание на то, как observation типа Space отличается для разных сред.

import gym
env = gym.make('MountainCarContinuous-v0') # try for different environments
observation = env.reset()
for t in range(100):
        env.render()
        print observation
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        print observation, reward, done, info
        if done:
            print("Finished after {} timesteps".format(t+1))
            break
[Output For Mountain Car Cont Env:] 
[-0.56252328  0.00184034]
[-0.56081509  0.00170819] -0.00796802138459 False {}
[Output For CartPole Env:]
[ 0.1895078   0.55386028 -0.19064739 -1.03988221]
[ 0.20058501  0.36171167 -0.21144503 -0.81259279] 1.0 True {}
Finished after 52 timesteps

Что такое action_space в приведенном выше коде? action-space & observation-space описывает допустимый формат параметров действия и состояния для конкретной среды, с которой следует работать. Просто взгляните на возвращаемые значения.

import gym
env = gym.make('CartPole-v0')
print(env.action_space) #[Output: ] Discrete(2)
print(env.observation_space) # [Output: ] Box(4,)
env = gym.make('MountainCarContinuous-v0')
print(env.action_space) #[Output: ] Box(1,)
print(env.observation_space) #[Output: ] Box(2,)

Дискретный - это неотрицательные возможные значения, более 0 или 1 эквивалентны перемещению влево и вправо для балансировки CartPole. Коробка представляет собой n-мерный массив. Эти стандартные интерфейсы могут помочь в написании общих кодов для различных сред. Поскольку мы можем просто проверить границы env.observation_space.high/[low] и закодировать их в наш общий алгоритм.

Иллюстрация

Здесь мы используем Python3.x для выделенного примера кода алгоритма Q-Learning ниже.

sudo pip install 'gym[all]' 

Приступим к построению нашего алгоритма Q-таблицы, который попытается решить среду навигации FrozenLake. В этой среде цель состоит в том, чтобы достичь цели на замерзшем озере, в котором могут быть дыры. Вот как поверхность изображена в этой среде Toy-Text.

SFFF       (S: starting point, safe)
FHFH       (F: frozen surface, safe)
FFFH       (H: hole, fall to your doom)
HFFG       (G: goal, where the frisbee is located)

Q-таблица содержит отображение пар состояние-действие для вознаграждения. Итак, мы построим массив, который отображает различные состояния и действия для вознаграждения значений во время выполнения алгоритма. Его размер будет ясно | заявляет | x | действия |. Напишем это в коде для алгоритма Q-обучения.

import gym
import numpy as np 
# 1. Load Environment and Q-table structure
env = gym.make('FrozenLake8x8-v0')
Q = np.zeros([env.observation_space.n,env.action_space.n])
# env.observation.n, env.action_space.n gives number of states and action in env loaded
# 2. Parameters of Q-learning
eta = .628
gma = .9
epis = 5000
rev_list = [] # rewards per episode calculate
# 3. Q-learning Algorithm
for i in range(epis):
    # Reset environment
    s = env.reset()
    rAll = 0
    d = False
    j = 0
    #The Q-Table learning algorithm
    while j < 99:
        env.render()
        j+=1
        # Choose action from Q table
        a = np.argmax(Q[s,:] + np.random.randn(1,env.action_space.n)*(1./(i+1)))
        #Get new state & reward from environment
        s1,r,d,_ = env.step(a)
        #Update Q-Table with new knowledge
        Q[s,a] = Q[s,a] + eta*(r + gma*np.max(Q[s1,:]) - Q[s,a])
        rAll += r
        s = s1
        if d == True:
            break
    rev_list.append(rAll)
    env.render()
print("Reward Sum on all episodes " + str(sum(rev_list)/epis))
print("Final Values Q-Table")
print(Q)

Если вы заинтересованы в работе с другими средами, вы можете выбрать работу в соответствии со строками более чистого фрагмента кода, выделенными ниже.

# Reset environment
s = env.reset()
d = False
# The Q-Table learning algorithm
while d != True:
    env.render()
    # Choose action from Q table
    a = np.argmax(Q[s,:] + np.random.randn(1,env.action_space.n)*(1./(i+1)))
    #Get new state & reward from environment
    s1,r,d,_ = env.step(a)
    #Update Q-Table with new knowledge
    Q[s,a] = Q[s,a] + eta*(r + gma*np.max(Q[s1,:]) - Q[s,a])
    s = s1
# Code will stop at d == True, and render one state before it

Но помните, что даже с общим интерфейсом сложность кода будет разной для разных сред. В вышеупомянутой среде у нас была только простая среда с 64 состояниями и несколькими действиями, которые нужно было обрабатывать. Нам удалось очень легко сохранить их в двумерном массиве для отображения вознаграждений. Теперь давайте рассмотрим более сложные случаи среды, такие как Atari envs, и посмотрим, какой подход нужен.

env = gym.make("Breakout-v0")
env.action_space.n
Out[...]: 4
env.env.get_action_meanings()
Out[...]: ['NOOP', 'FIRE', 'RIGHT', 'LEFT']
env.observation_space
Out[...]: Box(210, 160, 3)

observation_space необходимо представить тензором 210x160x3, что делает нашу Q-таблицу еще более сложной. Кроме того, каждое действие многократно выполняется в течение k кадров, где k равномерно выбирается из {2,3,4}. С 33 600 пикселями в каналах RGB со значениями в диапазоне от 0 до 255 среда явно стала чрезмерно сложной. Здесь нельзя использовать простой подход Q-Learning. Глубокое обучение с его архитектурой CNN является решением этой проблемы и темой, на которой вы должны сосредоточиться после этой вводной статьи.

Заключение

Теперь, с помощью приведенного выше руководства, у вас есть базовые знания о тренажерном зале и все, что вам нужно для начала работы. Gym также совместим с TensorFlow и PyTorch, но я не использовал их здесь, чтобы не усложнять учебник. Опробовав тренажерный зал пакет, вы должны начать с stable-baselines3 для изучения хороших реализаций алгоритмов RL и сравнения ваших реализаций. Чтобы увидеть все инструменты OpenAI, загляните на их страницу github. RL - это постоянно расширяющаяся область применения приложений в огромном количестве областей, и она будет играть важную роль в будущих достижениях в области искусственного интеллекта. Надеюсь, вы продолжите свое путешествие в RL и спасибо за чтение!

Великолепная вилка

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

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


Кроме того, первая веха - это бесплатная практика для этого liveProject. Даже если вы не продвинетесь вперед с liveProject, я обещаю, что вы многое узнаете о задаче RL автономное вождение, просто практически следуя первому рубежу. Ваше здоровье!

Важное примечание: если вы находитесь здесь до 26 июля-2021 и заинтересованы в продолжении первого liveProject. Пожалуйста, используйте код lprana, и вы получите 45% скидку на проект. Престижность !!

  • Во-вторых, если вы специально хотите сосредоточить свое внимание и усилия на концепции глубокого Q-обучения RL. Пожалуйста, не стесняйтесь проверить также представленный ниже liveProject. И снова первая веха - бесплатно!


Чао сейчас! Если вы выберете первый проект, до встречи…