Обучение с подкреплением (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-летним опытом работы в авиации. В своей роли он постоянно обеспечивает соблюдение стандартов безопасности, надежности, эффективности и чрезвычайных ситуаций. Он также принимает участие в контроле и координации ежедневных операций флота авиакомпании по всей сети маршрутов — международных, региональных и внутренних.