Как реализовать ограниченное пространство действий в обучении подкреплению?

13

Я кодирую модель обучения подкреплению с агентом PPO благодаря очень хорошей библиотеке Tensorforce , построенной поверх Tensorflow.

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

Допустим, есть 5 действий, и их доступность зависит от внутреннего состояния (которое определяется предыдущим действием и / или новым состоянием / пространством наблюдения):

  • 2 действия (0 и 1) всегда доступны
  • 2 действия (2 и 3) доступны только при внутреннем состоянии == 0
  • 1 действие (4) доступно только когда internal_state == 1

Следовательно, доступно 4 действия, когда internal_state == 0, и 3 действия доступны, когда internal_state == 1.

Я думаю о нескольких возможностях реализовать это:

  1. Изменяйте пространство действия на каждом шаге, в зависимости от internal_state. Я предполагаю, что это чепуха.
  2. Ничего не предпринимайте: дайте модели понять, что выбор недоступного действия не оказывает влияния.
  3. Ничего не предпринимайте: немного отрицательно влияйте на вознаграждение, когда модель выбирает недоступное действие.
  4. Помогите модели: включив целое число в пространство состояний / наблюдений, которое информирует модель, что такое значение internal_state + точка маркера 2 или 3

Есть ли другие способы реализовать это? Из вашего опыта, какой из них будет лучшим?

Максимум
источник

Ответы:

5

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

Например, в ситуации, которую вы описываете:

  • 2 действия (0 и 1) всегда доступны
  • 2 действия (2 и 3) доступны только при внутреннем состоянии == 0
  • 1 действие (4) доступно только когда internal_state == 1

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


01


Для первого «решения» я писал выше, что «теоретически» не имеет значения, как вы выбираете отображение. Я действительно ожидаю, что ваш выбор повлияет на скорость обучения на практике. Это потому, что на начальных этапах вашего учебного процесса у вас, скорее всего, будет выбор действий, близкий к случайному. Если некоторые действия «появляются несколько раз» в выходных данных, они будут иметь большую вероятность выбора при первоначальном выборе действия close-tor-andom. Таким образом, это повлияет на ваше первоначальное поведение, что повлияет на накопленный вами опыт, что, в свою очередь, также повлияет на то, что вы изучаете.

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

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

Деннис Соемерс
источник
2

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

Варианты дизайна, перечисленные в вопросе

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

  • Изменяйте пространство действия на каждом шаге, в зависимости от internal_state. Я предполагаю, что это чепуха.
  • Ничего не предпринимайте: дайте модели понять, что выбор недоступного действия не оказывает влияния.
  • Ничего не предпринимайте: немного отрицательно влияйте на вознаграждение, когда модель выбирает недоступное действие.
  • Помогите модели: включив целое число в пространство состояний / наблюдений, которое информирует модель, что такое значение internal_state + точка маркера 2 или 3

Первоначальный анализ

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

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

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

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

    a. Represent rule-conditioned learning in nomenclature
    b. Represent convergence mathematically using the new nomenclature
    c. Determining a method of convergence
    d. Proving convergence
    e. Rechecking
    f. Defining a smooth and efficient algorithm
    g. Providing PAC learning information for planning
    f. Peer review
    g. Extending the classes of the library
    h. Proof of concept with the current problem above
    i. Additional cases and metrics comparing the approach with the others
    j. Extending the library flexibility to support more such dev

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

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

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

Дуглас Дасеко
источник
3
Обычно, например, в AlphaGo происходит то, что низкоуровневое представление в нейронной сети представляет собой очень большое пространство действия, большая часть которого невозможна в текущем состоянии (это происходит из-за ограничений простых NN, которые выводят векторы фиксированного размера ). Затем другая часть кода применяет фильтр для выбора и нормализации вероятностей только для разрешенных ходов. Комбинированные NN и фильтр являются частью агента. Поэтому справедливо сказать, что агент в целом будет «изменять пространство действий для каждого хода» - хотя я не знаю, как этого можно достичь в библиотеке Tensorforce.
Нил Слэйтер
1

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

Взгляните в качестве примера на кусок кода https://github.com/haje01/gym-tictactoe/blob/master/examples/base_agent.py :

ava_actions = env.available_actions()
action = agent.act(state, ava_actions)
state, reward, done, info = env.step(action)
madpower2000
источник