Рубрики
Без рубрики

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

Автор оригинала: Daniele Paliotta.

Вступление

Обучение с подкреплением, безусловно, является одной из самых активных и стимулирующих областей исследований в области ИИ.

Интерес к этой области вырос в геометрической прогрессии за последние пару лет, после больших (и широко разрекламированных) достижений, таких как AlphaGo DeepMind избиение чемпиона слова GO и модели OpenAI AI избиение профессиональных игроков в DOTA .

Благодаря всем этим достижениям обучение с подкреплением в настоящее время применяется в самых разных областях-от здравоохранения до финансов, от химии до управления ресурсами.

В этой статье мы познакомимся с фундаментальными понятиями и терминологией обучения с подкреплением и применим их на практическом примере.

Что такое Обучение с подкреплением?

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

Это намеренно очень расплывчатое определение, поэтому методы обучения с подкреплением могут быть применены к очень широкому кругу реальных проблем.

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

Как вы, вероятно, заметили, обучение с подкреплением на самом деле не вписывается в категории контролируемого/неконтролируемого/полуконтролируемого обучения.

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

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

Краткая история обучения с подкреплением

В течение нескольких десятилетий (начиная с 1950-х годов!) обучение с подкреплением шло по двум отдельным направлениям исследований, одно из которых было сосредоточено на подходах проб и ошибок, а другое-на оптимальном управлении .

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

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

В результате междисциплинарного изучения этих двух областей возникло поле под названием Temporal Difference (TD) Learning .

Современные подходы машинного обучения к RL в основном основаны на TD-обучении, которое имеет дело с сигналами вознаграждения и функцией ценности (мы более подробно рассмотрим, что это такое, в следующих параграфах).

Терминология

Теперь мы рассмотрим основные понятия и терминологию обучения с подкреплением.

Агент

Система, которая встроена в среду и принимает меры для изменения состояния среды. Примерами могут служить мобильные роботы, программные агенты или промышленные контроллеры.

Окружающая среда

Внешняя система, которую агент может “воспринимать” и воздействовать на нее.

Среды в RL определяются как Марковские процессы принятия решений (MDPS). MDP-это кортеж:

$$ (S, A, P, R, \gamma) $$

где:

  • S – конечное множество состояний
  • A – это конечный набор действий
  • P – матрица вероятностей перехода состояния
  • R – это функция вознаграждения
  • γ – коэффициент дисконтирования, γ ∈ [0,1]
Марковский процесс принятия решений

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

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

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

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

Функция Вознаграждения

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

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

Return G t определяется как дисконтированная сумма вознаграждений от timestep t .

γ называется фактором дисконтирования, и он работает за счет уменьшения суммы вознаграждения по мере продвижения в будущее.

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

Функция Значения

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

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

Фактическое имя этой функции- state-value function, чтобы отличить ее от другого важного элемента в RL: action-value function.

Функция action-value дает нам значение, т. е. ожидаемый возврат, для использования action a в определенном состоянии s :

Политика

Политика определяет поведение нашего агента в MDP.

Формально политика-это распределение действий по данным состояниям . Политика сопоставляет состояния с вероятностью принятия каждого действия из этого состояния:

Конечная цель RL-найти оптимальную (или достаточно хорошую) политику для нашего агента. В примере с видеоиграми вы можете думать о политике как о стратегии, которой следует игрок, то есть о действиях, которые игрок предпринимает, когда ему представляются определенные сценарии.

Основные подходы

К задачам RL применяется множество различных моделей и алгоритмов.

Действительно, много .

Однако все они более или менее подпадают под одну и ту же категорию: основанные на политике и основанные на ценности .

Подход, Основанный На Политике

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

Ценностно-ориентированный Подход

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

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

Разведка против эксплуатации

Компромисс между разведкой и эксплуатацией был широко изучен в литературе RL.

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

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

В следующем примере мы увидим, как эти понятия применимы к реальной проблеме.

Многорукий Бандит

Теперь мы рассмотрим практический пример проблемы обучения подкреплению – проблему многорукого бандита .

Многорукий бандит-одна из самых популярных проблем в RL:

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

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

Бандитская машина

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

Методы Действия-Значения

Очень простое решение основано на функции значения действия. Помните, что значение действия-это среднее вознаграждение, когда это действие выбрано:

Мы можем легко оценить q , используя выборочное среднее :

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

Не будьте слишком жадными

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

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

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

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

Последнее предостережение – чтобы не сделать наше решение слишком вычислительно дорогим, мы вычисляем среднее значение постепенно по этой формуле:

Пошаговое руководство по решению Python

import numpy as np

# Number of bandits
k = 3

# Our action values
Q = [0 for _ in range(k)]

# This is to keep track of the number of times we take each action
N = [0 for _ in range(k)]

# Epsilon value for exploration
eps = 0.1

# True probability of winning for each bandit
p_bandits = [0.45, 0.40, 0.80]

def pull(a):
    """Pull arm of bandit with index `i` and return 1 if win, 
    else return 0."""
    if np.random.rand() < p_bandits[a]:
        return 1
    else:
        return 0

while True:
    if np.random.rand() > eps:
        # Take greedy action most of the time
        a = np.argmax(Q)
    else:
        # Take random action with probability eps
        a = np.random.randint(0, k)
    
    # Collect reward
    reward = pull(a)
    
    # Incremental average
    N[a] += 1
    Q[a] += 1/N[a] * (reward - Q[a])

И вуаля! Если мы запустим этот скрипт на пару секунд, то уже увидим, что наши значения действий пропорциональны вероятности попадания джекпотов для наших бандитов:

0.4406301434281669, 
0.39131455399060977, 
0.8008844354479673

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

Вывод

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

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

Ресурсы