Что такое обучение с подкреплением
Никогда больше не игнорируйте обучение с подкреплением
Привет, Хабр! Представляю вашему вниманию перевод статьи «Don’t Ever Ignore Reinforcement Learning Again» автора Michel Kana, Ph.D.
Обучение с учителем и обучение без учителя — это ещё не все. Все это знают. Начните с OpenAI Gym.
Собираетесь победить чемпиона мира по шахматам, нардам или го?
Есть способ, который позволит вам это сделать — обучение с подкреплением.
Что такое обучение с подкреплением?
Обучение с подкреплением — это обучение принятия последовательных решений в окружающей среде с максимальным полученным вознаграждением, которое даётся за каждое действие.
В нем нет учителя, только сигнал вознаграждения от окружающей среды. Время имеет значение, и действия влияют на последующие данные. Такие условия создают трудности для обучения как с учителем, так и без него.
В примере ниже, мышь пытается найти столько еды, сколько может, и избегает ударов тока, когда это возможно.
Мышь может быть храброй и может получить разряд, чтобы добраться до места с большим количеством сыра. Это будет лучше, чем просто стоять на месте и ничего не получать.
Мышь не хочет принимать лучшие решения в каждой конкретной ситуации. Это потребовало бы от неё больших умственных затрат, и было бы не универсально.
Обучение с подкреплением предоставляет некие магические наборы методов, которые позволяют нашей мыши самой учиться, как избежать электрошока и получить столько еды, сколько возможно.
Мышь — это агент. Лабиринт со стенами, сыром и электрошокерами — это окружающая среда. Мышь может двигаться влево, вправо, вверх, вниз — это действия.
Обучение с подкреплением на льду
Давайте оставим мышь в лабиринте и перейдём на лёд. «Зима наступила. Вы и ваши друзья перекидывались фрисби в парке, когда вы вдруг закинули фрисби на середину озера. В основном вода в озере замёрзла, но осталось несколько дыр, где лёд растаял. (источник)
«Если вы наступите на одну из дыр, вы упадёте в ледяную воду. К тому же в мире огромный дефицит фрисби, так что абсолютно необходимо, чтобы вы прошли по озеру и нашли диск.» (источник)
Как вам быть в подобной ситуации?
Это задача для обучения с подкреплением. Агент контролирует движения персонажа в мире-сетке. Некоторые плитки сетки проходимы, а другие приводят к тому, что персонаж падает в воду. Агент получает вознаграждение за нахождения проходимого пути к цели.
Мы можем смоделировать такое окружение используя OpenAI Gym — инструментарий для разработки и сравнения алгоритмов обучения с подкреплением. Он обеспечивает доступ к стандартизированному набору сред, таких как в нашем примере, которая называется «Frozen Lake» («Замершее Озеро). Это текстовая среда, которая может быть создана парой строк кода.
Теперь нам нужна структура, которая позволит нас систематически подходить к проблемам обучения с подкреплением.
Процесс принятия решений Маркова
В нашем примере, агент контролирует передвижение персонажа по миру-сетке, и это окружение называется полностью наблюдаемой средой.
Поскольку будущая плитка не зависит от прошлых плиток с учётом текущей плитки
( мы имеем дело с последовательностью случайных состояний, то есть со свойством Маркова ), поэтому мы имеем дело с так называемым Марковским процессом.
Текущее состояние инкапсулирует все, что необходимо для решения, какой будет следующий ход, ничего запоминать не требуется.
На каждой следующей клетке (то есть ситуации) агент выбирает с некоторой вероятностью действие, которое ведёт к следующей клетке, то есть ситуации, и окружение отвечает агенту наблюдением и наградой.
Добавим в процесс Маркова функцию вознаграждения и коэффициент скидки, и мы получим так называемый процесс вознаграждения Маркова. Добавив набор действий мы получим процесс принятия решений Маркова (MDP). Ниже более подробно рассказывается о компонентах MDP.
Состояние
Состояние — это часть окружающей среды, числовое представление того, что агент наблюдает в определённый момент времени в окружающий среде, состояние сетки озера. S — начальная точка, G — цель, F — твёрдый лёд, на котором агент может стоять, и H — дыра, в которое упадёт агент, если наступит на неё. У нас есть 16 состояний в среде сетки 4 на 4, или 64 состояния в среде 8 на 8. Ниже мы нарисуем пример среды 4 на 4 используя OpenAI Gym.
Действия
Модель перехода состояний
Модель перехода состояний описывает, как меняется состояние окружающей среды, когда агент предпринимает действия, исходя из текущего своего состояния.
Модель обычно описывается вероятностью перехода, который выражается в виде квадратной переходной матрицы размером N х N, где N — это число состояний нашей модели. Иллюстрация ниже — это пример такой матрицы для погодных условий.
В условиях среды Frozen Lake, мы предполагаем, что озеро не скользкое. Если мы идём вправо, то точно идём вправо. Поэтому все вероятности равны.
«Влево» перемещает агента на 1 клетку влево или оставляет его на той же позиции, если агент находится у левой границы.
«Вправо» двигает его на 1 клетку вправо или оставляет на той же позиции, если агент находится у правой границы.
«Вверх» перемещает агента на 1 клетку вверх, или агент остаётся на том же месте, если он стоит у верхней границы.
«Вниз» перемещает агента на 1 клетку вниз, или он остаётся на том же месте, если он находится у нижней границы.
Вознаграждение
Из-за того что обе модели, переходная модель и модель награды, являются детерминированными функциями, это делает среду детерминированной. \
Скидка
Скидка — это необязательный параметр, который контролирует важность будущих вознаграждений. Он измеряется в диапазоне от 0 до 1. Цель этого параметра — не допустить, чтобы общее вознаграждение не уходило в бесконечность.
Скидка также моделирует поведение агента, когда агент предпочитает немедленное вознаграждение вознаграждению, которое может быть получено в будущем.
Ценность
Ценность состояния — это ожидаемый долгосрочный доход со скидкой для состояния.
Политика(π)
Стратегия, которую агент использует для выбора следующего действия, называется политикой. Среди всех доступных политик оптимальной является та, которая максимизирует сумму вознаграждения, полученного или ожидаемого за время эпизода.
Эпизод
Эпизод начинается, когда агент появляется на стартовой клетке, и заканчивается, когда агент либо падает в дыру или достигает целевой клетки.
Давайте визуализируем все это
После рассмотрения всех концепций, участвующих в процессе принятия решений Маркова, мы теперь можем моделировать несколько случайных действий в среде 16×16 с использованием OpenAI Gym. Каждый раз агент выбирает случайное действие и выполняет его. Система вычисляет вознаграждение и отображает новое состояние окружающей среды.
Заключение
В этой статье мы кратко разобрали основные концепции обучения с подкреплением. Наш пример дал представлении об OpenAI Gym toolkit, который позволяет легко экспериментировать с предварительно построенными средами.
В следующей части мы представим, как спроектировать и имплементировать политики, которые позволят агенту делать набор действий, чтобы обязательно достичь цели и получить награду, такую, как победить чемпиона мира.
Введение в обучение с подкреплением
Мы открыли новый поток на курс «Machine learning», так что ждите в ближайшее время статей связанных с данной, так сказать, дисциплиной. Ну и разумеется открытых семинаров. А сейчас давайте рассмотрим, что такое обучение с подкреплением.
Обучение с подкреплением является важным видом машинного обучения, где агент учится вести себя в окружающей среде, выполняя действия и видя результаты.
В последние годы мы наблюдаем много успехов в этой увлекательной области исследований. Например, DeepMind и Deep Q Learning Architecture в 2014 году, победа над чемпионом по игре в го с AlphaGo в 2016, OpenAI и PPO в 2017 году, среди прочих.
В этой серии статей мы сосредоточимся на изучении различных архитектур, используемых сегодня для решения задачи обучения с подкреплением. К ним относятся Q-learning, Deep Q-learning, Policy Gradients, Actor Critic и PPO.
В этой статье вы узнаете:
Идея обучения с подкреплением заключается в том, что агент будет учиться у окружающей среды, взаимодействуя с ней и получая вознаграждения за выполнение действий.
Обучение через взаимодействие с окружающей средой происходит из нашего естественного опыта. Представьте, что вы ребенок в гостиной. Вы видите камин и подходите к нему.
Рядом тепло, вы чувствуете себя хорошо (положительное вознаграждение +1). Вы понимаете, что огонь — это положительная вещь.
Именно так люди учатся через взаимодействие. Обучение с подкреплением — это просто вычислительный подход к обучению через действия.
Процесс обучения с подкреплением
В качестве примера представим, что агент учится играть в Super Mario Bros. Процесс обучения с подкреплением (Reinforcement Learning — RL) можно смоделировать как цикл, который работает следующим образом:
Центральная идея Гипотезы вознаграждения
Почему цель агента заключается в максимизации ожидаемого накопленного вознаграждения? Ну, обучение с подкреплением основано на идее гипотезы вознаграждения. Все цели можно описать максимизацией ожидаемого накопленного вознаграждения.
Поэтому в обучении с подкреплением, чтобы добиться наилучшего поведения, нам нужно максимизировать ожидаемое накопленное вознаграждение.
Накопленное вознаграждение на каждом временном шаге t может быть записано как:
Однако на самом деле мы не можем просто прибавлять такие вознаграждения. Вознаграждения, которые поступают раньше (в начале игры), более вероятны, поскольку они более предсказуемы, чем вознаграждения в дальнейшей перспективе.
Допустим, что ваш агент — это маленькая мышь, а оппонент — кошка. Ваша цель — съесть максимальное количество сыра, прежде чем кошка вас съест. Как мы видим на диаграмме, мышь вероятнее съест сыр рядом с собой, чем сыр около кошки (чем ближе мы находимся к ней, тем это опаснее).
Как следствие, вознаграждение у кошки, даже если оно больше (больше сыра), будет снижено. Мы не уверены, что сможем его съесть. Чтобы снизить вознаграждение, мы делаем следующее:
Грубо говоря, каждое вознаграждение будет снижено с помощью гаммы к показателю времени. По мере увеличения временного шага кошка становится ближе к нам, поэтому будущая награда становится все менее вероятной.
Эпизодические или непрерывные задачи
Задача — это экземпляр проблемы обучения с подкреплением. У нас могут быть два типа задач: эпизодическая и непрерывная.
В этом случае мы имеем начальную точку и конечную точку (терминальное состояние). Это создает эпизод: список состояний, действий, вознаграждений и новых состояний.
Возьмем к примеру Super Mario Bros: эпизод начинается с запуска нового Марио и заканчивается, когда вы убиты или достигнете конца уровня.
Начало нового эпизода
Это задачи, которые продолжаются вечно (без терминального состояния). В этом случае агент должен научиться выбирать лучшие действия и одновременно взаимодействовать с окружающей средой.
Например, агент, который выполняет автоматическую торговлю акциями. Для этой задачи нет начальной точки и терминального состояния. Агент продолжает работать, пока мы не решим его остановить.
Метод Монте-Карло против метода временных различий
Есть два способа обучения:
Когда эпизод заканчивается (агент достигает «терминального состояния»), агент просматривает общее накопленное вознаграждение, чтобы увидеть, насколько хорошо он справился. В подходе Монте-Карло вознаграждение получается только в конце игры.
Затем мы начинаем новую игру с дополненными знаниями. Агент принимает лучшие решения с каждой итерацией.
Если мы возьмем лабиринт в качестве окружающей среды:
Временные различия: обучение на каждом временном шаге
Метод временных различий (TD — Temporal Difference Learning) не будет ждать конца эпизода, чтобы обновить максимально возможное вознаграждение. Он будет обновлять V в зависимости от полученного опыта.
Этот метод называется TD(0) или пошаговый TD (обновляет функцию полезности после любого отдельного шага).
TD-методы ожидают только следующего временного шага для обновления значений. В момент времени t + 1 формируется TD цель с использованием вознаграждения Rt+1 и текущей оценки V(St+1).
TD цель — это оценка ожидаемого: фактически вы обновляете предыдущую оценку V(St) к цели в пределах одного шага.
Прежде чем рассматривать различные стратегии решения задач обучения с подкреплением, мы должны рассмотреть еще одну очень важную тему: компромисс между разведкой и эксплуатацией.
В этой игре у нашей мыши может быть бесконечное количество маленьких кусочков сыра (+1 каждый). Но на вершине лабиринта есть гигантский кусок сыра (+1000). Однако, если мы сосредоточимся только на вознаграждении, наш агент никогда не достигнет гигантского куска. Вместо этого он будет использовать только ближайший источник вознаграждений, даже если этот источник небольшой (эксплуатация). Но если наш агент немного разведает обстановку, он сможет найти большое вознаграждение.
Это то, что мы называем компромиссом между разведкой и эксплуатацией. Мы должны определить правило, которое поможет справиться с этим компромиссом. В будущих статьях вы узнаете разные способы это сделать.
Три подхода к обучению с подкреплением
Теперь, когда мы определили основные элементы обучения с подкреплением, давайте перейдем к трем подходам решения задач обучения с подкреплением: на основе стоимости, на основе политике и на основе модели.
На основе стоимости
В RL на основе стоимости, целью является оптимизация функции полезности V(s).
Функция полезности — это функция, которая сообщает нам о максимальном ожидаемом вознаграждении, которое агент получит в каждом состоянии.
Значение каждого состояния — это общая сумма вознаграждения, которое агент может рассчитывать накопить в будущем, начиная с этого состояния.
Агент будет использовать эту функцию полезности, чтобы решить, какое состояние выбрать на каждом шаге. Агент выбирает состояние с наибольшим значением.
На основе политики
В RL на основе политики мы хотим напрямую оптимизировать функцию политики π(s) без использования функции полезности. Политикой является то, что определяет поведение агента в данный момент времени.
действие = политика(состояние)
Мы изучаем функцию политики. Это позволяет нам сопоставить каждое состояние с наилучшим соответствующим действием.
Есть два типа политики:
Как можно заметить, политика прямо указывает на лучшее действие для каждого шага.
В RL на основе модели мы моделируем среду. Это означает, что мы создаем модель поведения окружающей среды. Проблема заключается в том, что каждой среде потребуется другое представление модели. Вот почему мы не будем сильно заострять внимание на этом типе обучения в следующих статьях.
Знакомство с глубоким обучением с подкреплением
Глубокое обучение с подкреплением (Deep Reinforcement Learning) вводит глубокие нейронные сети для решения задач обучения с подкреплением — отсюда и название «глубокое».
Например, в следующей статье мы будем работать над Q-Learning (классическое обучение с подкреплением) и Deep Q-Learning.
Вы увидите разницу в том, что в первом подходе мы используем традиционный алгоритм для создания таблицы Q, которая помогает нам найти, какое действие нужно предпринять для каждого состояния.
Во втором подходе мы будем использовать нейронную сеть (для аппроксимации вознаграждения на основе состояния: значение q).
Схема, вдохновленная учебным пособием Q от Udacity
Вот и всё. Как всегда мы ждём ваши комментарии или вопросы тут или их можно задать преподавателю курса Артуру Кадурину на его открытом уроке, посвящённому обучению сетей.
Введение в обучение с подкреплением: от многорукого бандита до полноценного RL агента
Привет, Хабр! Обучение с подкреплением является одним из самых перспективных направлений машинного обучения. С его помощью искусственный интеллект сегодня способен решать широчайший спектр задач: от робототехники и видеоигр до моделирования поведения покупателей и здравоохранения. В этой вводной статье мы изучим главную идею reinforcement learning и с нуля построим собственного самообучающегося бота.
Введение
Основное отличие обучения с подкреплением (reinforcement learning) от классического машинного обучения заключается в том, что искусственный интеллект обучается в процессе взаимодействия с окружающей средой, а не на исторических данных. Соединив в себе способность нейронных сетей восстанавливать сложные взаимосвязи и самообучаемость агента (системы) в reinforcement learning, машины достигли огромных успехов, победив сначала в нескольких видеоиграх Atari, а потом и чемпиона мира по игре в го.
Если вы привыкли работать с задачами обучения с учителем, то в случае reinforcement learning действует немного иная логика. Вместо того, чтобы создавать алгоритм, который обучается на наборе пар «факторы — правильный ответ», в обучении с подкреплением необходимо научить агента взаимодействовать с окружающей средой, самостоятельно генерируя эти пары. Затем на них же он будет обучаться через систему наблюдений (observations), выигрышей (reward) и действий (actions).
Очевидно, что теперь в каждый момент времени у нас нет постоянного правильного ответа, поэтому задача становится немного хитрее. В этой серии статей мы будем создавать и обучать агентов обучения с подкреплением. Начнем с самого простого варианта агента, чтобы основная идея reinforcement learning была предельно понятна, а затем перейдем к более сложным задачам.
Многорукий бандит
Самый простой пример задачи обучения с подкреплением — задача о многоруком бандите (она достаточно широко освещена на Хабре, в частности, тут и тут). В нашей постановке задачи есть n игровых автоматов, в каждом из которых фиксирована вероятность выигрыша. Тогда цель агента — найти слот-машину с наибольшим ожидаемым выигрышем и всегда выбирать именно ее. Для простоты у нас будет всего четыре игровых автомата, из которых нужно будет выбирать.
По правде говоря, эту задачу можно с натяжкой отнести к reinforcement learning, поскольку задачам из этого класса характерны следующие свойства:
В области обучения с подкреплением есть и другой подход, при котором агенты обучают value functions. Вместо того, чтобы находить оптимальное действие в текущем состоянии, агент учиться предсказывать, насколько выгодно находиться в данном состоянии и совершать данное действие. Оба подхода дают хорошие результаты, однако логика policy gradient более очевидна.
Policy Gradient
Как мы уже выяснили, в нашем случае ожидаемый выигрыш каждого из игровых автоматов не зависит от текущего состояния среды. Получается, что наша нейросеть будет состоять лишь из набора весов, каждый из которых соответствует одному игровому автомату. Эти веса и будут определять, за какую ручку нужно дернуть, чтобы получить максимальный выигрыш. К примеру, если все веса инициализировать равными 1, то агент будет одинаково оптимистичен по поводу выигрыша во всех игровых автоматах.
Для обновления весов модели мы будем использовать e-жадную линию поведения. Это значит, что в большинстве случаев агент будет выбирать действие, максимизирующее ожидаемый выигрыш, однако иногда (с вероятностью равной e) действие будет случайным. Так будет обеспечен выбор всех возможных вариантов, что позволит нейросети «узнать» больше о каждом из них.
Интуитивно понятно, что функция потерь должна принимать такие значения, чтобы веса действий, которые привели к выигрышу увеличивались, а те, которые привели к проигрышу, уменьшались. В результате веса будут обновляться, а агент будет все чаще и чаще выбирать игровой автомат с наибольшей фиксированной вероятностью выигрыша, пока, наконец, он не будет выбирать его всегда.
Реализация алгоритма
Бандиты. Сначала мы создадим наших бандитов (в быту игровой автомат называют бандитом). В нашем примере их будет 4. Функция pullBandit генерирует случайное число из стандартного нормального распределения, а затем сравнивает его со значением бандита и возвращает результат игры. Чем дальше по списку находится бандит, тем больше вероятность, что агент выиграет, выбрав именно его. Таким образом, мы хотим, чтобы наш агент научился всегда выбирать последнего бандита.
Агент. Кусок кода ниже создает нашего простого агента, который состоит из набора значений для бандитов. Каждое значение соответствует выигрышу/проигрышу в зависимости от выбора того или иного бандита. Чтобы обновлять веса агента мы используем policy gradient, то есть выбираем действия, минимизирующие функцию потерь:
Обучение агента. Мы будем обучать агента, путем выбора определенных действий и получения выигрышей/проигрышей. Используя полученные значения, мы будем знать, как именно обновить веса модели, чтобы чаще выбирать бандитов с большим ожидаемым выигрышем:
Полный Jupyter Notebook можно скачать тут.
Решение полноценной задачи обучения с подкреплением
Теперь, когда мы знаем, как создать агента, способного выбирать оптимальное решение из нескольких возможных, перейдем к рассмотрению более сложной задачи, которая и будет представлять собой пример полноценного reinforcement learning: оценивая текущее состояние системы, агент должен выбирать действия, которые максимизируют выигрыш не только сейчас, но и в будущем.
Системы, в которых может быть решена обучения с подкреплением называются Марковскими процессами принятия решений (Markov Decision Processes, MDP). Для таких систем характерны выигрыши и действия, обеспечивающие переход из одного состояния в другое, причем эти выигрыши зависят от текущего состояния системы и решения, которое принимает агент в этом состоянии. Выигрыш может быть получен с задержкой во времени.
Формально Марковский процесс принятия решений может быть определен следующим образом. MDP состоит из набора всех возможных состояний S и действий А, причем в каждый момент времени он находится в состоянии s и совершает действие a из этих наборов. Таким образом, дан кортеж (s, a) и для него определены T(s,a) — вероятность перехода в новое состояние s’ и R(s,a) — выигрыш. В итоге в любой момент времени в MDP агент находится в состоянии s, принимает решение a и в ответ получает новое состояние s’ и выигрыш r.
Для примера, даже процесс открывания двери можно представить в виде Марковского процесса принятия решений. Состоянием будет наш взгляд на дверь, а также расположение нашего тела и двери в мире. Все возможные движения тела, что мы можем сделать, и являются набором A, а выигрыш — это успешное открытие двери. Определенные действия (например, шаг в сторону двери) приближают нас к достижению цели, однако сами по себе не приносят выигрыша, так как его обеспечивает только непосредственно открывание двери. В итоге, агент должен совершать такие действия, которые рано или поздно приведут к решению задачи.
Задача стабилизации перевернутого маятника
Воспользуемся OpenAI Gym — платформой для разработки и тренировки AI ботов с помощью игр и алгоритмических испытаний и возьмем классическую задачу оттуда: задача стабилизации перевернутого маятника или Cart-Pole. В нашем случае суть задачи заключается в том, чтобы как можно дольше удерживать стержень в вертикальном положении, двигая тележку по горизонтали:
В отличии от задачи о многоруком бандите, в данной системе есть:
Таким образом, каждое действие агента будет совершено с учетом не только мгновенного выигрыша, но и всех последующих. Также теперь мы будем использовать скорректированный выигрыш в качестве оценки элемента A (advantage) в функции потерь.
Реализация алгоритма
Импортируем библиотеки и загрузим среду задачи Cart-Pole:
Агент. Сначала создадим функцию, которая будет дисконтировать все последующие выигрыши на текущий момент:
Теперь создадим нашего агента:
Обучение агента. Теперь, наконец, перейдем к обучению агента:
Полный Jupyter Notebook вы можете посмотреть тут. Увидимся в следующих статьях, где мы продолжим изучать обучение с подкреплением!