SARSA 和 Q-learning 中的更新在代码上有何不同?

人工智能 强化学习 q学习
2021-11-09 16:59:33

Q-learning 和 SARSA 的更新规则如下:

问学习:

Q(st,at)Q(st,at)+α[rt+1+γmaxaQ(st+1,a)Q(st,at)]

沙萨:

Q(st,at)Q(st,at)+α[rt+1+γQ(st+1,at+1)Q(st,at)]

我理解 SARSA 执行“on-policy”更新和 Q-learning 执行“off-policy”更新的理论。

目前我通过计算目标来执行 Q 学习:

target = reward + self.y * np.max(self.action_model.predict(state_prime))

在这里你可以看到我为状态素数选择了 Q 函数的最大值(即更新规则中由 maxQ 定义的贪婪选择)。如果我要进行 SARSA 更新并使用与选择操作时相同的 on-policy,例如 ϵ-greedy,我基本上会更改为:

if np.random.random() < self.eps:
    target = reward + self.y * self.action_model.predict(state_prime)[random.randint(0,9)]
else:
    target = reward + self.y * np.max(self.action_model.predict(state_prime))

所以有时它会根据我的 epsilon 贪婪策略选择一个随机的未来奖励?

1个回答

选择操作和进行更新应该被视为不同的事情。对于 Q 学习,您还需要使用一些探索策略(例如 -greedy)进行探索。ϵ

Q 学习的步骤:
1)初始化状态 对于情节的每一步: 2)通过一些探索性策略(例如 -greedy)从状态 3)采取动作并观察 4)做更新 5) 更新状态并从第 2 步一直循环到剧集结束S

AϵS
ARS
Q(S,A)=Q(S,A)+α(R+γmaxaQ(S,a)Q(S,A))
S=S

Sarsa 的步骤:
1)初始化状态 2)通过一些探索性策略(例如 -greedy)从状态 对于情节的每一步: 3)采取动作并观察 4)选择通过某种探索性策略(例如 -greedy)从状态的动作 5) 执行更新 6) 更新状态和动作 ,并从第 3 步开始循环直到剧集结束S
ASϵ

ARS
ASϵ
Q(S,A)=Q(S,A)+α(R+γQ(S,A)Q(S,A))
S=SA=A