我正在通过一个简单的应用程序开发一个简单的Q-Learning实现,但是有些事情一直困扰着我。

让我们考虑Q学习的标准公式

Q(S, A) = Q(S, A) + alpha * [R +  MaxQ(S', A') - Q(S, A)]

让我们假设存在这种状态K,它具有两种可能的操作,都通过RR'授予我们的代理商奖励AA'

如果我们采用几乎完全贪婪的方法(假设我们假设为0.1 epsilon),那么我首先会随机选择一个 Action ,例如A。下次,我可能会(90%的时间)再次选择A,这将导致Q(K,A)不断增长,这是事实,即使我偶然尝试A',也可能是奖励的程度与A相同,在其余的学习过程中,我们将陷入一种几乎无法从我们的第一次猜测中“恢复”的情况。

我想这一定不是这样,否则代理基本上不会学习-只会遵循一个简单的方法:像您第一次一样做所有事情。

我想念什么吗?我知道我可以调整alpha值(通常随着时间的推移而减小),但这丝毫不会改善我们的状况。

最佳答案

this,我们知道:


epsilon-greedy policy是探索与开发之间的一种平衡,既保证了收敛性,又常常保证了良好的性能。但是在实际问题中,我们经常需要一些启发式方法来更改学习速度alpha来代表更好的返回。否则,就很难满足infinite often的要求。

我在下面列出一个例子。这是一个经典问题,其中您有一个网格,并且每个单元格中的奖励金额可能不同。例如,下面显示了一个4x4网格,其中每个单元格都包含1的奖励,但左上角的单元格除外(您获得的奖励更大,包含10的数量)。机器人在网格中移动。合法 Action 是移动LEFTRIGHTUPDOWN,但是机器人无法移出网格。

因此,我们的状态空间包含16个不同的状态,分别对应于16个单元格。由于边界的限制,每个州的法律诉讼数量不同。我们的目标是计算最佳策略(给定任何状态s,输出最佳 Action a)。

+++++++++++++++++++++
+ 10 +  1 +  1 + 1  +
+++++++++++++++++++++
+ 1  +  1 +  1 + 1  +
+++++++++++++++++++++
+ 1  +  1 +  1 + 1  +
+++++++++++++++++++++
+ 1  +  1 +  1 + 1  +
+++++++++++++++++++++

假设我们将epsilon-greedy policyepsilon=0.1一起使用,这是一个恒定的学习率alpha=0.1。我们从网格上的随机位置开始。每当我们到达左上角时,我们都会以随机位置重新开始。

以下是对200,000个移动进行模拟的结果。最左侧的块直观地显示了每个单元格上的当前贪婪策略。
  • -->向右移动
  • <--向左移动
  • ^上移
  • v向下移动

  • 因此,您看到这远非最佳策略。显然,在最佳策略中,每个单元格都应指向左侧或上方,因为我们在(0,0)位置有较大的奖励。
     v   v   v   v   |      2      9      5      4
     v   v   v   v   |     14     98     75     14
    -->  v   v  <--  |    258   3430   3312    245
    --> --> <-- <--  |   3270  93143  92978   3191
    

    右边的方框显示了到目前为止我们访问每个单元格的次数。您会看到,我们大部分访问都是在底部进行的,但访问顶部的行却很少见。这就是为什么我们还没有达到最佳政策的原因。

    如果将学习率更改为alpha=1/(number of times you visited (s,a) so far),则可以在20,000步之内达到最佳策略(如下所示)。同样,我们访问每个单元的次数虽然不完美,但分布更均匀。
     --> <-- <-- <--  |     34   7997   7697    294
      ^   ^   ^  <--  |    731    898    524    132
      ^   ^   ^   ^   |    709    176     88     94
      ^   ^   ^   ^   |    245    256     96     77
    

    对于具有更多状态的更大问题,例如10x10的网格,我发现最好使用更大的epsilon。例如,以下是在使用epsilon=0.5在10x10网格上进行80,000次移动后的仿真结果。除了右下角,几乎是最佳的。关于使用模拟退火来帮助提高Q学习的收敛速度,还有idea
     v  <-- <-- <-- <-- <-- <-- <-- <-- <--  |     19   2500   1464    716    386    274    216    159    121     71
     ^  <-- <-- <-- <--  v  <-- <-- <-- <--  |   9617  11914   3665   1071    580    410    319    225    207    131
     ^   ^   ^  <-- <-- <-- <--  v  <-- <--  |   5355   5716   2662   1675   1465    611    302    183    162    101
     ^   ^   ^   ^   ^  <-- <-- <-- <-- <--  |   1604   1887   1192    621   1056    882    693    403    206    100
     ^   ^   ^   ^   ^   ^   ^  <-- <-- <--  |    639    735    731    333    412    399    480    294    172    114
     ^   ^   ^  <--  ^   ^   ^  <-- <--  ^   |    373    496    640    454    272    266    415    219    107     98
     ^   ^   ^   ^   ^   ^   ^   ^  <--  ^   |    251    311    402    428    214    161    343    176    114     99
     ^   ^   ^   ^  <-- -->  ^  <-- <-- <--  |    186    185    271    420    365    209    359    200    113     70
     ^   ^   ^   ^   ^   ^   ^   ^   v   v   |    129    204    324    426    434    282    235    131     99     74
     ^   ^   ^   ^   ^  <--  ^  <-- <-- <--  |    100    356   1020   1233    703    396    301    216    152     78
    

    顺便说一句,我的玩具问题的Python代码(约100行)是here

    关于machine-learning - Q值无限制地增加,是在Q-Learning中重复相同 Action 后重复奖励的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13148934/

    10-12 21:15