Word reinforcement что это в методике
Время прочтения: 3 мин.
Начать стоит с самого определения. Обучение с подкреплением – это метод машинного обучения, при котором происходит обучение модели, которая не имеет никаких сведений о системе, но имеет возможность производить различные действия в ней и получать обратную связь от своих действий.
Для большего понимания, в качестве примера используем классическую для обучения с подкреплением задачу – многорукого бандита (однорукий бандит – игровой автомат. Многорукий бандит – несколько таких автоматов).
Представим, что перед нами стоят четыре одноруких бандита (система). Для упрощения условимся, что в каждом из них фиксированная вероятность выигрыша. И есть некий игрок (агент), который не знает ничего о том, как работает система, но может совершать действия в ней, а если точнее, дергать за руку одного из четырёх бандитов, и получать обратную связь от своих действий – информацию о выигрыше или проигрыше. Цель обучения агента – это выявление оптимальной стратегии поведения в системе, а в этом конкретном примере – определение бандита с наибольшей вероятностью выигрыша.
С теорией немного разобрались, теперь переходим к коду.
Для начала, опишем систему.
Система описана. Для четырёх бандитов заданы вероятности выигрыша в 20, 35, 10 и 65 процентов соответственно. Для нас уже сейчас очевидно, что оптимальным вариантом является четвёртый бандит с вероятностью выигрыша 65 процентов, но агенту только предстоит прийти к такому выводу. Для обучения мы будем использовать tensorflow. С его помощью мы создадим простого агента, который будет состоять из списка вероятность выигрыша для бандитов. Чтобы обновлять веса мы воспользуемся policy gradient, а значит будем выбирать действия, которые минимизируют функцию потерь.
Теперь переходим к обучению агента. Обучение пройдёт путём выбора действий и получения выигрышей или проигрышей. Применяя полученные значения, нам будет понятно, каким образом необходимо менять веса модели, чтобы в отбор чаще подпадали бандиты с большим возможным выигрышем.
После выполнения данного кода агентом будет определён оптимальный бандит и он сообщит об этом в терминале.
Сфер же применения данного метода обучения достаточно много. Начиная с того, что таким образом компьютер научился невероятно успешно играть в игры (openAI ) и заканчивая чем-то более сложным, например, обучение торговле ценными бумагами с получением максимальной выгоды.
Стоит заметить, что такой подход к обучению не единственно правильный и существует множество других, например, Q-Learning. У каждого из методов есть свои особенности и каждый стоит того, чтобы уделить ему внимание.
В этой статье мы сфокусируемся на изучении различных архитектур, которые активно используются вместе с обучением с подкреплением в наши дни для решения различного рода проблем, а именно 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) без использования функции значения.
Политика – это то, что определяет поведение системы в данный момент времени.
Это позволяет нам сопоставить каждую позицию с наилучшим действием.
Существует два типа политики:
- Детерминированный: будет возвращать одно и то же действие.
- Стохастический: выводит вероятность распределения по действиям.
Как можно заметить, политика прямо указывает на лучшие действия для каждого шага.
На основе модели
В подходе на основании модели мы моделируем среду. Это означает, что мы создаем модель поведения среды.
Проблема каждой среды заключается в том, что понадобятся различные представления данной модели. Вот почему мы особо не будем раскрывать эту тему.
В этой статье было довольно много информации. Убедитесь, что действительно поняли весь материал, прежде чем продолжить изучение. Важно освоить эти элементы перед тем как начать самую интересную часть: создание ИИ, который играет в видеоигры.
Рассказываем, как методом проб и ошибок машины учатся и какие алгоритмы используют, чтобы превзойти человека.
Обучение с подкреплением (Reinforcement Learning) – это метод машинного обучения, в котором наша система (агент) обучается методом проб и ошибок. Идея заключается в том, что агент взаимодействует со средой, параллельно обучаясь, и получает вознаграждение за выполнение действий.
Как оно работает?
В обучении с подкреплением используется способ положительной награды за правильное действие и отрицательной за неправильное. Таким образом, метод присваивает положительные значения желаемым действиям, чтобы побудить агента, и отрицательные значения – к нежелательным. Это программирует нашего агента на поиск долгосрочного и максимального общего вознаграждения для достижения оптимального решения. Эти долгосрочные цели не дают агенту возможности останавливаться на достигнутом. Со временем система учится избегать негативных действий и совершает только позитивные.
Обучение на основе взаимодействия с окружающей средой происходит методом проб и ошибок.
Представьте, что у нас есть стол для игры в пинг-понг и две ракетки. Пусть наша цель – такая система, где мяч не должен пропускаться ни одной из ракеток. Когда каждая из ракеток отбивает мяч, наша позитивная награда увеличивается на единицу (+1), соответственно, в случае пропуска мяча агент получает отрицательное вознаграждение (-1).
Необходимые термины в Reinforcement Learning
- Агент (agent): Наша система, которая выполняет действия в среде, чтобы получить некоторую награду.
- Среда (environment, e): сценарий/окружение, с которым должен столкнуться агент.
- Награда (reward, R): немедленный возврат, который предоставляется агенту, после выполнения определенного действия или задачи. Является положительной и отрицательной, как было упомянуто выше.
- Состояние (state, s): Состояние относится к текущему положению, возвращаемой средой.
- Политика (policy, π): стратегия, которая применяется агентом для принятия решения о следующем действии на основе текущего состояния.
- Стоимость (value, V): награда, которая ожидается в долгосрочной перспективе. По сравнению с краткосрочным вознаграждением, принимаем во внимание скидку (discount).
- Значение Функции (value function): определяет размер переменной, которой является общая сумма награды.
- Модель среды (Model of the environment): имитатор поведения окружающей среды (просто говоря, демо-версия вашей модели). Это помогает определить, как будет вести себя среда.
- Значение Q или значение действия (Q): значение Q очень похоже на value (V). Но главное различие между ними в том, что он принимает дополнительный параметр в качестве текущего действия.
Где использовать Reinforcement Learning?
Обучение с подкреплением используется в следующих сферах:
- Робототехника для промышленной автоматизации (например, конвейерная сборка).
- Планирование бизнес-стратегии.
- Автоматизация внутри самого машинного обучения.
- Продвинутые система рекомендации, например, на университетских ресурсах для дополнительного обучения студентов.
- Управление движением робота, автопилот.
Следует помнить, что обучение с подкреплением требует больших вычислительных ресурсов и времени, особенно когда пространство для действий у модели велико.
Какие алгоритмы использовать?
Область обучения с подкреплением состоит из нескольких алгоритмов, использующих разные подходы. Различия в основном связаны с их стратегиями взаимодействия с окружающей средой.
- State-Action-Reward-State-Action (SARSA). Этот алгоритм обучения с подкреплением начинается с предоставления агенту такого коэффициента, как политика (on-policy). В данном случае политика – это вероятность, с помощью которой алгоритм оценивает шансы определенных действий, приводящих к вознаграждениям или положительным состояниям.
- Q-Learning. В этом подходе к Reinforcement Learning используется противоположный подход. Агент не получает политики (on-policy), соответственно, его исследование окружающей среды является более самостоятельным. В Q-learning у нас нет ограничений на выбор действия (action) для алгоритма. Он полагает, что все последующие выборы actions будут оптимальными по умолчанию, поэтому алгоритм производит операцию выбора исходя из максимизации оценки Q.
- Deep Q-Networks (Глубокие Q-сети). Этот алгоритм использует нейронные сети в дополнение к методам обучения с подкреплением (reinforcement learning). Нейросети осуществляют самостоятельное исследование (research) среды обучения с подкреплением для выбора наиболее оптимального значения. То, как алгоритм будет себя вести и подбирать значения, основано на выборке прошлых положительных действий, полученных нейронной сетью.
Чем отличается от классического глубокого обучения (Deep Learning)?
- Обучение с подкреплением похоже на глубокое обучение, за исключением одного момента: в случае Reinforcement Learning машина обучаются методом проб и ошибок, используя данные из собственного опыта.
- Алгоритм обучения с подкреплением – это независимая система с самообучением. Чтобы добиться наилучших результатов, машина учится в режиме постоянной практики, из чего следует концепция обучения методом проб и ошибок.
Человек в какой-то степени представляет из себя пример обучения с подкреплением. Например, попытки научиться ездить на велосипеде, или плавать: процесс состоит из правильных и неправильных ходов.
- Глубокое обучение предполагает исследование уже существующей “даты”, на основе чего мы позже применяем наши наработки к новому набору данных.
- Обучение с подкреплением, в свою очередь, является динамическим (самостоятельным) обучением, которое использует метод проб и ошибок для того, чтоб обоснованно принять решение.
Проблемы, стоящие перед Reinforcement Learning
Обучение с подкреплением, хотя и имеет высокий потенциал, может быть трудным для развертывания и, к сожалению, остается ограниченным в применении. Одно из препятствий для развертывания этой сферы машинного обучения – это зависимость от исследования окружающей среды.
К примеру, если вы развернули робота, который применяет обучение с подкреплением для навигации в окружающей среде, то он будет искать новые состояния и предпринимать различные действия во время движения. Однако сложно последовательно предпринимать наилучшие действия из-за частых изменений в окружающей среде. Так, если вы задали роботу environment (окружающую среду) в виде вашего дома, то после перестановки предметов или мебели ваше устройство придется полностью адаптировать к новым условиям.
Время, необходимое для правильного обучения с помощью reinforcement learning может ограничить его полезность и потребовать значительных вычислительных ресурсов. По мере того как среда обучения становится более сложной, растут и требования ко времени и вычислительным ресурсам. Именно эти проблемы специалистам в области обучения с подкреплением предстоит решить в ближайшем будущем.
В заключение
Обучение с подкреплением – это вычислительный подход к обучению на основе взаимодействий внутри среды.
Более того, Reinforcement Learning является передовой технологией, которая рано или поздно изменит наш мир. Это то, что делает машинное обучение творческим процессом, так как самостоятельный поиск машиной новых, инновационных способов решения задач уже является творчеством.
Внедрение Reinforcement Learning уже происходит: например, знаменитая AlphaGo DeepMind (алгоритм для игры в популярную азиатскую игру Go) использует игровую тактику, которую сначала считали ошибочной, но впоследствии машина обыграла одного из сильнейших игроков в Go, Lee Sedol . А продвинутая версия AlphaGo Zero всего за 40 дней самообучения превзошла AlphaGo DeepMind.
Таким образом, обучение с подкреплением уже является революционной технологией и, несомненно, будет следующим шагом в развитии индустрии искусственного интеллекта.
Привет, Хабр! Обучение с подкреплением является одним из самых перспективных направлений машинного обучения. С его помощью искусственный интеллект сегодня способен решать широчайший спектр задач: от робототехники и видеоигр до моделирования поведения покупателей и здравоохранения. В этой вводной статье мы изучим главную идею 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) действие будет случайным. Так будет обеспечен выбор всех возможных вариантов, что позволит нейросети «узнать» больше о каждом из них.
Совершив одно из действий, агент получает обратную связь от системы: 1 или -1 в зависимости от того, выиграл ли он. Это значение затем используется для расчета функции потерь:
A (advantage) — важный элемент всех алгоритмов обучения с подкреплением. Он показывает, насколько совершенное действие лучше, чем некий baseline. В дальнейшем мы будем использовать более сложный baseline, а пока примем его равным 0, то есть A будет просто равен награде за каждое действие (1 или -1). п — это правило поведения, вес нейросети, соответствующий ручке слот-машины, которую мы выбрали на текущем шаге.
Интуитивно понятно, что функция потерь должна принимать такие значения, чтобы веса действий, которые привели к выигрышу увеличивались, а те, которые привели к проигрышу, уменьшались. В результате веса будут обновляться, а агент будет все чаще и чаще выбирать игровой автомат с наибольшей фиксированной вероятностью выигрыша, пока, наконец, он не будет выбирать его всегда.
Реализация алгоритма
Бандиты. Сначала мы создадим наших бандитов (в быту игровой автомат называют бандитом). В нашем примере их будет 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 вы можете посмотреть тут. Увидимся в следующих статьях, где мы продолжим изучать обучение с подкреплением!
Обучение с подкреплением (RL далее ОП) относится к разновидности метода машинного обучения, при котором агент получает отложенное вознаграждение на следующем временном шаге, чтобы оценить свое предыдущее действие. Он в основном использовался в играх (например, Atari, Mario), с производительностью на уровне или даже превосходящей людей. В последнее время, когда алгоритм развивается в комбинации с нейронными сетями, он способен решать более сложные задачи.
В силу того, что существует большое количество алгоритмов ОП, не представляется возможным сравнить их все между собой. Поэтому в этой статье будут кратко рассмотрены лишь некоторые, хорошо известные алгоритмы.
1. Обучение с подкреплением
Типичное ОП состоит из двух компонентов, Агента и Окружения.
Окружение – это среда или объект, на который воздействует Агент (например игра), в то время как Агент представляет собой алгоритм ОП. Процесс начинается с того, что Окружение отправляет свое начальное состояние (state = s) Агенту, который затем, на основании своих значений, предпринимает действие (action = a ) в ответ на это состояние. После чего Окружение отправляет Агенту новое состояние (state’ = s’) и награду (reward = r) Агент обновит свои знания наградой, возвращенной окружением, за последнее действие и цикл повторится. Цикл повторяется до тех пор, пока Окружение не отправит признак конца эпизода.
Большинство алгоритмов ОП следуют этому шаблону. В следящем параграфе я кратко расскажу о некоторых терминах, используемых в ОП, чтобы облегчить наше обсуждение в следующем разделе.
Определения:
1. Action (A, a): все возможные команды, которые агент может передать в Окружение (среду)
2. State (S,s): текущее состояние возвращаемое Окружением
3. Rewrd (R,r): мгновенная награда возвращаемое Окружением, как оценка последнего действия
4. Policy (π ): Политика - стратегия, которую использует Агент, для определения следующего действия (a’) на основе текущего состояния среды.
5. Value (V) или Estimate (E) : ожидаемая итоговая (награда) со скидкой, в отличии от мгновенной награды R, является функцией политики Eπ(s) и определяется, как ожидаемая итоговая награда Политики в текущем состоянии s. (Встречается в литературе два варианта Value – значение, Estimate – оценка, что в контексте предпочтительней использовать E – оценка. Прим. переводчика)
6. Q-value (Q): оценка Q аналогична оценки V, за исключением того, что она принимает дополнительный параметр a (текущее действие). Qπ(s, a) является итоговой оценкой политики π от состояния s и действия a
* MCTS (Монте-Карло тайм степ модель), on-policy (алгоритм, где Агент включен в политику, т.е. обучается на основе действий, производных от текущей политики), off-policy (Агент обучается на основе действий, полученных от другой политики
Безмодельные алгоритмы против алгоритмов базирующихся на моделях
Модель предназначена для моделирования динамики Окружения. То есть модель изучает вероятность перехода T(s1|(s0, a)) из пары состояния S0 и действия a в следующее состояние S1 . Если эта вероятность успешно изучена, то Агент будет знать, насколько вероятно получить определённое состояние, если выполнить действие a в текущем состоянии. Однако алгоритмы, построенные на моделях, становятся непрактичными по мере роста пространства состояний и действий (S*S*A для табличного представления)
С другой стороны, безмодельные алгоритмы опираются на метод проб и ошибок для обновления своих знаний. В результате им не требуется место для хранения комбинаций состояние / действие и их оценок.
2. Разбор Алгоритмов
2.1. Q-learning
Q-learning это не связанный с политикой без модельный алгоритм ОП, основанный на хорошо известном уравнении Беллмана:
E в приведенном выше уравнении относится к математическому ожиданию, а - это коэффициент дисконтирования.
Мы можем переписать это уравнение в форме Q-value:
Оптимальное значение Q, обозначенное как Q*, может быть выражено как:
Цель состоит в том, чтобы максимизировать Q-значение. Прежде чем углубиться в метод оптимизации Q-value, я хотел бы обсудить два метода обновления значений, которые тесно связаны с Q-learning.
Итерация политики
Итерация политики представляет собой цикл между оценкой политики и ее улучшением.
Оценка политики оценивает значения функции V с помощью «жадной политики» полученной в результате последнего улучшения политики. С другой стороны, улучшение политики обновляет политику, генерирующую действия (action – a), что максимизирует значения V для каждого состояния (окружения). Уравнения обновления основаны на уравнении Беллмана. Итерации продолжаются до схождения.
Итерация Оценок (V)
Итерация оценок содержит только один компонент, который обновляет функцию оценки значений V, на основе Оптимального уравнения Беллмана.
После того, как итерация сходится, оптимальная политика напрямую выводится путем применения функции максимального аргумента для всех состояний.
Обратите внимание, что эти два метода требуют знания вероятности перехода p, что указывает на то, что это алгоритм на основе модели. Однако, как я упоминал ранее, алгоритм, основанный на модели, страдает проблемой масштабируемости. Так как же Q-Learning решает эту проблему?
Здесь a (альфа) скорость обучения (т.е. как быстро мы приближаемся к цели) Идея Q-learning во многом основана на итерациях оценок (v). Однако уравнение обновления заменяется приведенной выше формулой. В результате нам больше не нужно думать о вероятности перехода (p).
Обратите внимание, что следующее действие a’ выбирается для максимизации Q-значения следующих состояний вместо того, чтобы следовать текущей политике. В результате Q-learning относится к категории вне политики (off-Policy).
2.2. State-Action-Reward-State-Action (SARSA)
SARSA очень напоминает Q-learning. Ключевое отличие SARSA от Q-learning заключается в том, что это алгоритм с политикой (on-policy). Это означает, что SARSA оценивает значения Q на основе действий, выполняемых текущей политикой, а не жадной политикой.
Уравнения ниже показывают разницу между рассчетом значений Q
Где действие at+1 – это действие выполняемое в следующем состоянии st+1 в соответствии с текущей политикой.
Они выглядят в основном одинаково, за исключением того, что в Q- learning мы обновляем нашу Q-функцию, предполагая, что мы предпринимаем действие a, которое максимизирует нашу Q-функцию в следующем состоянии Q (st + 1, a).
В SARSA мы используем ту же политику (например, epsilon-greedy), которая сгенерировала предыдущее действие a, чтобы сгенерировать следующее действие, a + 1, которое мы запускаем через нашу Q-функцию для обновлений, Q (st + 1, at+1). (Вот почему алгоритм получил название SARSA, State-Action-Reward-State-Action).
Интуитивно понятно, что SARSA – это on-policy алгоритм , потому что мы используем одну и ту же политику для генерации текущего действия в точке и следующего действия в точке +1. Затем мы оцениваем выбранные действия нашей политики и улучшаем их, улучшая оценки Q-функции.
В Q-learning у нас нет ограничений на то, как выбирается следующее действие a, у нас есть только оптимистичный взгляд на то, что все последующие выборы действий a в каждом состоянии s будут оптимальными, поэтому мы выбираем действие a, чтобы максимизировать оценку Q (st+1, a). Это означает, что с помощью Q-learning мы можем генерировать данные политикой с любым поведением (обученной, необученной, случайной и даже плохой), при наличии достаточной выборки мы получим оптимальные значения Q
Из псевдокода выше вы можете заметить, что выполняется выбор двух действий, которые всегда соответствуют текущей политике. Напротив, Q-learning не имеет ограничений для следующего действия, пока оно максимизирует значение Q для следующего состояния. Следовательно, SARSA - это алгоритм, действующий в соответствии с политикой (on-policy).
2.3. Deep Q Network (DQN)
DQN использует нейронную сеть для оценки значений Q-функции. На вход сети подаются текущие кадры игрового поля, а выходом - соответствующее значение Q для каждого возможного действия.
Вопрос сводится к следующему: как мы обучаем сеть?
Ответ заключается в том, что мы обучаем сеть на основе уравнения обновления Q-learning. Напомним, что целевое значение Q для Q-learning:
φ эквивалентно состоянию s, в то время как θ обозначает параметры в нейронной сети, что не входит в область нашего обсуждения. Таким образом, функция потерь для сети определяется как квадрат ошибки между целевым значением Q и выходным значением Q из сети.
Еще два метода также важны для обучения DQN:
1. Воспроизведение опыта: поскольку обучающие батчи в типичной настройке ОП(RL) сильно коррелированы и менее эффективны для обработки данных, это приведет к более сложной конвергенции для сети. Одним из способов решения проблемы выборки батчей является воспроизведение опыта. По сути, батчи переходов сохраняются, а затем случайным образом выбираются из «пула переходов» для обновления знаний.
2. Отдельная целевая сеть: целевая сеть Q имеет ту же структуру, что и сеть, которая оценивает значение. Каждый шаг C, в соответствии с приведенным выше псевдокодом, целевая сеть принимает значения основной сети. Таким образом, колебания становятся менее сильными, что приводит к более стабильным тренировкам.
2.4. Deep Deterministic Policy Gradient (DDPG)
Хотя DQN добилась огромных успехов в задачах более высокой размерности, таких как игра Atari, пространство действий по-прежнему остается дискретным. Однако для многих задач, представляющих интерес, особенно для задач физического контроля, пространство действий непрерывно. Если вы слишком дискретизируете пространство действия, вы получите слишком большой объем. Например, предположим, что степень свободной случайной системы равна 10. Для каждой степени вы делите пространство на 4 части. У вас будет 4¹⁰ = 1048576 действий. Чрезвычайно сложно получить схождение для такого большого пространства действий, а это еще не предел.
DDPG реализует архитектуру «актор-критик» с двумя одноименными элементами - актором и критиком. Актор используется для настройки параметра ? функции политики, то есть для определения наилучшего действия для определенного состояния.
Критик используется для оценки функции политики Актора в соответствии с ошибкой временной разницы (TD)
Здесь u обозначает политику Актора. Знакомо? Да! Это похоже на уравнение обновления Q-learning. TD-learning – это способ научиться предсказывать значение в зависимости от будущих значений данного состояния. Q-learning это особый тип TD-learning для получения Q значений
DDPG также заимствует идеи воспроизведения опыта и отдельной целевой сети от DQN. Другой проблемой для DDPG является то, что он редко выполняет поиск действий. Решением для этого является добавление шума в пространство параметров или пространство действий (action).
Слева шум добавлен к действиям, справа к параметрам
Утверждается, что добавление шума в пространство параметров лучше, чем в пространство действий, согласно статье написанной на OpenAI.
Читайте также: