首页 > 解决方案 > 在对 epsilon 使用线性退火的 epsilon 贪心策略时测量情节奖励

问题描述

Keras 中是否有标准做法或工具可以估计在训练期间与 epsilon 去相关的情节奖励?

在训练下面的 dqn 网络时,我可以在训练期间随着时间的推移测量情节奖励,但是由于问题的性质,随着 epsilon 的减少,无论模型是否从训练中得到改进,情节奖励都会增加。因此,很难判断模型是否正在改进/收敛,或者增加的情节奖励是否仅仅是由于 epsilon 的线性退火。

如果我必须手动解决这个问题,我将训练所需训练步骤的一小部分,然后使用 epsilon = 0 测试模型,记录该时刻的平均剧集奖励,手动更改 epsilon,然后再次执行相同的循环. 不过,这似乎是一个 hack,我认为其他任何使用 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'])

典型的训练图可能如下所示: 典型的训练指标

标签: pythontensorflowkeraskeras-rl

解决方案


推荐阅读