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

Возьмем пример приведенной ниже среды «мира сетки»: в ней есть «агент», расположенный в самой нижней левой ячейке, и есть 11 состояний (исключая серое), в которых может присутствовать агент. Есть два терминальных состояния — «+1» и «-1», и от агента требуется найти кратчайший путь к «+1». Агент может выполнять «4» действия в каждом состоянии (где это возможно), например «влево», «вправо», «вверх» и «вниз».

В этом случае QTable помогает агенту предпринять наилучшее действие в каждом из состояний, указав «возврат», полученный для каждого из действий в каждом из состояний, как показано ниже:

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

Но когда количество состояний и пространство действий велико, то вычисление такой таблицы и рассмотрение многочисленных комбинаций пар «состояние-действие» было бы слишком затратным. В этом случае алгоритм QLearning помогает построить эквивалентную аппроксимационную функцию с помощью алгоритмов ML/DL. Разбираемся, как это делается.

Определение проблемы

Прежде чем перейти к части моделирования, давайте определим проблему, которую мы будем здесь решать. Cartpole, также известный как перевернутый маятник, является самой фундаментальной проблемой RL, и вы можете найти более подробную информацию о проблеме здесь.

Определим ключевые компоненты проблемы и их формы:

Окружающая среда: игра Cartpole, в которой агент должен балансировать на шесте как можно дольше.

Состояния: набор из 4 значений, связанных с шестом [скорость тележки, положение тележки, угол шеста, скорость шеста].

Действия: действия, которые может выполнить агент. Это размер 2, которые [слева, справа].

Награды: 1, если игра продолжается (когда шест стоит), в противном случае 0.

Обратите внимание, что для простоты эта статья была написана с использованием карттона в качестве среды. Но эта концепция применима к любой проблеме RL на основе MDP. В приведенных ниже расчетах вы можете заменить измерения входных и выходных значений значениями измерений «состояние» и отсутствием действий соответствующей среды.

Какие советы дают известные компании студентам и стартапам? Мы попросили их! Прочитайте или посмотрите наши отраслевые вопросы и ответы, чтобы получить советы от команд из Стэнфорда, Google и HuggingFace.

Оффлайн RL и обучающие данные:

Проблемы RL могут быть определены либо как онлайн RL, когда агент учится на работе и требует миллионов испытаний для выполнения в смоделированной среде, либо как проблема автономного RL, когда данные об опыте могут использоваться для обучения агента. автономный/пакетный режим, чтобы подготовить их к развертыванию. Подробнее об Offline RL можно прочитать в этой статье Google.

Что касается проблемы с тележкой, существуют способы сбора тренировочных данных с использованием концепции «воспроизведения опыта», и после захвата данные будут выглядеть следующим образом:

Как видите, обучающие данные — это не что иное, как исторические данные «состояний», которые мы определили выше, которые имеют 4 параметра. Это действует как вход. Кроме того, как определено выше, у нас есть два действия [влево, вправо], и наш агент должен выбрать одно из них.

Итак, форма входных данных (состояние) — [1x4], а выходных данных (действий) — [2x1].

Предсказать функцию:

Это самая важная функция, где фактически происходит обучение.

Давайте построим простую линейную функцию вида ‘Wx+b’.

Где «W» — весовая матрица размера [4x2], а «b» — вектор смещения формы [2x1].

У нас будет матрица «веса» и вектор «смещения», инициализированные случайными значениями в начале обучения. Функция прогнозирования примет параметр входных данных (значение состояния), а затем давайте вычислим, какой будет выходная форма:

fun_predict(input_state) → X.W+b → [1x4].[4x2] + [2] → [1x2]

Как видите, функция прогнозирования основана на весах, и с каждой записью значения матрицы «веса» и вектора «смещения» будут обновляться, и именно так происходит обучение (аналогично классическому обучению ML).

Но для обновления весов нам нужны целевые значения для сравнения прогнозируемого значения и определения потерь с использованием метода стохастического градиентного спуска (SGD). Давайте посмотрим, как вычисляются целевые значения в задачах RL.

Как рассчитываются вознаграждения

Прежде чем перейти к «целевым» значениям, нам нужно увидеть, как агент получает вознаграждение за свои действия. «Награды» необходимы для расчета «цели» в соответствии с формулой QLearning.

QLearning — это задача, основанная на эпсилон-жадности, и награды определяются следующим образом:

→ Определите случайную переменную и значение эпсилон.

→ Найдите случайное значение и, когда его значение меньше эпсилон, случайным образом выберите одно из действий (левое или правое).

→ Если случайное значение больше эпсилон, вызовите функцию «предсказать» с одной строкой входных данных.

→ Как определено выше, функция «предсказать» вычисляет выходной вектор с начальными значениями весов и возвращает значение формы [1x2].

→ Определите argmax выходного вектора, и соответствующий индекс служит действием для этого шага.

→ Примените это действие к окружающей среде и посмотрите, стоит ли еще тележка. Если да, то награда равна 1, иначе награда равна 0.

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

Целевое значение

Сделайте глубокий вдох… вы находитесь в последнем разделе, и мы собираемся выяснить, как модель обучается и как обновляются значения веса.

Формула Qlearning для «целевого» значения выглядит следующим образом:

Где «r» — вознаграждение, гамма — коэффициент дисконтирования, s — следующее состояние, а — наиболее оптимальное действие в следующем состоянии.

Давайте проверим, есть ли у нас все вышеперечисленные значения. У нас есть «вознаграждение» и «следующее состояние» (как рассчитано в предыдущем разделе), гамма — это гиперпараметр, и у нас есть функция «прогнозирования», основанная на весе, которая равна Q (s, a).

Итак, передайте значение next_state, вычисленное на предыдущем шаге, для прогнозирования функции. Это даст вам выходной вектор формы [1x2] и получит максимальное значение из вектора. Вычислите значение target_index по приведенной выше формуле.

Теперь вызовите функцию прогнозирования с «input_data» (current_state), и она даст вам выходной вектор формы [1x2]. Замените значение, присутствующее в индексе «выбранного действия», на вычисленное значение «target_index».

Приведенное выше значение будет фактическим целевым значением Y.

Обучение на основе SGD

Теперь давайте вычислим Y_hat и применим SGD для оптимизации весов.

Передайте входные данные в функцию «предсказать», и результат, который она сгенерирует, будет нашим значением Y_hat. Итак, у нас есть Y, Y_hat и X (входные данные) — теперь все готово для применения SGD по приведенным ниже формулам:

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

Вывод:

Как описано выше, значения Y и Y_hat вычисляются и передаются модели для обучения. В этой статье мы использовали «линейную регрессию» в качестве модели для простоты объяснения. У нас также может быть модель на основе глубокой нейронной сети (DNN), и концепции остаются прежними. Когда мы используем модель на основе DNN, сеть QLearning называется «Глубокое Q-обучение» (DQL).

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

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.