首先是一个小提示:我不认为你的表达A(sT−1,aT−1)看起来正确。如果我们假设V(sT)=0(即,假设我们不可能一步达到目标sT−1), 我们有:
A(sT−1,aT−1)=r(sT−1,aT−1)+γV(sT)(1−doneT)−V(sT−1)=r(sT−1,aT−1)−V(sT−1).
在这个表达式中,我们通常会有r(sT−1,aT−1)=−0.1, 而你似乎误拿了+0.1在你的帖子里。
撇开这些细节不谈;是的,正如您所描述的,可能会突然出现积极的优势估计。但这不是问题,这正是我们期望根据您对环境的描述发生的情况。
您描述了一个环境,其中代理可能会随机游荡(至少在它还没有学习好的策略时),并且一遍又一遍地产生负奖励。这自然会导致所有遇到的状态的负值估计。突然,它做了一些事情,这一集结束了;它收到了不错的奖励0而不是另一个负面奖励(这实际上“感觉”像奖金,正面奖励,超出预期)。当你的代理还没有学到一个可以达到更好奖励的好策略时1,这确实是一个很好的结果,一个很好的行动,理所当然应该得到加强。
因为这一情节终止的事件大多与状态无关(我说“大部分”,因为理论上它可能最终在接近目标的状态中比在远离目标的状态中稍微少一些),它会最终(在足够的训练时间之后)最终在所有州几乎同样频繁地发生。从忽略当前时间步长的代理的角度来看,这将被视为在非确定性环境中纯粹偶然发生的事件。
这不一定是个问题。由于奖励观察的差异增加(这可以通过使用低学习率/大批量大小来解决),它可能会减慢学习速度,但是强化学习算法几乎总是自然地构建来处理不确定性环境,它可以解决这个问题,它可以对相同状态+动作对观察到的所有不同结果进行平均。这不是一个需要处理的问题。
我的想法:
- 区分实际情节终止和由时间限制引起的情节终止,例如,对于它们,我们不会将下一步值估计替换为0.
- 不知何故添加t状态使得价值函数可以学习预测情节的终止。
第一个想法从根本上改变了你的算法正在学习的数量,它本质上会使你的学习算法不正确。总有可能它似乎仍然可以学习到一些有用的东西(即使存在错误/技术上不正确的部分,许多机器学习/强化学习算法仍然看起来没问题),但它很可能表现更差。
第二个想法,虽然如我上面的回答中所解释的那样没有必要,但只要做得好,它仍然可能有助于学习速度。它可能会有所帮助,因为它可以增加算法“解释”其观察结果的能力,更重要的是“解释”其观察结果的差异。
我看到的主要问题是添加t您的输入是它自然不是二进制变量。很多时候你会发现我们只是在(深度)强化学习算法中使用了一堆二进制输入。当所有输入都具有相同的量级时,更容易让学习过程运行良好,调整学习率等超参数。如果你突然插入一个额外的输入,它可以取更大的值(比如直接加起来t作为输入),这将更加困难。添加tT作为输入可能会更好,因为它仍然会在0和1.