【问题标题】:SARSA value approximation for Cart PoleCart Pole 的 SARSA 值近似值
【发布时间】:2023-03-05 18:04:01
【问题描述】:

我有一个关于this SARSA FA 的问题。

在输入单元格 142 中,我看到了这个修改后的更新

w += alpha * (reward - discount * q_hat_next) * q_hat_grad

其中q_hat_nextQ(S', a')q_hat_gradQ(S, a) 的导数(假设S, a, R, S' a' 序列)。

我的问题是更新不应该是这样的吗?

w += alpha * (reward + discount * q_hat_next - q_hat) * q_hat_grad

修改后的更新背后的直觉是什么?

【问题讨论】:

    标签: machine-learning reinforcement-learning openai-gym sarsa


    【解决方案1】:

    我认为你是对的。我还希望更新包含 TD 错误术语,应该是 reward + discount * q_hat_next - q_hat

    作为参考,这是实现:

    if done: # (terminal state reached)
       w += alpha*(reward - q_hat) * q_hat_grad
       break
    else:
       next_action = policy(env, w, next_state, epsilon)
       q_hat_next = approx(w, next_state, next_action)
       w += alpha*(reward - discount*q_hat_next)*q_hat_grad
       state = next_state
    

    这是来自Reinforcement Learning: An Introduction (by Sutton & Barto)(第171页)的伪代码:

    由于实现为TD(0),n为1。那么伪代码中的更新可以简化:

    w <- w + a[G - v(S_t,w)] * dv(S_t,w)
    

    变成(通过替换G == reward + discount*v(S_t+1,w))

    w <- w + a[reward + discount*v(S_t+1,w) - v(S_t,w)] * dv(S_t,w)
    

    或者使用原始代码示例中的变量名:

    w += alpha * (reward + discount * q_hat_next - q_hat) * q_hat_grad
    

    我最终得到了与您相同的更新公式。看起来像是非终端状态更新中的错误。

    只有最终情况(如果 done 为真)应该是正确的,因为根据定义,q_hat_next 始终为 0,因为情节已经结束,无法获得更多奖励。

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2016-10-11
      • 2014-08-05
      相关资源
      最近更新 更多