我试图理解DQN中的epsilon - 贪婪方法。我正在学习https://github.com/karpathy/convnetjs/blob/master/build/deepqlearn.js
中提供的代码以下是epsilon的更新规则,它随着年龄的变化而变化如下:
$ this.epsilon = Math.min(1.0,Math.max(this.epsilon_min,1.0-(this.age - this.learning_steps_burnin)/(this.learning_steps_total - this.learning_steps_burnin)));
这是否意味着epsilon值以min开始(由用户选择)然后随着年龄的增加而逐渐增加,最终变为1?或者,epsilon是从1开始然后衰减到epsilon_min吗?
无论哪种方式,在此过程之后学习几乎停止。那么,我们是否需要仔细选择learning_steps_burnin和learning_steps_total?有关需要选择什么价值的任何想法?
答案 0 :(得分:2)
由于epsilon
表示您的政策中的随机性数量(操作贪婪概率为1-epsilon
,随机概率为epsilon
),因此您希望从一个相当随机的政策开始慢慢走向确定性政策。因此,您通常从较大的epsilon
开始(如代码中的0.9或1.0)并将其衰减为较小的值(如0.1)。最常见和最简单的方法是线性衰减和指数衰减。通常,您可以了解要执行的学习步骤数(代码中的内容称为learning_steps_total
)并调整衰减因子(您的learning_steps_burnin
),以便在此时间间隔内epsilon
从0.9到0.1。
您的代码是线性衰减的示例。 指数衰减的一个例子是
epsilon = 0.9
decay = 0.9999
min_epsilon = 0.1
for i from 1 to n
epsilon = max(min_epsilon, epsilon*decay)