Простое руководство по Q-обучению
Q-обучение - это блестящий и фундаментальный метод обучения с подкреплением, который в последнее время добился большого успеха благодаря революции глубокого обучения. Хотя это руководство не объясняет то, что известно как глубокое Q-обучение, мы рассмотрим исходный алгоритм Q-обучения, чтобы научить агента играть в крестики-нолики. Несмотря на его простоту, мы увидим, что он может давать очень хорошие результаты.
Сначала мы рассмотрим некоторые необходимые базовые знания, чтобы получить быстрый обзор обучения с подкреплением, затем представим алгоритм Q-обучения и, наконец, как его реализовать, чтобы научить агента играть в крестики-нолики.
Чтобы понять это руководство, необязательно иметь какие-либо предыдущие знания об обучении с подкреплением, но это поможет получить базовые знания в области исчисления и линейной алгебры. Наконец, я делюсь своим собственным репозиторием Github, где у меня есть вещи, которые я объясняю, которые вы можете бесплатно проверить, нажмите здесь, если вам интересно.
Обзор обучения с подкреплением
Цель обучения с подкреплением - оптимизировать поведение агента в соответствии с некоторой функцией вознаграждения, когда он действует в среде с разными состояниями. В этом уроке среда представляет собой игру в крестики-нолики, в которой четко определены действия, и агент должен решить, какие действия выбрать, чтобы выиграть игру. Более того, агент получит вознаграждение за победу в игре, что побудит его изучить хорошие стратегии в игре.
Распространенной структурой для обучения с подкреплением является (конечный) Марковский процесс принятия решений (MDP). Это помогает нам определить набор действий и состояний, на которых основывается принятие решения агентом.
MDP состоит из
- Конечный набор действий A (положение для размещения отметки на игровом поле)
- Конечный набор состояний S (заданная конфигурация игрового поля)
- Функция вознаграждения R (s, a), которая возвращает значение, основанное на выполнении действия a в состоянии s.
- Функция перехода T (s, a, s ’)
Функция перехода дает вероятность перехода из состояния s в s ' при выполнении действия а. Это необходимо, когда мы находимся в среде, где есть неуверенность в том, всегда ли действие приводит к желаемому результату. Однако в случае с крестиками-ноликами мы точно знаем, что будет делать каждое действие, поэтому мы не будем использовать это.
Структура MDP помогает нам формализовать проблему, чтобы мы могли определить, какие действия, в зависимости от текущего состояния, максимизируют общее вознаграждение агента во время игры. Функция вознаграждения R (s, a) будет очень простой:
- Если агент выполняет действие â, которое выигрывает игру у s, то R (s, â) = 1.
- В противном случае, если агент совершит ошибку и выберет неправильное действие ã и проиграет игру, тогда R (s, ã) = -1 .
- В противном случае, когда ничего из вышеперечисленного не происходит, вознаграждение будет просто R (s, a) = 0.
При обучении с подкреплением мы находим оптимальную политику, которую агент использует, чтобы решить, какие действия выбрать. Поскольку мы используем Q-обучение, мы просто обозначим нашу политику как действие a, которое максимизирует функцию Q (s, a) , когда агент находится в состоянии s. Это суть Q-обучения, поэтому давайте посмотрим, как мы будем вычислять эту функцию.
Обновление с помощью уравнения Беллмана
Интерпретация Q (s, a) заключается в том, что Q - это ожидаемая награда, предоставляемая в конце игра, если агент выбирает действие a в состоянии s. Поскольку агент хочет максимизировать свое вознаграждение, он хочет выбрать действие, которое максимизирует Q.
Чтобы вычислить Q (s, a), агент должен исследовать все возможные пары состояний и действий, получая обратную связь от функции вознаграждения R ( с, а). В случае крестиков-ноликов мы обновляем Q (s, a) итеративно, позволяя агенту сыграть много игр против оппонента. В алгоритме Q-обучения уравнение, используемое для обновления Q, выглядит следующим образом:
- Выполняем действие a в текущем состоянии s.
- Последний член смотрит в будущее и возвращает наибольшее доступное значение Q, ŝ - это состояние, при котором - это новое состояние после выполнения действия a. Тогда действие â является лучшим действием в следующем состоянии ŝ.
- Скорость обучения α определяет, в какой степени мы перезаписываем старое значение, мы будем использовать α = 0,1.
- Коэффициент скидки γ определяет, сколько будущих вознаграждений следует взвешивать по сравнению с вознаграждениями, которые присутствуют на текущем временном шаге t. Мы будем использовать γ = 0,9.
Это уравнение основано на хорошо известном уравнении обучения с подкреплением, которое называется уравнением Беллмана . Давайте посмотрим, как использовать это уравнение, чтобы научить нашего агента.
Реализация алгоритма Q-обучения
Чтобы получить обученного агента, нам нужно узнать значения Q (s, a). Это будет сделано, позволив двум агентам играть друг против друга. Мы введем вероятность ε того, что каждый агент выберет случайное действие, в противном случае он выберет лучшее действие в соответствии с Q (s, a). Таким образом , мы гарантируем сбалансировать обучение таким образом, чтобы что агенты иногда исследуют новые действия, а иногда используют информацию, которую агент уже изучил.
Этот этап обучения можно описать следующим псевдокодом алгоритма Q-обучения:
Initialise: Q(s,a) = 0, starting state s, starting player P, iterations N for t = 0 : N With probability ε : P picks random action a Else, pick action a that maximise Q(s,a) Observe new state ŝ and reward R(s,a) If current player is our agent, update Q(s,a) = (1-α)Q(s,a) + α[R(s,a) + γ*max(Q(ŝ,â))] s = ŝ Switch turn, P = the other player
Обратите внимание, что количество итераций N должно быть относительно большим, я использовал около 500 000. Кроме того, Q (s, a) может быть реализован как dict Python или как двумерный массив, если мы представляем (s, a ) как целые числа. Наконец, можно изменять вероятность ε с течением времени, чтобы выделить более случайное исследование на более ранних итерациях, что может ускорить обучение.
После того, как вы обучили своего агента алгоритму, вы можете сохранить значения Q (s, a) и загрузить их, когда захотите сыграть против агента. Затем агенту просто нужно следовать оптимальной политике, выбирая действия, которые максимизируют Q (s, a). Хотя агент не становится очень умным из-за того, насколько проста игра в крестики-нолики, все же интересно попробовать это, если вы хотите узнать, как реализовать Q-обучение, и убедиться, что это работает.
Резюме
Подводя итог, в этом руководстве сначала объясняется структура Марковского процесса принятия решений (MDP) и то, как она используется в обучении с подкреплением. Мы смоделировали игру в крестики-нолики, используя состояния, действия и функцию вознаграждения. Вдобавок к этому мы определили функцию Q (s, a), которая количественно определяет ожидаемое вознаграждение, выбирая действие a в состоянии s и показал формулу для вычисления Q (s, a) путем многократного воспроизведения игра.
Надеюсь, вам понравился этот урок. Если у вас есть вопросы, вы можете связаться со мной здесь или через LinkedIn. И, наконец, если вы хотите увидеть, как это работает на практике, ознакомьтесь с моей реализацией в моем репозитории Github, ссылка на которую приведена ниже.