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

Я пытаюсь создать агента 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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