我开始尝试https://github.com/openai/baselines/,特别是deepq算法。我想对传递给deepq.learn方法的参数进行自己的分析。
该方法具有与勘探有关的两个参数-exploration_fraction
和exploration_final_eps
。
我的理解方式-exploration_fraction
决定算法在探索中花费了多少训练时间,exploration_final_eps
决定了每次探索时采取随机动作的可能性。因此-为了探索而采取的随机动作数是exploration_fraction
和exploration_final_eps
的乘积。正确吗?
有人可以基于这两个参数(以外行术语)解释算法的探索方式吗?
您的理解几乎是正确的。采取随机动作(即探索性动作)的概率p
是一个数字,该数字通常开始时较高,但随着时间的推移而降低。这是有道理的,因为在学习阶段的开始,学习策略仍然没有用,但是随着学习的进行,它会变得更好。
考虑到这一点,exploration_fraction
和exploration_final_eps
是控制p
随时间降低的参数。浏览repo中的代码时,会发现以下几行:
# Create the schedule for exploration starting from 1.
exploration = LinearSchedule(schedule_timesteps=int(exploration_fraction * total_timesteps),
initial_p=1.0,
final_p=exploration_final_eps)
在这里更容易理解exploration_fraction
和exploration_final_eps
的含义:
exploration_fraction
确定p
减少多长时间(以时间步长)。请注意,在这种情况下,最初是p=1
,但此初始值可能会有所不同。exploration_final_eps
确定p
的最小值。一旦在exploration_fraction
指示的时间内概率降低,p
将保持固定不变,其值等于exploration_final_eps
。有时p
线性下降,例如在LinearSchedule
的情况下,但是其他方式也是可能的。