Измерение наград эпизода при использовании жадной политики эпсилона с линейным отжигом на эпсилоне - PullRequest
0 голосов
/ 21 февраля 2019

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

При обучении в следующей сети 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'])

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

...