实施近似(基于特征)q学习的问题

时间:2019-04-06 01:21:14

标签: c++ machine-learning reinforcement-learning q-learning

我是强化学习的新手。最近,我学习了有关近似q学习或基于特征的q学习的知识,其中可以通过特征描述状态以节省空间。我试图在一个简单的网格游戏中实现这一点。在这里,特工应该学会不要进入火坑(由f表示),而要吃掉尽可能多的点。这是使用的网格:

... A
.f.f
.f.f
... f

此处A指示座席的开始位置。现在,在实施时,我设置了两个功能。一个是1 /((到最近点的距离)^ 2),另一个是(到火坑的距离)+1。当代理进入火坑时,程序将返回-100。如果它到达一个已经访问过的非火坑位置(因此没有点被吃掉),则奖励为-50。如果到达未访问的点,则奖励为+500。在上面的网格中,无论初始权重是多少,程序都永远不会学习正确的权重值。具体来说,在输出中,第一个训练课程获得的分数(吃了多少个点)为3,但对于所有其他训练课程,分数仅为1,权重1的权重收敛为错误的值-125(距火堆的距离)和25(重量2)(距未访问点的距离)。我的代码有什么特别错误的地方吗?还是我对近似q学习的理解不正确?

我尝试着尝试环境所给予的回报以及初始权重。这些都不能解决问题。 这是整个程序的链接:https://repl.it/repls/WrongCheeryInterface

这是主循环中发生的事情:

while(points != NUMPOINTS){
bool playerDied = false;
if(!start){
  if(!atFirepit()){
    r = 0;
    if(visited[player.x][player.y] == 0){
      points += 1;
      r += 500;
    }else{
      r += -50;
    }
  }else{
    playerDied = true;
    r = -100;
  }
}

//Update visited
visited[player.x][player.y] = 1;

if(!start){
  //This is based off the q learning update formula
  pairPoint qAndA = getMaxQAndAction();
  double maxQValue = qAndA.q;
  double sample = r;
  if(!playerDied && points != NUMPOINTS)
    sample = r + (gamma2 * maxQValue);
  double diff = sample - qVal;
  updateWeights(player, diff);
}

// checking end game condition
if(playerDied || points == NUMPOINTS) break;

pairPoint qAndA = getMaxQAndAction();
qVal = qAndA.q;
int bestAction = qAndA.a;

//update player and q value
player.x += dx[bestAction];
player.y += dy[bestAction];

start = false;
}

我希望两个权重仍为正,但其中之一为负(与火堆保持距离)。

我还希望程序能够加班学习,进入火堆是不好的,进入一个未访问的点也很糟糕,但还不那么糟。

1 个答案:

答案 0 :(得分:1)

可能不是您想听到的答案,而是:

  • 您是否尝试过在近似Q学习之前实施更简单的表格Q学习?在您的设置中,通过一些状态和动作,它可以完美地工作。如果您正在学习,我强烈建议您从简单的案例开始,以更好地了解/了解强化学习的工作原理。

  • 您知道使用逼近器而不是学习精确的Q函数的含义吗?在某些情况下,由于问题的复杂性(例如,当状态空间连续时),您应该估算Q函数(或策略,具体取决于算法),但这可能会带来一些收敛性问题。此外,在这种情况下,您正在尝试手动选择某些功能,这些功能通常需要对问题(即环境)和学习算法有深入的了解。

  • 您了解超参数 alpha gamma 的含义吗?您不能随机选择它们。有时,它们对于获得预期结果至关重要,而并非总是如此,这在很大程度上取决于问题和学习算法。在您的情况下,查看权重的收敛曲线,很明显您使用的 alpha 值太高。正如您所指出的,在第一次训练后,您的体重保持不变。

因此,实用建议:

  • 在尝试更复杂的事情之前,请务必使用表格Q学习算法来解决您的网格游戏。

  • 具有不同值的 alpha gamma 和奖励的实验。

  • 进一步了解近似RL。萨顿和巴托的经典著作Reinforcement Learning: An Introduction是一本很好的且容易理解的书(从零知识开始),您可以免费获得该书,并于2018年进行了更新。