PPO вообще не обучается в многомерной средеPython

Программы на Python
Ответить
Anonymous
 PPO вообще не обучается в многомерной среде

Сообщение Anonymous »

Я использую Stable Baselines 3 для обучения агента PPO для пользовательской среды с многомерным дискретным пространством наблюдения, но агент по сути продолжает повторять одно и то же бессмысленное действие во время оценки, несмотря на множество итераций изменения гиперпараметров и различные функции вознаграждения. . Делаю ли я что-то явно неправильное со своей средой или моделью? Неужели PPO просто не подходит для таких многомерных задач?
Некоторые важные детали:
Хотя пространство и проблема нетривиальны, все, что я пытаюсь заставить его сделать изначально не стоит выбирать незаконные ходы и, возможно, не делать полностью вредных ходов. Однако этому не удалось научиться ни разу после множества различных прогонов по 10 миллионов шагов обучения каждый.
Среда моделирует 50 вокселей в трехмерном пространстве, которые находятся в заранее заданном исходном положении. и должен достичь целевой позиции с помощью последовательности команд (например: воксель 1 перемещается вниз). Начальная и целевая позиции постоянны во всех запусках в целях тестирования, но в идеале модель должна научиться делать это со случайными конфигурациями.
Пространство наблюдения состоит из 50 списков, содержащих 6 элементов: текущий x, y, z и целевые координаты x, y, z каждого куба. Пространство действий состоит из двух чисел: одно выбирает куб, а другое - направление его перемещения. Существуют некоторые ограничения на перемещение куба, поэтому обычно около 40–60 % пространства действий приводит к неправильному перемещению.

Код: Выделить всё

self.observation_space = spaces.Box(
low=-100, high=100, shape=(50, 6), dtype=np.float32
)
self.action_space = spaces.MultiDiscrete([
50, # Voxel ID
6   # Move ID (0 to 5)
])
Функция вознаграждения очень проста: я просто пытаюсь заставить модель не выбирать неверные ходы и, возможно, как бы перемещать некоторые кубики в правильном направлении. Я пробовал награждать его в зависимости от того, насколько он близок к цели, убирать штраф за неверный ход, менять пропорции между штрафами и наградами, но это не привело к ощутимому улучшению.

Код: Выделить всё

def calculate_reward(self, action):
reward = 0

# Penalize invalid moves
if not is_legal(action):
reward -= 1
return reward

# If an incorrectly positioned voxel moves to a correct position, reward the model
if moved_voxel in self.target_positions and moved_voxel not in self.reached_target_positions:
reward += 1
# If a correctly positioned voxel moves to an incorrect position, reduce the reward
elif moved_voxel not in target_positions and moved_voxel in self.reached_target_positions:
reward -= 1

# Penalty for making any move to discourage long solutions
reward -= 0.1
return reward
Что касается гиперпараметров, я пробовал увеличивать и уменьшать скорость обучения, коэффициент энтропии, шаги и размер пакета, но пока безрезультатно.

Код: Выделить всё

from stable_baselines3 import PPO

model = PPO(
"MlpPolicy",
env,
device='cpu',
policy_kwargs=dict(
net_arch=[256, 512, 256]
)
n_steps=2000,
batch_size=100,
gae_lambda=0.95,
gamma=0.99,
n_epochs=10,
clip_range=0.2,
ent_coef=0.02,
vf_coef=0.5,
learning_rate=5e-5,
max_grad_norm=0.5
)

model.learn(total_timesteps=10_000_000, callback=callback, progress_bar=True)

obs = env.reset()

# Evaluate the model
for i in range(100):
action, _state = model.predict(obs, deterministic=True)
obs, reward, done, info = env.step(action)
print(f"Action: {action}, Reward: {reward}, Done: {done}")
if done.any():
obs = env.reset()
Я запускаю несколько сред параллельно, потому что это среда с интенсивными вычислениями, а награды и пространство наблюдения нормализуются. Вот и все.

Код: Выделить всё

env = VoxelEnvironment()
env = SubprocVecEnv([make_env() for _ in range(8)])
env = VecNormalize(env, norm_obs=True, norm_reward=True, clip_reward=1, clip_obs=100)
Статистика тензорной доски показывает, что модели иногда удается получить положительное вознаграждение, но когда я оцениваю ее, она продолжает использовать ту же проверенную и верную стратегию «повторять одно и то же действие навсегда».
/>
Изображение
Заранее большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... nvironment
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»