我是在一个普通的应用一个简单的Q学习实现的发展过程,但有件事情,一直百思不得其解。
让我们考虑一下Q学习的标准制定
Q(S, A) = Q(S, A) + alpha * [R + MaxQ(S', A') - Q(S, A)]
让我们假设有这种状态K
有两种可能的行动,无论是授予我们的代理商奖励R
和R'
由A
和A'
。
如果我们按照一个几乎完全贪婪的方法(比方说,我们假定一个0.1小量),我会在第一随机选择的行动之一,例如A
。 接下来的时间,我可能会(90%的时间),再选择A
,这将导致该Q(K,A)持续增长和不断增长的,是真实的情况下,即使偶然我尝试A'
,因为可能它的回报是在相同幅度为A的,我们已经得到了进入的情况下这是几乎不可能从我们第一次的猜测“恢复”,学习的其余时间。
我想这一定不能是这样的,否则代理将基本上不学习 - 它会只是遵循一个简单的食谱:做任何事情都是你做你的第一次。
我缺少的东西吗? 我知道我可以调整阿尔法值(通常,它随时间减少),但丝毫没有改善我们的状况。
从这个 ,我们知道:
Q学习的收敛持有使用任何勘探的政策,只要求每个国家行为对(s,a)
是无限经常执行。
该epsilon-greedy policy
是勘探和开发,这既保证收敛,常不错的性能之间的平衡。 但在实际问题中,我们经常需要一些启发,以改变学习速度alpha
代表一个更好的回报。 否则, infinite often
要求难以满足。
我在下面列出的例子。 这是一个经典的问题,在你有一个网格,你必须在每个单元有可能不同的奖励金额。 例如,4x4网格如下所示,其中每一个细胞包含的奖励1
,除了左上角单元(你有量的更大的奖励10
)。 机器人是在网格中移动。 该诉讼正在LEFT
, RIGHT
, UP
和DOWN
,但机器人不能迁出的网格。
因此,我们的状态空间包含16种不同的状态,这对应于16个单元。 对于每一个国家,有不同的数字,因为边界约束的法律行为。 我们的目标是计算出最优的政策(给出任何状态s
,输出的最佳动作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
。 我们开始对电网的随机位置。 当我们到达左上角,我们重新启动了随机位置一次。
下面是运行20万个移动模拟的结果。 最左边的块直观地显示在每个单元格的当前贪婪政策。
-
-->
向右移动 -
<--
向左移动 -
^
向上移动 -
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)
,我们能够为中支持20000个步骤达到最佳的策略(如下图所示)。 此外,我们参观了每个单元的次数更均匀虽然不是完美的分布。
--> <-- <-- <-- | 34 7997 7697 294
^ ^ ^ <-- | 731 898 524 132
^ ^ ^ ^ | 709 176 88 94
^ ^ ^ ^ | 245 256 96 77
对于具有多种状态,例如,10×10格一个更大的问题,我觉得这是更好地使用较大的epsilon
。 例如,下面是后80000个上10×10网格移动与模拟的结果epsilon=0.5
。 这是除了右下角几乎最优的。 还有一个想法有关使用模拟退火,以帮助改善Q学习的收敛速度。
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线)是在这里 。
Q(K, A)
不只是保持无限增长,由于minus Q(S, A)
项。 如果你重写更新规则,这是更加明显:
Q(S, A) <-- Q(S, A)(1 - a) + a(R + maxQ(S', A'))
这表明, Q(K, A)
朝着其“实际”值缓慢地移动R + maxQ(S', A')
Q(K, A)
只生长于可接近; 不是无限。 当它停止增长(已接近其实际值), Q(K, A)
为其他A
S能追上。
无论如何,小量的整点是控制你是否要学习过程更加贪婪(启发式)或探索性的(随机),因此增加,如果在学习过程过于狭窄。
另外请注意,对于QL收敛的正式条件之一是,每对(S, A)
被访问的无数次(转述)! 所以,是的,在训练过程结束,你想每对已被访问的次数像样的数目。
祝好运!
正如在评论中提及了,伽马值小于一个就是担保,该款项将不会漂移到正无穷大(假定回报本身是有界的)。
但它确实可以卡住了一会儿一个不错的选择。 有一些事情是可以做的:
乐观初始化:如果你乐观地开始了所有的Q值,然后每次尝试新的东西,你会得到一个“幻灭”,这样,下一次你会想别的尝试一些。 继续这样跌下去,直到你有每个动作的价值的现实意义。
与优势功能的工作:在每一个动作是好的,但有些人比别人更好的情况下,它是利用优势功能(也就是这个动作如何更好地对这种状态的预期回报)来更新您的参数是个好主意。 这是政策的梯度特别有用。
文章来源: Unbounded increase in Q-Value, consequence of recurrent reward after repeating the same action in Q-Learning