Введение
Одним из моих любимых алгоритмов, который я изучил во время прохождения курса обучения с подкреплением, было q-обучение. Вероятно, потому, что мне было проще всего это понять и написать код, а также потому, что это казалось логичным. В этом кратком посте я расскажу о q-обучении и предоставлю базовую информацию для понимания алгоритма.
Что такое q-обучение?
Q-обучение — это алгоритм обучения с подкреплением вне политики, который стремится найти наилучшее действие для выполнения с учетом текущего состояния. Это считается нарушением политики, потому что функция q-обучения учится на действиях, выходящих за рамки текущей политики, таких как выполнение случайных действий, и поэтому политика не требуется. В частности, q-обучение направлено на изучение политики, которая максимизирует общее вознаграждение.
Что такое «Кью»?
«q» в q-learning означает качество. Качество в данном случае показывает, насколько полезно данное действие для получения вознаграждения в будущем.
Создайте q-таблицу
Когда выполняется q-обучение, мы создаем то, что называется q-таблица или матрица, которая соответствует форме [состояние, действие], и мы инициализируем наши значения нулем. Затем мы обновляем и сохраняем наши q-значения после эпизода. Эта q-таблица становится справочной таблицей для нашего агента, чтобы выбрать наилучшее действие на основе q-значения.
импортировать numpy как np# Инициализировать значения q-таблицы равными 0Q = np.zeros((state_size, action_size))
Q-обучение и внесение обновлений
Следующим шагом является взаимодействие агента со средой и обновление пар состояний и действий в нашей q-таблице Q[state, action] .
Примите меры: исследуйте или используйте
Агент взаимодействует с окружающей средой одним из двух способов. Первый — использовать q-таблицу в качестве справочной и просматривать все возможные действия для данного состояния. Затем агент выбирает действие на основе максимального значения этих действий.Это известно как эксплуатация поскольку мы используем имеющуюся у нас информацию для принятия решения.
Второй способ действовать — действовать наобум. Это называется изучение. Вместо того, чтобы выбирать действия на основе максимальной будущей награды, мы выбираем действие случайным образом. Случайные действия важны, потому что они позволяют агенту исследовать и обнаруживать новые состояния, которые в противном случае не могут быть выбраны в процессе эксплуатации. Вы можете сбалансировать разведку/эксплуатацию, используя epsilon (ε) и установите значение того, как часто вы хотите исследовать или использовать. Вот примерный код, который будет зависеть от того, как настроены состояние и пространство действий.
импортировать случайный# Установите процент, который вы хотите исследовать
эпсилон = 0,2если random.uniform(0, 1) < эпсилон:
"""
Исследуйте: выберите случайное действие """
еще:
"""
Эксплойт: выберите действие с максимальным значением (будущая награда) """
Обновление q-таблицы
Обновления происходят после каждого шага или действия и заканчиваются после завершения эпизода. Done в данном случае означает достижение агентом некоторой конечной точки. Например, конечным состоянием может быть что угодно, например, приземление на странице оформления заказа, достижение конца какой-либо игры, выполнение какой-либо желаемой цели и т. д. Агент мало что узнает после одного эпизода, но в конечном итоге после достаточного изучения (шагов и эпизодов) он сойдется и выучит оптимальные q-значения или q-звезду (Q∗).
Вот 3 основных шага:
- Агент начинает в состоянии (s1), выполняет действие (a1) и получает вознаграждение (r1).
- Агент выбирает действие, ссылаясь на Q-таблицу с наибольшим значением (макс.) ИЛИ ЖЕ случайным образом (эпсилон, ε)
- Обновить q-значения
Вот основное правило обновления для q-learning:
# Обновить значения qQ[состояние, действие] = Q[состояние, действие] + lr * (награда + гамма * np.max(Q[новое_состояние, :]) — Q[состояние, действие])
В приведенном выше обновлении есть пара переменных, которые мы еще не упомянули. Здесь происходит то, что мы корректируем наши значения q на основе разницы между дисконтированными новыми значениями и старыми значениями.Мы дисконтируем новые значения, используя гамму, и корректируем размер шага, используя скорость обучения (lr). Ниже приведены некоторые ссылки.
Скорость обучения: lr или скорость обучения, часто называемая альфа или α, можно просто определить как то, насколько вы принимаете новое значение по сравнению со старым значением. Выше мы берем разницу между новым и старым, а затем умножаем это значение на скорость обучения. Затем это значение добавляется к нашему предыдущему значению q, что существенно перемещает его в направлении нашего последнего обновления.
Гамма: гамма или γ является дисконтным фактором. Он используется, чтобы сбалансировать немедленное и будущее вознаграждение. Из нашего правила обновления выше видно, что мы применяем скидку к будущему вознаграждению. Обычно это значение может варьироваться от 0,8 до 0,99.
Награда: вознаграждение — это ценность, полученная после выполнения определенного действия в данном состоянии. Вознаграждение может произойти на любом заданном временном шаге или только на конечном временном шаге.
Максимум: np.max() использует библиотеку numpy и берет максимум будущего вознаграждения и применяет его к вознаграждению за текущее состояние. Это влияет на текущее действие возможной будущей наградой. В этом прелесть q-обучения. Мы распределяем будущее вознаграждение за текущие действия, чтобы помочь агенту выбрать действие с наибольшей отдачей в любом заданном состоянии.
Вывод
Ну вот и все, коротко и ясно (надеюсь). Мы обсудили, что q-обучение — это алгоритм обучения с подкреплением вне политики. Мы показываем базовое правило обновления для q-обучения, используя некоторый базовый синтаксис Python, и мы рассмотрели необходимые входные данные для алгоритма. Мы узнали, что q-обучение использует будущие вознаграждения, чтобы влиять на текущее действие при заданном состоянии, и поэтому помогает агенту выбирать лучшие действия, которые максимизируют общее вознаграждение.
Существует гораздо больше информации о q-обучении, но, надеюсь, этого достаточно, чтобы вы начали и заинтересовались изучением большего. Ниже я добавил несколько ресурсов, которые я нашел полезными при изучении q-learning. Наслаждаться!
Ресурсы
- Отличный пример обучения RL и Q с использованием среды такси OpenAI Gym
- Обучение с подкреплением: введение (бесплатная книга Саттона)
- Quora Q-обучение
- Википедия Q-обучение
- Лекции Дэвида Сильвера по RL