Как применить Q-learning в среде OpenAI-тренажерного зала, где на каждом временном шаге выполняется несколько действий? - PullRequest
1 голос
/ 05 апреля 2019

Я успешно использовал Q-learning для решения некоторых классических условий обучения подкреплению из OpenAI Gym (например, Taxi, CartPole).Эти среды позволяют выполнять одно действие на каждом временном шаге.Однако я не могу найти способ решить проблемы, когда несколько действий выполняются одновременно на каждом временном шаге.Например, в среде Roboschool Reacher 2 значения крутящего момента - по одному для каждой оси - должны указываться на каждом временном шаге.Проблема в том, что матрица Q построена из пар (состояние, действие).Однако, если одновременно выполняется более одного действия, построить матрицу Q не просто.

В книге Максима Лапана "Обучение глубокому усилению" упоминается об этом, но не дается четкий ответ,см. цитату ниже.

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

Кто-нибудь знает, как обращаться с несколькими действиями в обучении Q?

PS: я не говорю о проблеме «непрерывное против дискретного пространства действия», которая может быть решена с помощью DDPG.

1 Ответ

0 голосов
/ 05 апреля 2019

Вы можете выбрать один из двух подходов - зависит от проблемы:

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

  2. Думайте о них как о зависимых и смотрите на декартово произведение наборов действий, а затем настраивайте сеть для вывода значения для каждого продукта - так что если у вас есть два действия, которые вам нужно передать, и 5 вариантов для каждый, размер выходного слоя будет 2 * 5 = 10, и вы просто используете softmax на этом.

...