Word reinforcement что это в методике
Машинное обучение Azure подкреплением Learning в настоящее время является функцией предварительной версии. На данный момент ее поддерживают только платформы Ray и RLlib.
Из этой статьи вы узнаете, как обучить агент обучения с подкреплением (ОП) играть в видеоигру Pong. Для управления сложными аспектами распределенного ОП используется Машинное обучение Azure и библиотека Python с открытым кодом Ray RLlib.
В этой статье раскрываются следующие темы:
- Настройка эксперимента
- Определение головного и рабочих узлов
- Создание оценщика ОП
- Отправка эксперимента для запуска выполнения
- Просмотр результатов
В основе этой статьи лежит пример RLlib Pong, который можно найти в репозитории GitHub в записной книжке Машинного обучения Azure.
Предварительные требования
Запустите этот код в любой из указанных ниже сред. Чтобы ускорить процесс, рекомендуем использовать вычислительный экземпляр Машинного обучения Azure. Примеры записных книжек обучения с подкреплением можно быстро клонировать и запустить на вычислительном экземпляре Машинного обучения Azure.
Вычислительная операция Машинного обучения Azure
- Сведения о том, как клонировать примеры записных книжек, см. в учебнике по настройке среды и рабочей области.
- Вместо учебников клонируйте папку how-to-use-azureml.
Собственный сервер Jupyter Notebook
Обучение агента, играющего в Pong
Обучение с подкреплением (ОП) — это подход к машинному обучению, предполагающий обучение на практике. В то время как другие методы машинного обучения предполагают пассивную передачу входных данных и обнаружение в них структур, для ОП используются агенты обучения, обеспечивающие активное принятие решений и обучение на собственных результатах.
Агенты обучения учатся играть в Pong в моделируемой среде. Для каждого кадра игры они принимают решение о том, нужно ли переместить ракетку вверх или вниз или же оставить ее на месте. Для принятия решения они оценивают состояние игры (RGB-изображение экрана).
Чтобы сообщить агенту о принятии успешного решения, в ОП используется поощрения. В этом примере агент получает положительное подкрепление, когда он набирает баллы, и отрицательное подкрепление, когда баллы набирает соперник. После множества итераций агент обучения узнает, как выбрать действие на основе текущего состояния для оптимизации суммы ожидаемых поощрений в будущем. Обычно в ОП для выполнения этой оптимизации используются глубокие нейронные сети (DNN).
Обучение завершается, когда средняя оценка поощрений агента в эпохе обучения достигает 18. Это означает, что агент в среднем опережал своего соперника в матчах по крайней мере на 18 очков (максимум 21 очко).
Процесс итерации по моделированию и повторному обучению DNN требует значительных вычислительных ресурсов и больших объемов данных. Одним из способов повышения производительности заданий ОП является параллелизация, позволяющая нескольким агентам обучения действовать и обучаться одновременно. Однако управление распределенной средой ОП может оказаться сложной задачей.
Настройка среды
Для настройки локальной среды ОП сделайте следующее:
- Загрузите необходимые пакеты Python.
- Инициализируйте рабочую область.
- Создание эксперимента
- Укажите настроенную виртуальную сеть.
Импорт библиотек
Импортируйте необходимые пакеты Python для выполнения оставшейся части этого примера.
Инициализация рабочей области
Инициализируйте объект рабочей области из файла config.json , созданного при выполнении инструкций в разделе Предварительные требования. Если этот код выполняется в вычислительной операции Машинного обучения Azure, файл конфигурации уже создан.
Создание эксперимента по обучению с подкреплением
Создайте эксперимент, чтобы отслеживать выполнение обучения с подкреплением. В Машинном обучении Azure эксперименты — это логические коллекции связанных попыток, используемые для упорядочения журналов выполнения, прочих журналов, выходных данных и многого другого.
Задание виртуальной сети
Для заданий ОП, использующих несколько целевых объектов вычислений, необходимо указать виртуальную сеть с открытыми портами, которые позволят рабочим и головным узлам взаимодействовать друг с другом.
Виртуальная сеть может находиться в любой группе ресурсов, но она должна быть в том же регионе, что и рабочая область. Дополнительные сведения о настройке виртуальной сети см. в записной книжке настройки рабочей области в разделе предварительных требований. Здесь следует указать имя виртуальной сети в группе ресурсов.
Определение целевых вычислительных узлов (головного и рабочих)
В этом примере используются отдельные целевые объекты вычислений для головных и рабочих узлов. Эти параметры позволяют масштабировать вычислительные ресурсы в зависимости от рабочей нагрузки. Задайте количество узлов и размер каждого из них в зависимости от потребностей.
Целевой головной вычислительный узел
Для повышения производительности глубокого обучения можно использовать головной кластер, оснащенный GPU. Головной узел обучает нейронную сеть, которую агент использует для принятия решений. Головной узел также собирает точки данных с рабочих узлов для обучения нейронной сети.
Для вычислений головной узел использует одну виртуальную машину STANDARD_NC6 (ВМ). В нее входит 6 виртуальных ЦП, между которыми распределяется рабочая нагрузка.
Вы можете использовать низкоприоритетные виртуальные машины для выполнения части или всех рабочих нагрузок. Узнайте, как создать низкоприоритетную виртуальную машину.
Рабочий вычислительный кластер
В этом примере для целевого рабочего вычислительного узла используются четыре виртуальные машины STANDARD_D2_V2 . На каждом рабочем узле доступно 2 ЦП, что в совокупности составляет 8 доступных ЦП.
Для рабочих узлов GPU не требуется, так как они не выполняют глубокое обучение. Рабочие узлы выполняют моделирование игры и собирают данные.
Создание оценщика обучения с подкреплением
Используйте ReinforcementLearningEstimator для отправки задания обучения в Машинное обучение Azure.
Машинное обучение Azure использует классы оценщика для инкапсуляции сведений о конфигурации выполнения. Это позволяет указать, как настроить выполнение скрипта.
Определение конфигурации рабочего кластера
Объект WorkerConfiguration сообщает Машинному обучению Azure, как инициализировать рабочий кластер, на котором выполняется начальный скрипт.
Определение параметров скрипта
Начальный скрипт pong_rllib.py принимает список параметров, определяющих способ выполнения задания обучения. Передача этих параметров через оценщик в качестве слоя инкапсуляции упрощает изменение параметров скрипта и запуск конфигураций независимо друг от друга.
Задав правильное значение num_workers , можно добиться максимальной эффективности распараллеливания. Задайте число рабочих узлов равным количеству доступных ЦП. Для этого примера можно использовать следующие расчеты:
Головной узел — это Standard_NC6 с 6 виртуальными ЦП. Рабочий кластер — это 4 виртуальные машины Standard_D2_V2 с двумя ЦП на каждой, всего 8 ЦП. Однако из числа рабочих процессоров необходимо вычесть 1 ЦП, так как один из их нужно выделить для роли головного узла.
6 ЦП + 8 ЦП – 1 головной ЦП = 13 одновременных рабочих процессов. Машинное обучение Azure использует кластеры головного и рабочих узлов, чтобы различать вычислительные ресурсы. Однако Ray не различает головной и рабочие процессы, а все ЦП доступны как рабочие потоки.
Определение оценщика обучения с подкреплением
Для создания оценщика используйте список параметров и объект конфигурации рабочего узла.
Начальный скрипт
Начальный скрипт pong_rllib.py обучает нейронную сеть с помощью среды OpenAI Gym PongNoFrameSkip-v4 . OpenAI Gym — это стандартизованные интерфейсы для тестирования алгоритмов обучения с подкреплением в классической игре Atari.
В этом примере используется алгоритм обучения, известный как IMPALA (Importance Weighted Actor-Learner Architecture — архитектура "Субъект — учащийся" со взвешиванием по важности). IMPALA параллелизует каждый отдельный субъект обучения для масштабирования на множество вычислительных узлов без ущерба для скорости и стабильности.
Ray Tune выполняет оркестрацию задач рабочего процесса IMPALA.
Ведение журнала функции обратного вызова
Начальный скрипт использует служебную функцию, чтобы определить пользовательскую функцию обратного вызова RLlib для записи метрик в рабочую область Машинного обучение Azure. Сведения о том, как просмотреть эти метрики, см. в разделе Мониторинг и просмотр результатов.
Отправка запроса на выполнение
Команда run обрабатывает журнал выполнения для выполняющихся или завершенных заданий.
Ее выполнение может занять от 30 до 45 минут.
Мониторинг и просмотр результатов
Используйте мини-приложение Jupyter в Машинном обучении Azure, чтобы просматривать состояние выполнения в режиме реального времени. В мини-приложении показано две дочерние операции выполнения: одна для головного узла, а другая для рабочих узлов.
- Дождитесь загрузки мини-приложения.
- В списке операций выполнения выберите операцию для головного узла.
Выберите Click here to see the run in Azure Machine Learning studio (Щелкните здесь, чтобы просмотреть выполнение в студии Машинного обучения Azure), чтобы получить дополнительные сведения о выполнении в студии. Доступ к этим сведениям можно получить во время выполнения или после завершения операции.
На графике episode_reward_mean показано среднее количество очков, набранных в каждой эпохе обучения. Как можно видеть, сначала агент обучения играл плохо, проигрывая матчи без единого очка (значение reward_mean равно –21). За 100 итераций он научился побеждать компьютер-соперник, набирая в среднем 18 очков.
В журналах дочерней операции выполнения можно просмотреть результаты оценки, записанные в файле driver_log.txt. Возможно, потребуется подождать несколько минут, прежде чем эти метрики станут доступны на странице выполнения.
Теперь вы знаете, как настроить несколько вычислительных ресурсов, чтобы обучить агент ОП хорошо играть в Pong против управляемого компьютером соперника.
Дальнейшие действия
В этой статье вы узнали, как обучить агент обучения с подкреплением с помощью агента обучения IMPALA. Дополнительные примеры см. в репозитории GitHub в разделе обучения с подкреплением в Машинном обучении Azure .
В обучении с подкреплением существует агент (agent) взаимодействует с окружающей средой (environment), предпринимая действия (actions). Окружающая среда дает награду (reward) за эти действия, а агент продолжает их предпринимать.
Алгоритмы с частичным обучением пытаются найти стратегию, приписывающую состояниям (states) окружающей среды действия, одно из которых может выбрать агент в этих состояниях.
Среда обычно формулируется как марковский процесс принятия решений (МППР) с конечным множеством состояний, и в этом смысле алгоритмы обучения с подкреплением тесно связаны с динамическим программированием. Вероятности выигрышей и перехода состояний в МППР обычно являются величинами случайными, но стационарными в рамках задачи.
При обучении с подкреплением, в отличии от обучения с учителем, не предоставляются верные пары "входные данные-ответ", а принятие субоптимальнх решений (дающих локальный экстремум) не ограничивается явно. Обучение с подкреплением пытается найти компромисс между исследованием неизученных областей и применением имеющихся знаний (exploration vs exploitation). Баланс изучения-применения при обучении с подкреплением исследуется в задаче о многоруком бандите.
Формально простейшая модель обучения с подкреплением состоит из:
- множества состояний окружения (states) [math]S[/math] ;
- множества действий (actions) [math]A[/math] ;
- множества вещественнозначных скалярных "выигрышей" (rewards).
В произвольный момент времени [math]t[/math] агент характеризуется состоянием [math]s_t \in S[/math] и множеством возможных действий [math]A(s_t)[/math] . Выбирая действие [math]a \in A(s_t)[/math] , он переходит в состояние [math]s_[/math] и получает выигрыш [math]r_t[/math] . Основываясь на таком взаимодействии с окружающей средой, агент, обучающийся с подкреплением, должен выработать стратегию [math]\pi: S \to A[/math] , которая максимизирует величину [math]R=r_0 + r_1+\cdots+r_n[/math] в случае МППР, имеющего терминальное состояние, или величину:
[math]R=\sum_t \gamma^t r_t[/math] ,
для МППР без терминальных состояний (где [math]0 \leq \gamma \leq 1[/math] — дисконтирующий множитель для "предстоящего выигрыша").
Таким образом, обучение с подкреплением особенно хорошо подходит для решения задач, связанных с выбором между долгосрочной и краткосрочной выгодой.
[math]S[/math] — множество состояний среды
Игра агента со средой:
- инициализация стратегии [math]\pi_1(a | s)[/math] и состояния среды [math]s_1[/math] ;
- для всех [math]t = 1 \ldots T[/math] :
- агент выбирает действие [math]a_t ∼ \pi_t(a | s_t)[/math] ;
- среда генерирует награду [math]r_ ∼ p(r | a_t, s_t)[/math] и новое состояние [math]s_ ∼ p(s | a_t, s_t)[/math] ;
- агент корректирует стратегию [math]\pi_(a | s)[/math] .
Это марковский процесс принятия решений (МППР), если [math]P(s_ = s′, r_ = r | s_t, a_t, r_t, s_, a_, r_, .. ,s_1, a_1) = P(s_ = s′,r_ = r | s_t, a_t)[/math] ,
МППР называется финитным, если [math]|A| \lt \infty[/math] , [math]|S| \lt \infty[/math]
Теперь, когда была определена функция выигрыша, нужно определить алгоритм, который будет использоваться для нахождения стратегии, обеспечивающей наилучший результат.
Наивный подход к решению этой задачи подразумевает следующие шаги:
- опробовать все возможные стратегии;
- выбрать стратегию с наибольшим ожидаемым выигрышем.
Первая проблема такого подхода заключается в том, что количество доступных стратегий может быть очень велико или бесконечно. Вторая проблема возникает, если выигрыши стохастические — чтобы точно оценить выигрыш от каждой стратегии потребуется многократно применить каждую из них. Этих проблем можно избежать, если допустить некоторую структуризацию и, возможно, позволить результатам, полученным от пробы одной стратегии, влиять на оценку для другой. Двумя основными подходами для реализации этих идей являются оценка функций полезности и прямая оптимизация стратегий.
Подход с использованием функции полезности использует множество оценок ожидаемого выигрыша только для одной стратегии [math]\pi[/math] (либо текущей, либо оптимальной). При этом пытаются оценить либо ожидаемый выигрыш, начиная с состояния [math]s[/math] , при дальнейшем следовании стратегии [math]\pi[/math] ,
[math]V(s) = E[R|s, \pi][/math] ,
либо ожидаемый выигрыш, при принятии решения [math]a[/math] в состоянии [math]s[/math] и дальнейшем соблюдении [math]\pi[/math] ,
[math]Q(s, a) = E[R|s, \pi, a][/math] ,
Если для выбора оптимальной стратегии используется функция полезности [math]Q[/math] , то оптимальные действия всегда можно выбрать как действия, максимизирующие полезность.
Если же мы пользуемся функцией [math]V[/math] , необходимо либо иметь модель окружения в виде вероятностей [math]P(s'|s, a)[/math] , что позволяет построить функцию полезности вида
либо применить т.н. метод исполнитель-критик, в котором модель делится на две части: критик, оценивающий полезность состояния [math]V[/math] , и исполнитель, выбирающий подходящее действие в каждом состоянии.
Имея фиксированную стратегию [math]\pi[/math] , оценить [math]E[R|\cdot][/math] при [math]\gamma = 1[/math] можно просто усреднив непосредственные выигрыши. Наиболее очевидный способ оценки при [math]\gamma \in (0, 1)[/math] — усреднить суммарный выигрыш после каждого состояния. Однако для этого требуется, чтобы МППР достиг терминального состояния (завершился).
Поэтому построение искомой оценки при [math]\gamma \in (0, 1)[/math] неочевидно. Однако, можно заметить, что [math]R[/math] образуют рекурсивное уравнение Беллмана:
[math]E[R|s_t]=r_t + \gamma E[R|s_][/math] ,
Подставляя имеющиеся оценки [math]V[/math] и применяя метод градиентного спуска с квадратичной функцией ошибок, мы приходим к алгоритму обучения с временными воздействиями (temporal difference (TD) learning). В простейшем случае и состояния, и действия дискретны и можно придерживаться табличных оценок для каждого состояния.
Другие похожие методы: Адаптивный эвристический критик (Adaptive Heuristic Critic, AHC), SARSA и Q-обучение (Q-learning).
[math]A[/math] — множество возможных действий (ручек автомата),
[math]p_a(r)[/math] — неизвестное распределение награды [math]r \in R[/math] [math]\forall a \in A[/math] ,
[math]\pi_t(a)[/math] — стратегия агента в момент [math]t[/math] [math]\forall a \in A[/math] .
Игра агента со средой:
- инициализация стратегии [math]\pi_1(a)[/math] ;
- для всех [math]t = 1 \ldots T[/math] :
- агент выбирает действие (ручку) [math]a_t ∼ \pi_t(a)[/math] ;
- среда генерирует награду [math]r_t ∼ p_(r)[/math] ;
- агент корректирует стратегию [math]\pi_(a)[/math] .
[math]Q_t(a) = \frac_
>_<[a_i = a]>> \rightarrow max [/math] — средняя награда в t играх
, [math]Q^∗(a) = \lim \limits_ Q_t(a) \rightarrow max [/math] — ценность действия [math]a[/math] .У нас есть автомат — [math]N[/math] -рукий бандит, на каждом шаге мы выбираем за какую из [math]N[/math] ручек автомата дернуть, т.е. множество действий [math]A = [/math] .
Выбор действия [math]a_t[/math] на шаге [math]t[/math] влечет награду [math]R(a_t)[/math] при этом [math]R(a)[/math] [math]\forall a \in A[/math] есть случайная величина, распределение которой неизвестно.
Состояние среды у нас от шага к шагу не меняется, а значит множество состояний [math]S[/math] тривиально, ни на что не влияет, поэтому его можно проигнорировать.
Для простоты будем полагать, что каждому действию соответствует некоторое распределение, которое не меняется со временем. Если бы мы знали эти распределения, то очевидная стратегия заключалась бы в том, чтобы подсчитать математическое ожидание для каждого из распределений, выбрать действие с максимальным математическим ожиданием и теперь совершать это действие на каждом шаге.
Проблема в том, что распределения неизвестны, однако можно оценить математическое ожидание некоторой случайной величины [math]\xi[/math] c неизвестным распределением. Для [math]K[/math] экспериментов [math]\xi_k[/math] , оценка математического ожидания это среднее арифметическое результатов экспериментов:
Задача является модельной для понимания конфликта между exploitation-exploration.
- [math]P_a = 0[/math] [math]\forall a \in \ [/math] — сколько раз было выбрано действие [math]a[/math] ,
- [math]Q_a = 0[/math] [math]\forall a \in \[/math] — текущая оценка математического ожидания награды для действия [math]a[/math] .
На каждом шаге [math]t[/math]
- Выбираем действие с максимальной оценкой математического ожидания:
- Выполняем действие [math]a_t[/math] и получаем награду [math]R(a_t)[/math] ;
- Обновляем оценку математического ожидания для действия [math]a_t[/math] :
Пусть у нас есть "двурукий" бандит. Первая ручка всегда выдаёт награду равную 1, вторая всегда выдаёт 2. Действуя согласно жадной стратегии мы дёрнем в начале первую ручку, так как в начале оценки математических ожиданий равны нулю, увеличим её оценку до [math]Q_1 = 1[/math] . В дальнейшем всегда будем выбирать первую ручку, а значит на каждом шаге будем получать на 1 меньше, чем могли бы.
В данном случае достаточно попробовать в начале каждую из ручек вместо того, чтобы фокусироваться только на одной. Но если награда случайная величина, то единичной попытки будет не достаточно. Поэтому модифицируем жадную стратегию следующим образом:
Пример. Награда для стратегии с различными [math]\epsilon[/math]Введем параметр [math]\epsilon \in (0,1)[/math] .
На каждом шаге [math]t[/math]
- Получим значение [math]\alpha[/math] — случайной величины равномерно распределенной на отрезке [math](0, 1)[/math] ;
- Если [math]\alpha \in (0, \epsilon)[/math] , то выберем действие [math]a_t \in A[/math] случайно и равновероятно, иначе как в жадной стратегии выберем действие с максимальной оценкой математического ожидания;
- Обновляем оценки так же как в жадной стратегии.
Если [math]\epsilon = 0[/math] , то это обычная жадная стратегия. Однако если [math]\epsilon \gt 0[/math] , то в отличии от жадной стратегии на каждом шаге с вероятностью [math]\epsilon[/math] присходит "исследование" случайных действий.
Основная идея алгоритма softmax — уменьшение потерь при исследовании за счёт более редкого выбора действий, которые небольшую награду в прошлом. Чтобы этого добиться для каждого действия вычисляется весовой коэффициент на базе которого происходит выбор действия. Чем больше [math]Q_t(a)[/math] , тем больше вероятность выбора [math]a[/math] :
[math]\tau \in (0, \infty)[/math] — параметр, с помощью которого можно настраивать поведение алгоритма.
При [math]\tau \rightarrow \infty[/math] стратегия стремится к равномерной, то есть softmax будет меньше зависеть от значения выигрыша и выбирать действия более равномерно (exploration).
При [math]\tau \rightarrow 0[/math] стратегия стремится к жадной, то есть алгоритм будет больше ориентироваться на известный средний выигрыш действий (exploitation).
Экспонента используется для того, чтобы данный вес был ненулевым даже у действий, награда от которых пока нулевая.
Эвристика: параметр [math]\tau[/math] имеет смысл уменьшать со временем.
Предыдущие алгоритмы при принятии решения используют данные о среднем выигрыше. Проблема в том, что если действие даёт награду с какой-то вероятностью, то данные от наблюдений получаются шумные и мы можем неправильно определять самое выгодное действие.
Алгоритм верхнего доверительного интервала (upper confidence bound или UCB) — семейство алгоритмов, которые пытаются решить эту проблему, используя при выборе данные не только о среднем выигрыше, но и о том, насколько можно доверять значениям выигрыша.
Также как softmax в UCB при выборе действия используется весовой коэффициент, который представляет собой верхнюю границу доверительного интервала (upper confidence bound) значения выигрыша:
[math]\pi_(a) = Q_t(a) + b_a[/math] ,
[math]b_a = \sqrt>> [/math] — бонусное значение, которые показывает, насколько недоисследовано действие по сравнению с остальными.
В отличие от предыдущих алгоритмов UCB не использует в своей работе ни случайные числа для выбора действия, ни параметры, которыми можно влиять на его работу. В начале работы алгоритма каждое из действий выбирается по одному разу (для того чтобы можно было вычислить размер бонуса для всех действий). После этого в каждый момент времени выбирается действие с максимальным значением весового коэффициента.
Несмотря на это отсутствие случайности результаты работы этого алгоритма выглядят довольно шумно по сравнению с остальными. Это происходит из-за того, что данный алгоритм сравнительно часто выбирает недоисследованные действия.
На основе получаемого от среды вознаграждения агент формирует функцию полезности [math]Q[/math] , что впоследствии дает ему возможность уже не случайно выбирать стратегию поведения, а учитывать опыт предыдущего взаимодействия со средой. Одно из преимуществ [math]Q[/math] -обучения — то, что оно в состоянии сравнить ожидаемую полезность доступных действий, не формируя модели окружающей среды. Применяется для ситуаций, которые можно представить в виде МППР.
Таким образом, алгоритм это функция качества от состояния и действия:
[math]Q: S \times A \to \mathbb[/math] ,
Перед обучением [math]Q[/math] инициализируется случайными значениями. После этого в каждый момент времени [math]t[/math] агент выбирает действие [math]a_t[/math] , получает награду [math]r_t[/math] , переходит в новое состояние [math]s_[/math] , которое может зависеть от предыдущего состояния [math]s_t[/math] и выбранного действия, и обновляет функцию [math]Q[/math] . Обновление функции использует взвешенное среднее между старым и новым значениями:
где [math]r_[/math] это награда, полученная при переходе из состояния [math]s_[/math] в состояние [math]s_[/math] , и [math]\alpha[/math] это скорость обучения ( [math]0 \lt \alpha \le 1[/math] ).
Алгоритм заканчивается, когда агент переходит в терминальное состояние [math]s_[/math] .
В этой статье мы сфокусируемся на изучении различных архитектур, которые активно используются вместе с обучением с подкреплением в наши дни для решения различного рода проблем, а именно Q-learning, Deep Q-learning, Policy Gradients, Actor Critic и PPO.
Из этой статьи, вы узнаете:
- Что такое обучение с подкреплением и для чего оно вообще нужно.
- Три подхода к обучению с подкреплением.
Очень важно освоить все эти элементы, прежде чем погружаться в реализацию системы глубинного обучения с подкреплением.
Идея обучения с подкреплением заключается в том, что система будет учиться в среде, взаимодействовать с ней и получать вознаграждение за выполнение действий.
Представьте, что вы ребенок в гостиной. Вы увидели камин и захотели подойти к нему.
Тут тепло, вы хорошо себя чувствуете. Вы понимаете, что огонь – это хорошо.
Но потом вы пытаетесь дотронуться до огня и обжигаете руку. Только что вы осознали, что огонь – это хорошо, но только тогда, когда находитесь на достаточном расстоянии, потому что он производит тепло. Если подойти слишком близко к нему, вы обожжетесь.
Вот как люди учатся через взаимодействие. Обучение с подкреплением – это просто вычислительный подход к обучению на основе действий.
Давайте в качестве примера представим, что система учится играть в Super Mario Bros. Процесс обучения с подкреплением может быть смоделирован как цикл, который работает следующим образом:- Наша система получает состояние S0 от окружающей среды (в нашем случае мы получаем первый кадр нашей игры (состояние) от Super Mario Bros (окружающая среда))
- Основываясь на этом состоянии, система выполняет действие A0 (наш герой будет двигаться вправо)
- Переход среды в новое состояние S1 (новый фрейм)
- Среда дает некоторую награду R1 нашему герою
Этот цикл ОП выводит последовательность состояний, действий и вознаграждений.
Цель системы – максимизировать ожидаемое вознаграждение.
Главная идея гипотезы вознаграждения
Почему целью системы является максимизация ожидаемого вознаграждения?
Обучение с подкреплением основано на идее гипотезы вознаграждения. Все цели можно описать максимизацией ожидаемого вознаграждения.
Именно поэтому в ОП, для того чтобы сделать наилучший ход , нужно максимизировать ожидаемое вознаграждение.
Вознаграждение на каждом временном шаге (t) может быть записано как:
Что эквивалентно:
Однако на самом деле мы не можем просто добавить такие награды. Награды, которые приходят раньше (в начале игры), более вероятны, так как они более предсказуемы, чем будущие вознаграждения.
Допустим, ваш герой – это маленькая мышь, а противник – кошка. Цель игры состоит в том, чтобы съесть максимальное количество сыра, прежде чем быть съеденным кошкой.
Как мы можем видеть на изображении, скорее всего мышь будет есть сыр рядом с собой, нежели сыр, расположенный ближе к кошке (т.к. чем ближе мы к кошке, тем она опаснее).
Как следствие, ценность награды рядом с кошкой, даже если она больше обычного (больше сыра), будет снижена. Мы не уверены, что сможем его съесть.
Перерасчет награды, мы делаем таким способом:
Мы определяем ставку дисконтирования gamma. Она должна быть в пределах от 0 до 1.
- Чем больше гамма, тем меньше скидка. Это означает, что в приоритете долгосрочные вознаграждения.
- С другой стороны, чем меньше гамма, тем больше скидка. Это означает, что в приоритете краткосрочные вознаграждения
Ожидаемые вознаграждения можно рассчитать по формуле:
Другими словами, каждая награда будет уценена с помощью gamma к показателю времени (t). По мере того, как шаг времени увеличивается, кошка становится ближе к нам, поэтому будущее вознаграждение все менее и менее вероятно.
У нас может быть два типа задач: эпизодические и непрерывные.
Эпизодические задачи
В этом случае у нас есть начальная и конечная точка. Это создает эпизод: список состояний, действий, наград и будущих состояний.
Например в Super Mario Bros, эпизод начинается с запуска нового Марио и заканчивается, когда вы убиты или достигли конца уровня.
Непрерывные задачи
Это задачи, которые продолжаются вечно. В этом случае система должна научиться выбирать оптимальные действия и одновременно взаимодействовать со средой.
Как пример можно привести систему, которая автоматически торгует акциями. Для этой задачи нет начальной точки и состояния терминала. Что касается нашей задачи, то герой будет бежать, пока мы не решим остановить его.
Существует два основных метода обучения:
- Монте-Карло: Сбор наград в конце эпизода, а затем расчет максимального ожидаемого будущего вознаграждения.
- Временная разница: Оценка награды на каждом этапе.
Монте-Карло
Когда эпизод заканчивается, система смотрит на накопленное вознаграждение, чтобы понять насколько хорошо он выполнил свою задачу. В методе Монте-Карло награды получают только в конце игры.
Затем, мы начинаем новую игру с новыми знаниями. С каждым разом система проходит этот уровень все лучше и лучше.
Возьмем эту картинку как пример:
- Каждый раз мы будем начинать с одного и того же места.
- Мы проиграем, если кошка съедает нас или если мы сделаем более 20 шагов.
- В конце эпизода у нас есть список состояний, действий, наград и новых состояний.
- Система будет суммировать общее вознаграждение Gt.
- Затем она обновит V (st), основываясь на приведенной выше формулы.
- Затем начнет игру заново, но уже с новыми знаниями.
Временная разница: обучение на каждом временном шаге
Этот метод не будет ждать конца эпизода, чтобы обновить максимально возможное вознаграждение. Он будет обновлять V в зависимости от полученного опыта.
Метод вызывает TD (0) или One step TD (обновление функции value после любого отдельного шага).
Он будет только ждать следующего временного шага, чтобы обновить значения. В момент времени t+1 обновляются все значения, а именно вознаграждение меняется на Rt+1, а текущую оценка на V(St+1).
Прежде чем рассматривать различные стратегии решения проблем обучения с подкреплением, мы должны охватить еще одну очень важную тему: компромисс между разведкой и эксплуатацией.
- Исследование – это поиск дополнительной информации об окружающей среде.
- Эксплуатация – это использование известной информации для получения максимального вознаграждения.
Помните, что цель нашей системы заключается в максимизации ожидаемого совокупного вознаграждения. Однако мы можем попасть в ловушку.
В этой игре, наша мышь может иметь бесконечное количество маленьких кусков сыра (+1). Однако на вершине лабиринта есть гигантский кусок сыра (+1000).
Но, если мы сосредоточимся только на вознаграждении, наша система никогда не достигнет того самого большого куска сыра. Вместо этого она будет использовать только ближайший источник вознаграждений, даже если этот источник мал (эксплуатация).
Но если наша система проведет небольшое исследование, она найдет большую награду.
Теперь, когда мы определили основные элементы обучения с подкреплением, давайте перейдем к трем подходам для решения проблем, связанных с этим обучением.
На основе значений
В обучении с подкреплением на основе значений целью является оптимизация функции V(s).
Функция value – это функция, которая сообщает нам максимальное ожидаемое вознаграждение, которое получит система.
Значение каждой позиции – это общая сумма вознаграждения, которую система может накопить в будущем, начиная с этой позиции.
Система будет использовать эту функцию значений для выбора состояния на каждом шаге. Она принимает состояние с наибольшим значением.
В примере лабиринта, на каждом шаге мы будем принимать наибольшее значение: -7, затем -6, затем -5 (и так далее), чтобы достичь цели.
На основе политики
В обучении с подкреплением на основе политики мы хотим напрямую оптимизировать функцию политики π (s) без использования функции значения.
Политика – это то, что определяет поведение системы в данный момент времени.
Это позволяет нам сопоставить каждую позицию с наилучшим действием.
Существует два типа политики:
- Детерминированный: будет возвращать одно и то же действие.
- Стохастический: выводит вероятность распределения по действиям.
Как можно заметить, политика прямо указывает на лучшие действия для каждого шага.На основе модели
В подходе на основании модели мы моделируем среду. Это означает, что мы создаем модель поведения среды.
Проблема каждой среды заключается в том, что понадобятся различные представления данной модели. Вот почему мы особо не будем раскрывать эту тему.
В этой статье было довольно много информации. Убедитесь, что действительно поняли весь материал, прежде чем продолжить изучение. Важно освоить эти элементы перед тем как начать самую интересную часть: создание ИИ, который играет в видеоигры.
03.02.2021 | Андрей Слуцкий, Вячеслав Чернов, г. Новосибирск | 0Начать стоит с самого определения. Обучение с подкреплением – это метод машинного обучения, при котором происходит обучение модели, которая не имеет никаких сведений о системе, но имеет возможность производить различные действия в ней и получать обратную связь от своих действий.
Для большего понимания, в качестве примера используем классическую для обучения с подкреплением задачу – многорукого бандита (однорукий бандит – игровой автомат. Многорукий бандит – несколько таких автоматов).
Представим, что перед нами стоят четыре одноруких бандита (система). Для упрощения условимся, что в каждом из них фиксированная вероятность выигрыша. И есть некий игрок (агент), который не знает ничего о том, как работает система, но может совершать действия в ней, а если точнее, дергать за руку одного из четырёх бандитов, и получать обратную связь от своих действий – информацию о выигрыше или проигрыше. Цель обучения агента – это выявление оптимальной стратегии поведения в системе, а в этом конкретном примере – определение бандита с наибольшей вероятностью выигрыша.
С теорией немного разобрались, теперь переходим к коду.
Для начала, опишем систему.
Система описана. Для четырёх бандитов заданы вероятности выигрыша в 20, 35, 10 и 65 процентов соответственно. Для нас уже сейчас очевидно, что оптимальным вариантом является четвёртый бандит с вероятностью выигрыша 65 процентов, но агенту только предстоит прийти к такому выводу. Для обучения мы будем использовать tensorflow. С его помощью мы создадим простого агента, который будет состоять из списка вероятность выигрыша для бандитов. Чтобы обновлять веса мы воспользуемся policy gradient, а значит будем выбирать действия, которые минимизируют функцию потерь.
Теперь переходим к обучению агента. Обучение пройдёт путём выбора действий и получения выигрышей или проигрышей. Применяя полученные значения, нам будет понятно, каким образом необходимо менять веса модели, чтобы в отбор чаще подпадали бандиты с большим возможным выигрышем.
После выполнения данного кода агентом будет определён оптимальный бандит и он сообщит об этом в терминале.
Сфер же применения данного метода обучения достаточно много. Начиная с того, что таким образом компьютер научился невероятно успешно играть в игры (openAI ) и заканчивая чем-то более сложным, например, обучение торговле ценными бумагами с получением максимальной выгоды.
Стоит заметить, что такой подход к обучению не единственно правильный и существует множество других, например, Q-Learning. У каждого из методов есть свои особенности и каждый стоит того, чтобы уделить ему внимание.
Читайте также: