Обучение с подкреплением с помощью агентов Tensorflow [2022]

Опубликовано: 2021-01-01

Обучение с подкреплением приобрело ценную популярность благодаря относительно недавнему успеху метода AlphaGo от DeepMind, который обыграл чемпиона мира по игре в го. Метод AlphaGo был частично основан на обучении с подкреплением в глубоких нейронных сетях.

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

Этот метод помогает сети научиться играть в спортивные игры, такие как Atari или другие видеоигры, или в какие-то другие задачи, которые можно переписать как форму игры. В этом уроке, общей модели обучения с подкреплением, я представлю общие принципы обучения Q и покажу, как включить глубокое обучение Q в TensorFlow.

Оглавление

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

Как упоминалось выше, обучение с подкреплением состоит из нескольких основных сущностей или принципов. Это: среда, создающая условие и вознаграждение, и сущность, выполняющая действия в данной среде. На диаграмме ниже вы видите это взаимодействие:

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

Для успешной работы агенту необходимо:

1. Изучите связь между состояниями, поведением и результирующими стимулами

2. Определите, какой ход лучше всего выбрать (1)

Реализация (1) требует определения определенного набора принципов, которые можно использовать для уведомления (2), а (2) называется стратегией работы. Одним из наиболее распространенных методов применения (1) и (2) с использованием глубокого Q является сеть Deep Q и политика эпсилон-жадности.

Узнайте: 5 самых популярных проектов TensorFlow для начинающих

Q обучение

Q-обучение — это основанный на ценности способ предоставления данных, чтобы определить, какое действие может предпринять агент. Создание таблицы, суммирующей преимущества выполнения действий в течение нескольких игр в одном штате, является изначально интуитивной концепцией создания принципов, на которых основываются действия. Это позволит отслеживать наиболее выгодные движения. Для начала давайте рассмотрим простую игру в каждом состоянии с 3 состояниями и двумя потенциальными действиями — таблица может представлять награды за эту игру:

Действие 1 Действие 2
Состояние 1 0 10
Состояние 2 10 0
Состояние 3 0 10

Вы можете видеть в таблице выше, что для этой простой игры, когда агент находится в состоянии 1 и выполняет действие 2, если он выполняет действие 1, он получит вознаграждение в размере 10, но нулевое вознаграждение. В Состоянии 2 условие меняется на противоположное, и Состояние 3 в конечном итоге напоминает Состояние 1. Если агент произвольно исследовал эту игру и подсчитал поведение, получившее наибольшее вознаграждение в любом из трех состояний (скажем, сохраняя это знание в массиве), так что практическая форма приведенной выше таблицы будет фактически известна.

Другими словами, если бы агент действительно выбрал поведение, которому он научился в прошлом и которое обеспечило наивысшую награду (эффективное изучение некоторой формы таблицы выше), он научился бы эффективно играть в игру. Когда уместно просто строить таблицы путем суммирования, зачем нужны причудливые идеи, такие как Q-обучение, а затем нейронные сети?

Отложенное вознаграждение

Ну, первый очевидный ответ заключается в том, что приведенная выше игра просто очень проста, всего с 3 состояниями и 2 действиями в каждом состоянии. Настоящие игры значительно сложнее. Принцип отсроченного вознаграждения в приведенном выше случае является другим важным понятием, которое отсутствует. Агент должен научиться предпринимать шаги, чтобы правильно играть в самые реалистичные игры, что не обязательно приведет к вознаграждению, но может привести к значительному вознаграждению в будущем.

Действие 1 Действие 2
Состояние 1 0 5
Состояние 2 0 5
Состояние 3 0 5
Состояние 4 20 0

Если действие 2 выполняется во всех состояниях вышеупомянутой игры, агент возвращается в состояние 1, т. е. возвращается к началу. В состояниях с 1 по 3 ему даже присваивается 5 баллов. Таким образом, если действие 1 выполняется во всех состояниях 1-3, агент должен отправиться в следующее состояние, но не получит вознаграждение до тех пор, пока не войдет в состояние 4, после чего он получит вознаграждение в размере 20.

Другими словами, агенту будет лучше, если он не будет выполнять Действие 2, чтобы получить мгновенное вознаграждение в размере 5, а вместо этого он может выбрать Действие 1, чтобы непрерывно проходить через состояния, чтобы получить вознаграждение в размере 20. Агент хочет иметь возможность выбирать действия, которые приводят к отложенному вознаграждению, когда значение отложенного вознаграждения слишком велико.

Читайте также: Классификация изображений Tensorflow

Правило обучения Q

Это побуждает нас уточнить правила обучения Q. При глубоком обучении Q нейронная сеть должна принять текущее состояние s в качестве вектора и вернуть значение Q для каждого потенциального поведения a в этом состоянии, т.е. необходимо вернуть Q(s, a) для обоих с и а. Этот Q(s, a) необходимо пересматривать в процессе обучения по следующему правилу:

Q(s,a) = Q(s,a) + alp[r+γmax Q(s',a') - Q(s,a)] + alp[r+ γmax Q(s',a')

Этот закон нуждается в небольшой распаковке для обновления. Во-вторых, вы можете видеть, что новое значение Q(s, a) требует изменения его существующего значения путем вставки дополнительных битов в правую часть приведенного выше уравнения. Переключитесь слева направо. Забудьте об альфе на время. Внутри квадратных скобок мы видим первое слово — r, которое обозначает награду, полученную за действия в штатах.

Это мгновенная награда; отсроченное удовлетворение еще не задействовано. Следующее слово – оценка отложенного стимула. Во-первых, у нас есть значение γ, которое не учитывает эффект отложенного вознаграждения, которое всегда находится в диапазоне от 0 до 1. Подробнее об этом чуть позже. Следующий член maxa'Q(s, 'a') представляет собой максимальное значение Q, доступное в следующем условии.

Давайте немного упростим ситуацию: агент начинает в состояниях, выполняет действие a, заканчивает в состояниях, а затем код определяет максимальное значение Q в состояниях, т. е. max a 'Q(s',a'). Почему тогда принимается во внимание смысл Max a 'Q(s',a')? Если он вступает в силу и находится в состоянии s, известно, что он представляет собой полное возможное вознаграждение, поступающее обработчику.

Однако γ дисконтирует это значение, чтобы принять во внимание, что ожидание возможного стимула вечно нежелательно для агента — для агента лучше нацелиться на самый большой приз с наименьшим количеством времени. Обратите внимание, что значение Q(s',a)' также неявно сохраняет самый высокий дисконтированный стимул для экономики после этого, т. е. Q(s',a)', потому что оно поддерживает дисконтированную мотивацию для состояния Q(s',a) ' и так далее.

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

Глубокое Q-обучение

Глубокое обучение Q следует закону обновления обучения Q на протяжении всей фазы обучения. Другими словами, создается нейронная сеть, которая принимает состояние s в качестве входных данных, а затем сеть обучается выдавать соответствующие значения Q(s, a) для каждого поведения в состоянии s. Затем действие агента будет выбрано путем выполнения действия с наибольшим значением Q(s, a) (взяв argmax из выходных данных нейронной сети). Это видно на первом шаге диаграммы ниже:

Выбор действия и этапы обучения — глубокое обучение Q

Как только эта передача будет выполнена и действие будет выбрано, агент выполнит действие. Затем агент получит обратную связь о том, какой стимул дается для выполнения действия из этого состояния. В соответствии с Q Learning Guideline, следующим шагом, который мы хотим сделать сейчас, является обучение сети. Во второй части это видно на схеме выше.

Вектор состояния s — это входной массив x для обучения сети, а выходная обучающая выборка y — это вектор Q(s, a), собранный в процессе выбора действия. Однако одно из значений Q(s,a), соответствующее действию a, должно иметь цель r+γQ(s',a'), как видно на рисунке выше. Обучая сеть таким образом, чтобы сообщать агенту, какое поведение лучше всего выбрать для его долгосрочной выгоды, выходной вектор Q(s, a) из сети со временем станет сильнее.

Плюсы обучения с подкреплением:

  • Обучение с подкреплением можно использовать для решения очень сложных задач, которые невозможно решить с помощью традиционных подходов.
  • Эта стратегия выбрана для получения долгосрочных результатов, которых очень трудно достичь.
  • Этот образец обучения чем-то похож на обучение людей. Следовательно, он близок к совершенству.
  • Модель исправит ошибки, допущенные на этапе тестирования.
  • Если ошибка исправлена ​​моделью, шансы возникновения той же ошибки несколько ниже.
  • Это создаст наилучшую парадигму для решения конкретной проблемы.

Минусы обучения с подкреплением

  • Обучение с подкреплением как схема неверна во многих отношениях, но именно это качество делает его полезным.
  • Слишком интенсивное обучение с подкреплением может привести к перегрузке состояний, что может снизить результаты.
  • Обучение с подкреплением не предпочтительнее использования для решения фундаментальных проблем.
  • Обучение с подкреплением требует большого интеллекта и большого количества вычислений. Это жажда данных. Вот почему он так хорошо подходит для видеоигр, так что вы можете играть в игру снова и снова, и кажется возможным получить много деталей.
  • Обучение с подкреплением предполагает, что вселенная является марковской, а это не так. Марковская модель описывает последовательность возможных событий, в которой вероятность каждого события зависит только от условия, достигнутого в предыдущем событии.

Что дальше?

Если вы хотите освоить машинное обучение и узнать, как обучить агента играть в крестики-нолики, обучить чат-бота и т. д., ознакомьтесь с курсом UpGrad по машинному обучению и искусственному интеллекту PG Diploma.

Что такое ТензорФлоу?

Python, язык программирования, широко используемый в машинном обучении, поставляется с обширной библиотекой функций. TensorFlow — одна из таких библиотек Python, запущенная Google, которая поддерживает быстрые и эффективные числовые вычисления. Это библиотека с открытым исходным кодом, созданная и поддерживаемая Google, которая широко используется для разработки моделей глубокого обучения. TensorFlow также используется вместе с другими библиотеками-оболочками для упрощения процесса. В отличие от некоторых других числовых библиотек, которые также используются в глубоком обучении, TensorFlow был разработан как для исследований и разработки приложений, так и для функций производственной среды. Он может выполняться на машинах с одним процессором, мобильных устройствах и распределенных компьютерных системах.

Какие есть другие библиотеки, подобные TensorFlow, в машинном обучении?

Раньше инженеры по машинному обучению писали весь код для различных алгоритмов машинного обучения вручную. Теперь написание каждый раз одних и тех же строк кода для одинаковых алгоритмов, статистических и математических моделей было не только трудоемким, но и неэффективным и утомительным. В качестве обходного пути были введены библиотеки Python для повторного использования функций и экономии времени. Коллекция библиотек Python обширна и универсальна. Некоторыми из наиболее часто используемых библиотек Python являются Theano, Numpy, Scipy, Pandas, Matplotlib, PyTorch, Keras и Scikit-learn, кроме TensorFlow. Библиотеки Python также легко совместимы с библиотеками C/C++.

Каковы преимущества использования TensorFlow?

Множество преимуществ TensorFlow делают его чрезвычайно популярным вариантом для разработки вычислительных моделей в области глубокого и машинного обучения. Во-первых, это платформа с открытым исходным кодом, поддерживающая расширенные форматы визуализации данных с графическим представлением. Программисты также могут легко использовать его для отладки узлов, что экономит время и избавляет от необходимости проверять всю длину кода нейронной сети. TensorFlow поддерживает все виды операций, и разработчики могут создавать модели или системы любого типа на этой платформе. Он легко совместим с другими языками программирования, такими как Ruby, C++ и Swift.