Алгоритмы: Policy Gradients.

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


2020-02-05 15:43

В прошлый раз мы ознакомились с необычной физической реализацией самообучающегося алгоритма, сегодня же мы поговорим о более стандартных алгоритмах и их реализациях. На текущий момент, одним из основных алгоритмов обучения с подкреплением является Proximal Policy Optimization, или PPO. Именно его использовали в OpenAI чтобы обучить своих ловких роботов и грозных дотовских ботов.

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

Это семейство алгоритмов называется Policy Gradient Methods, из чего можно сделать два важных вывода:

1) Эти алгоритмы направлены на поиск стратегии (Policy) - то есть прямого отображения из текущего наблюдаемого состояния среды в действия агента (вижу противника - надо атаковать) с целью максимизации получаемой награды.

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

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

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

Если бы у нас заранее имелись "правильные ответы", то можно было бы применить обычное обучение с учителем. Но это означает, что для обучения нейросети игре в, скажем, Pong или Mario, нам нужно было бы снять десятки тысяч скриншотов прохождения игры и каждому поставить в соответствие "правильное" действие агента. Тогда мы бы смогли легко посчитать градиент функции ошибки относительно параметров нашей стратегии (которую, очевидно, аппроксимирует современная нейронная сеть, будучи универсальным и удобным аппроксиматором произвольных функций), то есть ответить на вопрос "как поменять веса нейронной сети, чтобы повысить вероятность "правильного" ответа.

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

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

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

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

За этой простой интуитивной логикой стоит достаточно строгая математика, приобщиться к которой можно загуглив "score function gradient estimator" или "policy gradient theorem".

Эта математика говорит буквально следующее: если у нас есть некоторая функция наград f(x), которые выдаются агенту, действующему в среде, и этот агент ведет себя в соответствии со стратегией p(x; theta), где x - наблюдаемое агентом состояние среды, а theta - подбираемые нами параметры (в данном случае - весовые коэффициенты нейронной сети), то мы можем посчитать градиент ожидаемого значения функции f относительно весов theta стратегии как ожидаемое значение f(x) * grad(log p(x)).

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

Вывод градиента

Более подробно про данный подход можно прочитать, например, вот в этом посте.


Источник: m.vk.com

Комментарии: