Эпизоды Keras-RL, возвращающие одинаковые значения после подгонки модели

Поэтому я создал пользовательскую среду с использованием OpenAI Gym. Я внимательно слежу за примерами keras-rl DQNAgent для примера CartPole, что приводит к следующей реализации:

nb_actions = env.action_space.n

# Option 1 : Simple model
model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

# Next, we build a very simple model. 
#model = Sequential() 
#model.add(Flatten(input_shape=(1,) + env.observation_space.shape)) 
#model.add(Dense(16)) 
#model.add(Activation('relu')) 
#model.add(Dense(16)) 
#model.add(Activation('relu')) 
#model.add(Dense(16)) 
#model.add(Activation('relu')) 
#model.add(Dense(nb_actions, activation='linear')) 
#model.add(Activation('linear'))

# Finally, we configure and compile our agent. You can use every built-in Keras optimizer and # even the metrics! 

memory = SequentialMemory(limit=50000, window_length=1) 
policy = BoltzmannQPolicy() 
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=1e-2, policy=policy) 

dqn.compile(Adam(lr=1e-3), metrics=['mae']) 

# Okay, now it's time to learn something! We visualize the training here for show, but this # slows down training quite a lot. You can always safely abort the training prematurely using # Ctrl + C. 

dqn.fit(env, nb_steps=2500, visualize=False, verbose=2) 

# After training is done, we save the final weights. 

dqn.save_weights('dqn_{}_weights.h5f'.format(ENV_NAME), overwrite=True) 

# Finally, evaluate our algorithm for 5 episodes. 

dqn.test(env, nb_episodes=10, visualize=False)

Так что все выглядит так, как я ожидал до вызова функции dqn.test. Пример вывода из dqn.fit выглядит следующим образом:

... 1912/2500: эпизод 8, продолжительность: 1,713 с, шаг эпизода: 239, шаг в секунду: 139, награда за эпизод: -78,774, средняя награда: -0,330 [-27928,576, 18038,443], среднее действие: 0,657 [0,000, 2,000], среднее наблюдение: 8825,907 [5947,400, 17211,920], потеря: 7792970.500000, mean_absolute_error: 653,732361, среднее_q: 1,000000

2151/2500: эпизод: 9, продолжительность: 1.790 с, шаги эпизода: 239, шаг в секунду: 134, награда за эпизод: -23335.055, средняя награда: -97.636 [-17918.534, 17819.400], среднее действие: 0.636 [0.000, 2.000], среднее наблюдение: 8825,907 [5947,400, 17211,920], потеря: 8051206,500000, mean_absolute_error: 676,335266, среднее_q: 1,000000

2390/2500: эпизод: 10, продолжительность: 1.775 с, шаги эпизода: 239, шаг в секунду: 135, награда за эпизод: 16940.150, средняя награда: 70.879 [-25552.948, 17819.400], среднее действие: 0.611 [0.000, 2.000], среднее наблюдение: 8825,907 [5947,400, 17211,920], потеря: 8520963,000000, mean_absolute_error: 690.176819, mean_q: 1,000000

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

Вот результат запуска тестового метода:

Тестирование на 10 эпизодов

  • Эпизод 1: награда: -62996,100, шаги: 239
  • Эпизод 2: награда: -62996.100, шаги: 239
  • Эпизод 3: награда: -62996.100, шаги: 239
  • Эпизод 4: награда: -62996.100, шаги: 239
  • Эпизод 5: награда: -62996.100, шаги: 239
  • Эпизод 6: награда: -62996.100, шаги: 239
  • Эпизод 7: награда: -62996.100, шаги: 239
  • Эпизод 8: награда: -62996.100, шаги: 239
  • Эпизод 9: награда: -62996.100, шаги: 239
  • Эпизод 10: награда: -62996.100, шаги: 239

Это приводит меня к двум вопросам:

1) Почему за каждый эпизод награды одинаковы?

2) Почему модель может рекомендовать ряд действий, которые приводят к ужасным вознаграждениям?

2 ответа

Я бы проверил объект env и посмотрел, есть ли у него там вычисления вознаграждений.

Мне интересно, если функция.fit по какой-то причине не исследует пространство состояний.

Недавно я делал проект RL (лунный аппарат) с открытым ИИ-тренажерным залом и Keras, хотя я не использовал агента DQN и другие Keras, встроенные в RL. Я просто построил простую сеть feedforwad. Проверьте эту ссылку GitHub, посмотрите, полезно ли это? https://github.com/tianchuliang/techblog/tree/master/OpenAIGym

Я нашел репозиторий github, который почти соответствует вашему коду, однако, когда вы его запускаете, значение не остается прежним. Вот он: https://github.com/Anonymous-Ol/Keras-RL-Examples

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