Как обобщить несколько зависимых действий в обучении с подкреплением

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

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

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

Однако я не совсем понимаю, как настроить пространство для действий. Я предполагаю, что действие будет представлять собой вектор с ценой для каждого типа места. Если у меня, например, 8 разных типов сидений и 10 разных цен на каждое, это дает мне в общей сложности 10 ^ 8 различных действий, многие из которых будут очень похожи. Кроме того, каждое дополнительное действие (установление цены на один тип места) в некоторой степени зависит от других в том смысле, что цена одного типа места, вероятно, повлияет на спрос (и, следовательно, вознаграждение) на другой. Следовательно, я сомневаюсь, что проблему можно разложить на набор подзадач.

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

На мой взгляд, это сводится к двум вопросам:

  1. Можно ли заставить агента понимать действия в относительных терминах? Скажем, например, один набор потенциальных цен - [10, 12, 20]. Могу ли я заставить своего агента понять, что там есть естественный порядок, и что первые два действия по ценообразованию больше похожи друг на друга, чем на третье возможное действие?
  2. В дополнение к этому, можно ли сделать обобщение из этого набора действий - можно ли настроить агента так, чтобы он понимал, что набор цен [10, 13, 20] очень похож на первый набор?

Мне не удалось найти никакой литературы по этому поводу, особенно по второму вопросу - любая помощь будет очень признательна!

Думаю, этот вопрос может больше подойти к ai.stackexchange.com (или, возможно, stats.stackexchange.com), а не к этому сайту. Этот сайт предназначен для вопросов, касающихся непосредственно программирования / реализации.

Dennis Soemers 10.08.2018 19:25

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

domdomdom 12.08.2018 14:15
0
2
128
1

Ответы 1

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

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

  2. Кроме того, агент RL должен понимать, что действия, очень близкие друг к другу, являются относительно похожими действиями, например, [10, 12, 20] ≈ [10, 13, 20]

1) Чтобы предоставить память вашему RL-агенту, вы можете сделать это двумя способами. Самый простой способ - передать состояния в виде вектора прошлых купленных билетов, а также текущего билета.

Пример: Допустим, мы создаем RL, чтобы запомнить как минимум 3 последние транзакции. В самом начале наш вектор состояния будет [0, 0, 3], что означает, что ранее не было покупок билетов (нулей), а в настоящее время мы покупаем билет № 3. Тогда вектор состояния следующего временного шага может быть [0, 3, 6], сообщая агенту RL, что ранее был выбран билет № 3, а теперь мы покупаем билет № 6. Нейронная сеть узнает, что вектор состояния [0, 0, 6] должен отображаться на другой результат по сравнению с [0, 3, 6], потому что в первом случае билет № 6 был первым купленным билетом, и было много поставки. Но во втором случае билет 3 уже был продан, поэтому теперь все оставшиеся билеты подорожали.

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

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

Причина в следующем:

Мы можем рассматривать эти аппроксиматоры функций просто как линию. Нейронные сети просто строят очень нелинейную непрерывную линию (нейронные сети обучаются с использованием обратного распространения и градиентного спуска, поэтому они должны быть непрерывными), а набор состояний будет отображаться в уникальный набор выходных данных. Поскольку это линия, наборы состояний, которые очень похожи, ДОЛЖНЫ отображаться на выходы, которые также очень близки. В простейшем случае представьте, что y = 2x. Если наш вход x = 1, наш y = 2. И если наш вход x равен 1,1, что очень близко к 1, наш выход y = 2,2, что очень близко к 2, потому что они находятся на непрерывной линии.

Для табличного подхода есть просто матрица. По оси Y у вас есть состояния, а по оси X - действия. В этом подходе состояния и действия дискретны. В зависимости от дискретизации разница может быть огромной, и если система плохо дискретизирована, действия, очень близкие друг к другу, МОГУТ не быть обобщены.

Надеюсь, это поможет, дайте мне знать, если что-то неясно.

Привет, Руи, спасибо за ответ. Я думаю, что вы, возможно, неправильно поняли часть вопроса. Я говорил о дополнительном сервисе, в котором вы платите за выбор места после покупки билета на рейс. Я разместил на AI stackexchange слегка обновленный вопрос, чтобы прояснить это (ai.stackexchange.com/questions/7524/…).

domdomdom 12.08.2018 14:22

Что касается вашего первого пункта, у меня будет доступ к инвентарной информации, так что я думаю, что это должно позаботиться об этой стороне вещей. Ваше объяснение второго пункта очень ясное, так что спасибо. Однако я все еще немного не уверен, как это может работать на практике, когда у меня огромное пространство для действий (из-за большого количества комбинаций цен). Например, с DQN у меня нет возможности иметь 10 ^ 8 выходных узлов для каждой комбинации ценового набора. Любые идеи, которые у вас есть, были бы очень признательны - в таком случае, возможно, было бы разумнее ответить на мой повторный пост, который я дал выше.

domdomdom 12.08.2018 14:29

Другие вопросы по теме