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

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

Методы машинного обучения можно разделить на 3 категории.

  • Контролируемое обучение
  • Обучение без учителя
  • Обучение с подкреплением

Обучение с учителем. Обучение с учителем — это процесс обучения, в котором данные обучения имеют метки, например данные (x, y). Основная цель этого обучения состоит в том, что машина должна изучить функцию для отображения x, чтобы она могла предсказывать y.

Обучение без учителя. Обучение без учителя — это процесс обучения, при котором обучение будет происходить без каких-либо входных меток, т. е. данных (x). Цель здесь состоит в том, чтобы изучить базовую структуру, чтобы машина могла предсказать вывод, аналогичный вводу.

Обучение с подкреплением. Обучение с подкреплением — это процесс обучения, в котором данные предоставляются в виде пар "состояние-действие". Этот процесс направлен на максимизацию вознаграждения.

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

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

Терминология, используемая в RL:

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

Среда: мир, в котором агент работает или действует.

Действия. Действия — это инструкции, которые агенты отправляют в среду.

Пространство действий: список ограниченных действий, которые может выполнять агент.

Наблюдения. Среда отправляет наблюдения в ответ на действия агента.

Награда: агент возвращается из среды после каждого шага действия (успех/неудача). Его можно получить после каждого действия или после серии действий.

Общее вознаграждение: сумма всех вознаграждений.

Цель: цель состоит в том, чтобы получить максимальное вознаграждение.

Поток :

На каждом шагу:

1) Агент выполняет действие

2) Окружающая среда получает действие

3) Окружающая среда посылает наблюдение

4) Агент получает наблюдение

5) Окружающая среда посылает вознаграждение

6) Агент получает вознаграждение

И цикл повторяется…

История: последовательность наблюдений, действий, наград. т. е. все наблюдаемые переменные до этого момента

Состояние: сводка информации, используемая для принятия решения о дальнейших действиях.

Информационное состояние (состояние Маркова): информационное состояние содержит всю полезную информацию из истории.

Компоненты агента:

1)Политика: функция поведения агента.

Существует два типа политик: детерминированные и стохастические.

2)Функция ценности: прогноз будущих вознаграждений.

Используется для оценки качества/плохости состояния и, таким образом, выбора между действиями

3)Модель: представление агентами среды.

Он предсказывает, что среда будет делать дальше (P — следующее состояние и R — следующая немедленная награда).

Категории агентов RL:

1) На основе значения: содержит функцию значения.

2) На основе политики: содержит политику

3) Актер-критик: содержит как политику, так и функцию ценности.

4) Без модели: может быть функция политики и/или значения, но модель не будет присутствовать.

5) На основе модели: это может быть политика и/или функция ценности, но модель будет присутствовать.

Типы проблем в обучении с подкреплением

В первом случае среда изначально известна, а агент взаимодействует с ней и совершенствует свою политику. Принимая во внимание, что во втором (Планирование) модель среды известна, и агент работает с ее моделью без каких-либо внешних взаимодействий и совершенствует свою политику.

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

Прогнозирование и контроль:

Прогноз: оценка будущего с учетом политики

Контроль: оптимизируйте будущее, найдите лучшую политику

Применения RL:

1)Автономное вождение

2)Торговля ценными бумагами

3) Поиск архитектуры нейронной сети

4)Имитация обучения роботов

5)Игры

Ограничения:

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

2) Обучение может занять много времени и не всегда может быть стабильным

РЕАЛИЗАЦИЯ ПРОСТОЙ МОДЕЛИ RL

Теперь давайте реализуем самое простое — CartPole (Чтобы балансировать планку как можно дольше) — в RL с помощью OpenAI.

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

!pip install stable-baselines3[extra]

Во-вторых, импортируйте библиотеки. Импортируйте необходимые библиотеки, включая ОС и тренажерный зал (это позволит нам легко создавать среды и работать с ними — openAI Gym).

import os
import gym # allow to work with environments - open ai gym
from stable_baselines3 import PPO
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3.common.evaluation import evaluate_policy

Теперь загружая предустановленную среду, тренажерный зал OpenAI позволяет нам быстро создавать смоделированные среды.

environment_name  = 'CartPole-v0'
env = gym.make(environment_name)

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

rounds = 10
for rounds in range(1, rounds+1):
  state = env.reset()
  done = False
  score = 0

  while not done:
    env.render()
    action = env.action_space.sample()
    n_state , reward, done, info = env.step(action)
    score += reward
  print('Round:{} Score : {}'.format(rounds, score))
env.close()
Round:1 Score : 17.0
Round:2 Score : 19.0
Round:3 Score : 22.0
Round:4 Score : 15.0
Round:5 Score : 21.0
Round:6 Score : 14.0
Round:7 Score : 25.0
Round:8 Score : 18.0
Round:9 Score : 17.0
Round:10 Score : 21.0

Обучение модели:

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

env = gym.make(environment_name)
env = DummyVecEnv([lambda : env])
model = PPO('MlpPolicy', env, verbose =1, tensorboard_log = log_path)
model.learn(total_timesteps = 20000)

Показатели выходного обучения будут такими, как показано ниже:

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

Сохранить и перезагрузить:

Укажите путь к файлу журнала, и команда «model.save(PPO_PATH + «PPO_ModelCartpole»)» создаст заархивированный файл с именем PPO_ModelCartpole в расположении файла журнала. Загрузку из сохраненной модели можно выполнить, указав путь, имя файла и среду в команде загрузки.

model.save(PPO_PATH + "PPO_ModelCartpole")
del model
model = PPO.load(PPO_PATH + "PPO_ModelCartpole", env= env)

Оценка:

Стабильность модели будет видна на выходе (среднее вознаграждение и стандартное отклонение).

evaluate_policy(model, env, n_eval_episodes =10, render = True)

Тестирование:

Теперь протестируем модель.

episodes = 5
for episodes in range(1, episodes+1):
  obs = env.reset()
  done = False
  score = 0

  while not done:
    env.render()
    action, _ = model.predict(obs) #now we are using the model
    obs , reward, done, info = env.step(action)
    score += reward
  print('Episode:{} Score : {}'.format(episodes, score))
env.close()

Episode:1 Score : [200.]
Episode:2 Score : [200.]
Episode:3 Score : [200.]
Episode:4 Score : [200.]
Episode:5 Score : [200.]

теперь он балансирует этот шест намного лучше, чем предыдущий.

ВЫВОД:

Модель хорошо научилась в окружающей среде и имеет 200 баллов вознаграждения за тестирование. Сейчас она довольно хорошо балансирует на шесте. Так что можно сказать, что наша модель удалась!!

Ссылки:

[1] Ричард С. Саттон и Эндрю Г. Барто, Обучение с подкреплением: введение (2014, 2015)

[2] Stable BaseLine3, Stable-Baselines3 Docs — Надежные реализации обучения с подкреплением (2020), https://stable-baselines3.readthedocs.io/en/master/

[3] Николас Ренотт, Обучение с подкреплением за 3 часа | Полный курс по Python(2021), https://youtu.be/Mut_u40Sqz4

[4] Скаутен — собственная работа, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=15190940

Исходный код на Github:

https://github.com/AnjuPaul14/Reinforcement-Learning---First-Step