实施近似(基于特征)q 学习的问题
Problems with implementing approximate(feature based) q learning
我是强化学习的新手。我最近学习了近似 q 学习,或基于特征的 q 学习,其中您通过特征描述状态以节省 space。我试图在一个简单的网格游戏中实现这一点。在这里,代理应该学会不进入火坑(由 f 发出信号),而是尽可能多地吃掉点。这是使用的网格:
...一个
.f.f
.f.f
...f
此处 A 指示代理的起始位置。现在,在实施时,我设置了两个功能。一个是 1/((到最近点的距离)^2),另一个是 (到火坑的距离) + 1。当代理进入火坑时,程序 returns 的奖励为 -100。如果它到达一个已经被访问过的非火坑位置(因此没有点可以被吃掉),奖励是 -50。如果它到达一个未访问的点,则奖励为 +500。在上面的网格中,无论初始权重是多少,程序永远不会学习到正确的权重值。具体来说,在输出中,第一个训练课程获得的分数(它吃了多少点)为 3,但对于所有其他训练课程,分数仅为 1,权重收敛到错误的值 -125,权重为 1(到火坑的距离)和权重 2 的 25(到未访问点的距离)。是我的代码有什么特别的问题,还是我对近似 q 学习的理解不正确?
我试过玩弄环境给予的奖励以及初始权重。 None 其中已解决问题。
这是整个程序的 link: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;
}
我希望这两个权重仍然是正的,但其中一个是负的(那个给出了到火坑的距离)。
我还希望程序能够随着时间的推移学习到进入火坑是不好的,去一个未访问过的点也不好,但没有那么糟糕。
可能不是您想听到的答案,但是:
您是否尝试在 近似 Q 学习 之前实现更简单的 表格 Q 学习?在您的设置中,只需几个状态和动作,它就会完美地工作。如果您正在学习,我强烈建议您从更简单的案例开始,以便更好地 understanding/intuition 了解强化学习的工作原理。
你知道使用逼近器而不是学习确切的 Q 函数的含义吗?在某些情况下,由于问题的复杂性(例如,当状态 space 是连续的时),您应该近似 Q 函数(或策略,取决于算法),但这可能会引入一些收敛问题。此外,在您的情况下,您正在尝试手动挑选一些功能,这通常需要对问题(即环境)和学习算法有深入的了解。
你明白超参数alpha和gamma的含义了吗?你不能随意选择它们。有时它们对于获得预期结果至关重要,但并非总是如此,这在很大程度上取决于问题和学习算法。在你的例子中,看看你权重的收敛曲线,很明显你使用的 alpha 值太高了。正如您所指出的,在第一次训练后,您的体重保持不变。
因此,实用建议:
在尝试更复杂的事情之前,请务必使用表格 Q 学习算法解决您的网格游戏。
用不同的 alpha、gamma 和奖励进行实验。
深入了解近似 RL。 Sutton and Barto 的经典之作Reinforcement Learning: An Introduction,非常好又易读(从零知识开始),2018 年更新
我是强化学习的新手。我最近学习了近似 q 学习,或基于特征的 q 学习,其中您通过特征描述状态以节省 space。我试图在一个简单的网格游戏中实现这一点。在这里,代理应该学会不进入火坑(由 f 发出信号),而是尽可能多地吃掉点。这是使用的网格:
...一个
.f.f
.f.f
...f
此处 A 指示代理的起始位置。现在,在实施时,我设置了两个功能。一个是 1/((到最近点的距离)^2),另一个是 (到火坑的距离) + 1。当代理进入火坑时,程序 returns 的奖励为 -100。如果它到达一个已经被访问过的非火坑位置(因此没有点可以被吃掉),奖励是 -50。如果它到达一个未访问的点,则奖励为 +500。在上面的网格中,无论初始权重是多少,程序永远不会学习到正确的权重值。具体来说,在输出中,第一个训练课程获得的分数(它吃了多少点)为 3,但对于所有其他训练课程,分数仅为 1,权重收敛到错误的值 -125,权重为 1(到火坑的距离)和权重 2 的 25(到未访问点的距离)。是我的代码有什么特别的问题,还是我对近似 q 学习的理解不正确?
我试过玩弄环境给予的奖励以及初始权重。 None 其中已解决问题。 这是整个程序的 link: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;
}
我希望这两个权重仍然是正的,但其中一个是负的(那个给出了到火坑的距离)。
我还希望程序能够随着时间的推移学习到进入火坑是不好的,去一个未访问过的点也不好,但没有那么糟糕。
可能不是您想听到的答案,但是:
您是否尝试在 近似 Q 学习 之前实现更简单的 表格 Q 学习?在您的设置中,只需几个状态和动作,它就会完美地工作。如果您正在学习,我强烈建议您从更简单的案例开始,以便更好地 understanding/intuition 了解强化学习的工作原理。
你知道使用逼近器而不是学习确切的 Q 函数的含义吗?在某些情况下,由于问题的复杂性(例如,当状态 space 是连续的时),您应该近似 Q 函数(或策略,取决于算法),但这可能会引入一些收敛问题。此外,在您的情况下,您正在尝试手动挑选一些功能,这通常需要对问题(即环境)和学习算法有深入的了解。
你明白超参数alpha和gamma的含义了吗?你不能随意选择它们。有时它们对于获得预期结果至关重要,但并非总是如此,这在很大程度上取决于问题和学习算法。在你的例子中,看看你权重的收敛曲线,很明显你使用的 alpha 值太高了。正如您所指出的,在第一次训练后,您的体重保持不变。
因此,实用建议:
在尝试更复杂的事情之前,请务必使用表格 Q 学习算法解决您的网格游戏。
用不同的 alpha、gamma 和奖励进行实验。
深入了解近似 RL。 Sutton and Barto 的经典之作Reinforcement Learning: An Introduction,非常好又易读(从零知识开始),2018 年更新