Обучение с подкреплением (RL) — это очень увлекательный путь (для тех, у кого хватит смелости и выдержки пройти его) в области машинного обучения. Тысячи часов были потрачены на исследования, и в Интернете существует множество статей.
В этой статье не упоминаются основы, но они основаны на них. Если вы новичок в RL, я настоятельно рекомендую вам ознакомиться с различными источниками, включая мою любимую книгуРичарда С. Саттона и Эндрю Дж. Барто бесплатно здесь. Большинство текстов и алгоритмов, которые я буду писать, взяты из книги.
Обучение TD представляет собой комбинацию идей Монте-Карло и идей динамического программирования (DP).
Прогноз TD(0) с использованием библиотеки OpenAI-gym
В отличие от проблем итерации ценности и политики, где требуется модель среды, TD (и методы Монте-Карло) используют опыт для решения проблемы прогнозирования. Это означает, что модель среды не требуется для оценки функции ценности (v_pi) для данной политики (pi)для нетерминальных состояний в этом опыте.
Мы используем библиотеку OpenAI-gym для создания нашей среды. Вы можете нажать на ссылку, чтобы узнать больше о библиотеке. Для этой демонстрации мы будем использовать FrozenLake-v0.
Я упомянул модель среды, что это такое и как она выглядит?
Чтобы ответить на первый вопрос, модель — это «реплика» реальной среды, которую агент использует для изучения динамики реальной среды. В нем есть все или большинство состояний, действий, вероятностей и вознаграждений.
Во второй части давайте используем код, чтобы проверить, как выглядит модель:
# library imports import gym, numpy as np # gym environment env=gym.make("FrozenLake-v0") # environment model env.env.P {0: {0: [(0.3333333333333333, 0, 0.0, False), (0.3333333333333333, 0, 0.0, False), (0.3333333333333333, 4, 0.0, False)], 1: [(0.3333333333333333, 0, 0.0, False), (0.3333333333333333, 4, 0.0, False), (0.3333333333333333, 1, 0.0, False)], 2: [(0.3333333333333333, 4, 0.0, False), (0.3333333333333333, 1, 0.0, False), (0.3333333333333333, 0, 0.0, False)], 3: [(0.3333333333333333, 1, 0.0, False), (0.3333333333333333, 0, 0.0, False), (0.3333333333333333, 0, 0.0, False)]}, 1: {0: [(0.3333333333333333, 1, 0.0, False), (0.3333333333333333, 0, 0.0, False), (0.3333333333333333, 5, 0.0, True)], 1: [(0.3333333333333333, 0, 0.0, False), (0.3333333333333333, 5, 0.0, True), (0.3333333333333333, 2, 0.0, False)], 2: [(0.3333333333333333, 5, 0.0, True), (0.3333333333333333, 2, 0.0, False), (0.3333333333333333, 1, 0.0, False)], 3: [(0.3333333333333333, 2, 0.0, False), (0.3333333333333333, 1, 0.0, False), (0.3333333333333333, 0, 0.0, False)]},
Вывод состоит из вложенного словаря/карты состояний и действий. Каждое состояние [0,15] имеет 4 действия [0,3]. Каждое действие имеет 3 кортежа, которые представляют последующие состояния. Поскольку эта среда является динамической, ваш агент случайно окажется в одном из состояний с вероятностью 0,3333333. Вы можете поиграть с ним, чтобы проверить остальные состояния :), мы не будем использовать его для обучения TD.
Методы TD обновляют значения своего состояния на следующем временном шаге, в отличие от методов Монте-Карло, которые должны ждать до конца эпизода, чтобы обновить значения. . В момент времени t + 1 TD формирует цель и вносит полезное обновление, используя наблюдаемое вознаграждение и оценку значения в следующем состоянии. . Формула обновления:
где альфа — параметр шага [0,1].
TD(0) в процедурной форме показан в поле ниже:
Одна из ключевых частей информации заключается в том, что TD(0) основывает свое обновление на основе существующей оценки, также известной как самозагрузка. Он выбирает ожидаемые значения и использует текущее оценочное значение(V) вместо истинного значения (v_pi). .
«Образцы обновлений методов TD и Монте-Карло отличаются от ожидаемых обновлений методов DP тем, что они основаны на едином образце-преемнике, а не на полном распределении всех возможных преемников».
Полное распределение выглядит следующим образом: [(0.3333333333333333, 0, 0.0, False),
(0.33333333333333333, 4, 0.0, False), (0.33333333333333333, 1, 0.0, False)] в то время как одна выборка выглядит так: [(0.3333333333333333, 0, 0.0, False)] то есть только один элемент из списка.
Алгоритм
Наконец, мы можем посмотреть на очень короткий код, использующий среду.
def TD_0(policy): #input policy=policy to be evaluated V = np.zeros(env.env.nS) for i in range(100): #initialize S S = env.reset() v=0 #loop for each step of episode for t in range(1000): # demo purposes always take random action A = int(np.random.rand()*len(policy[S])) # take action A observe outcome obs, reward, done, info = env.step(A) # sample expected values using Belman Optimality Update rule v += policy[S][A] * info['prob'] * (reward + 0.9 * V[obs]) # use the current estimate instead of true value V[S] = v # check if episode is over if done: break # update value for none terminal states else: V[S] += V[S] + 0.001 * (reward + 0.9 * V[obs] - V[S]) # update the state S = obs return V
Обратите внимание, что в этом примере мы всегда выполняем случайное действие. Версия на основе класса скоро будет загружена на мой github, которая выбирает действие на основе политик выбора действий, например e-greedy или softmax.
Пример вывода показан ниже, он будет откладываться от запуска к запуску: состояния терминала представлены нулями
Вывод
Методы TD имеют преимущество перед методами DP в том, что они не требуют
модели среды, ее вознаграждения и распределения вероятностей следующего состояния.
Они, естественно, реализованы онлайн, полностью поэтапно.
Оставайтесь с нами для получения дополнительных обновлений и алгоритмов, основанных на этой теме обучения с подкреплением.
Большое спасибо за ваше время. Удачного кодирования :)
об авторе
Джеймс имеет более чем 15-летний опыт работы в области информационных технологий — разработка программного обеспечения, наука о данных и веб-разработка, а также обширный опыт и способность внедрять стратегические инновации в области роста бизнеса, лидерства и организационной эффективности.
Джеймс также имеет лицензию на управление полетами и диспетчерскую службу с более чем 7-летним опытом работы в авиации. В своей роли он постоянно обеспечивает соблюдение стандартов безопасности, надежности, эффективности и чрезвычайных ситуаций. Он также принимает участие в контроле и координации ежедневных операций флота авиакомпании по всей сети маршрутов — международных, региональных и внутренних.