我正在通过一个简单的应用程序开发一个简单的Q-Learning实现,但是有些事情一直困扰着我。
让我们考虑Q学习的标准公式
Q(S, A) = Q(S, A) + alpha * [R + MaxQ(S', A') - Q(S, A)]
让我们假设存在这种状态
K
,它具有两种可能的操作,都通过R
和R'
授予我们的代理商奖励A
和A'
。如果我们采用几乎完全贪婪的方法(假设我们假设为0.1 epsilon),那么我首先会随机选择一个 Action ,例如
A
。下次,我可能会(90%的时间)再次选择A
,这将导致Q(K,A)不断增长,这是事实,即使我偶然尝试A'
,也可能是奖励的程度与A相同,在其余的学习过程中,我们将陷入一种几乎无法从我们的第一次猜测中“恢复”的情况。我想这一定不是这样,否则代理基本上不会学习-只会遵循一个简单的方法:像您第一次一样做所有事情。
我想念什么吗?我知道我可以调整alpha值(通常随着时间的推移而减小),但这丝毫不会改善我们的状况。
最佳答案
从this,我们知道:
epsilon-greedy policy
是探索与开发之间的一种平衡,既保证了收敛性,又常常保证了良好的性能。但是在实际问题中,我们经常需要一些启发式方法来更改学习速度alpha
来代表更好的返回。否则,就很难满足infinite often
的要求。
我在下面列出一个例子。这是一个经典问题,其中您有一个网格,并且每个单元格中的奖励金额可能不同。例如,下面显示了一个4x4网格,其中每个单元格都包含1
的奖励,但左上角的单元格除外(您获得的奖励更大,包含10
的数量)。机器人在网格中移动。合法 Action 是移动LEFT
,RIGHT
,UP
和DOWN
,但是机器人无法移出网格。
因此,我们的状态空间包含16个不同的状态,分别对应于16个单元格。由于边界的限制,每个州的法律诉讼数量不同。我们的目标是计算最佳策略(给定任何状态s
,输出最佳 Action a
)。
+++++++++++++++++++++
+ 10 + 1 + 1 + 1 +
+++++++++++++++++++++
+ 1 + 1 + 1 + 1 +
+++++++++++++++++++++
+ 1 + 1 + 1 + 1 +
+++++++++++++++++++++
+ 1 + 1 + 1 + 1 +
+++++++++++++++++++++
假设我们将
epsilon-greedy policy
与epsilon=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/