Измерение наград эпизода при использовании жадной политики эпсилона с линейным отжигом на эпсилоне

Существует ли стандартная практика или инструмент в Керасе, который даст оценку награды за эпизод, которая связана с эпсилоном во время тренировки?

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

Если бы мне приходилось обходить это вручную, я бы тренировал часть от общего количества желаемых шагов обучения, затем тестировал модель с epsilon = 0, записывал средние награды за эпизоды в этот момент, вручную менял epsilon, а затем снова делал тот же цикл., Это похоже на хак, и я думаю, что любой, кто использует линейный отжиг эпсилона, столкнется с этой же проблемой.

Мысли?

Моя модель построена следующим образом:

model = Sequential()
model.add(Flatten(input_shape=(WINDOW_LENGTH,) + (observation_space_count,)))
for i in range(hidden_layer_count):
    model.add(Dense(observation_space_count*layer_width))
    model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

memory = SequentialMemory(limit=memory_length, window_length=WINDOW_LENGTH)
policy = LinearAnnealedPolicy(EpsGreedyQPolicy(), attr='eps', value_max=0.75, value_min=.01, value_test=.0, nb_steps=TOTAL_STEPS)

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=memory_length, target_model_update=1e-2, policy=policy, gamma=.99)
dqn.compile(Adam(lr=LEARNING_RATE), metrics=['mae'])

Типичный график обучения может выглядеть так: типичные показатели обучения

0 ответов

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