Введение

Одним из моих любимых алгоритмов, которые я изучил во время прохождения курса обучения с подкреплением, было q-learning. Наверное, потому, что мне было легче всего понять и кодировать, но также потому, что это казалось логичным. В этом кратком посте я расскажу о q-Learning и предоставлю базовую основу для понимания алгоритма.

Что такое q-Learning?

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

Что такое "Q"?

Буква «q» в q-learning означает качество. Качество в этом случае показывает, насколько полезно данное действие для получения некоторой будущей награды.

Создайте q-таблицу

Когда выполняется q-обучение, мы создаем так называемую q-таблицу или матрицу, которая повторяет форму [state, action], и инициализируем наши значения равными нулю. Затем мы обновляем и сохраняем наши q-значения после выпуска. Эта q-таблица становится справочной таблицей для нашего агента, чтобы выбрать лучшее действие на основе q-значения.

import numpy as np
# Initialize q-table values to 0
Q = np.zeros((state_size, action_size))

Q-обучение и обновление

Следующим шагом является взаимодействие агента со средой и внесение обновлений в пары действий состояния в нашей q-таблице Q[state, action].

Действия: исследуйте или используйте

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

Второй способ действовать - действовать случайным образом. Это называется исследованием. Вместо того, чтобы выбирать действия на основе максимальной будущей награды, мы выбираем действие случайным образом. Случайное действие важно, поскольку оно позволяет агенту исследовать и обнаруживать новые состояния, которые в противном случае нельзя было бы выбрать в процессе эксплуатации. Вы можете сбалансировать исследование / эксплуатацию, используя epsilon (ε) и задав значение того, как часто вы хотите исследовать и использовать. Вот примерный код, который будет зависеть от того, как настроено состояние и пространство действий.

import random
# Set the percent you want to explore
epsilon = 0.2
if random.uniform(0, 1) < epsilon:
    """
    Explore: select a random action
    """
else:
    """
    Exploit: select the action with max value (future reward)
    """

Обновление q-таблицы

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

Вот 3 основных шага:

  1. Агент запускается в состоянии (s1), выполняет действие (a1) и получает вознаграждение (r1)
  2. Агент выбирает действие, ссылаясь на Q-таблицу с наибольшим значением (макс.) ИЛИ случайным образом (эпсилон, ε)
  3. Обновить q-значения

Вот основное правило обновления для q-Learning:

# Update q values
Q[state, action] = Q[state, action] + lr * (reward + gamma * np.max(Q[new_state, :]) — Q[state, action])

В приведенном выше обновлении есть пара переменных, которые мы еще не упомянули. Что здесь происходит, так это то, что мы корректируем наши q-значения на основе разницы между дисконтированными новыми значениями и старыми значениями. Мы дисконтируем новые значения, используя гамму, и корректируем размер нашего шага, используя скорость обучения (lr). Ниже приведены некоторые ссылки.

Скорость обучения: lr или скорость обучения, часто называемая альфа или α, может быть просто определена как то, насколько вы принимаете новое значение по сравнению с старое значение. Выше мы берем разницу между новым и старым, а затем умножаем это значение на скорость обучения. Затем это значение добавляется к нашему предыдущему значению q, что существенно перемещает его в направлении нашего последнего обновления.

Гамма: gamma или γ - коэффициент скидки. Он используется для уравновешивания немедленной и будущей награды. Из нашего правила обновления выше видно, что мы применяем скидку к будущему вознаграждению. Обычно это значение может находиться в диапазоне от 0,8 до 0,99.

Награда: reward - это значение, полученное после выполнения определенного действия в определенном состоянии. Вознаграждение может произойти на любом заданном временном шаге или только на конечном временном шаге.

Макс: np.max() использует библиотеку numpy и берет максимум будущего вознаграждения и применяет его к вознаграждению за текущее состояние. Это влияет на текущее действие за счет возможной будущей награды. В этом прелесть q-Learning. Мы назначаем будущую награду текущим действиям, чтобы помочь агенту выбрать действие с максимальной отдачей в любом заданном состоянии.

Заключение

Ну вот и все, коротко и мило (надеюсь). Мы обсуждали, что q-Learning - это алгоритм обучения с подкреплением вне политики. Мы показываем базовое правило обновления для q-обучения, используя некоторый базовый синтаксис Python, и мы рассмотрели необходимые входные данные для алгоритма. Мы узнали, что q-Learning использует будущие вознаграждения, чтобы влиять на текущее действие с учетом состояния и, следовательно, помогает агенту выбрать лучшие действия, которые максимизируют общее вознаграждение.

О Q-обучении можно узнать гораздо больше, но, надеюсь, этого будет достаточно, чтобы вы начали и были заинтересованы в получении дополнительной информации. Ниже я добавил несколько ресурсов, которые мне показались полезными при изучении q-Learning. Наслаждаться!

Ресурсы

  1. Отличный пример RL и q-Learning в среде OpenAI Gym taxi
  2. Обучение с подкреплением: Введение (бесплатная книга Саттона)
  3. Quora Q-обучение
  4. Википедия Q-обучение
  5. Лекции Дэвида Сильвера о RL