1. 程式人生 > >SARSA與Q-learning的區別

SARSA與Q-learning的區別

莫煩強化學習視訊 https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/

SARSA與Q_learning的區別:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/3-1-tabular-sarsa1/

Sarsa 的整個迴圈都將是在一個路徑上, 也就是 on-policy, 下一個 state_, 和下一個 action_ 將會變成他真正採取的 action 和 state. 和 Qlearning 的不同之處就在這. Qlearning 的下個一個 state_ action_ 在演算法更新的時候都還是不確定的 (off-policy). 而 Sarsa 的 state_, action_ 在這次演算法更新的時候已經確定好了 (on-policy).


Q-learning演算法流程


SARSA演算法流程

整個演算法還是一直不斷更新 Q table 裡的值, 然後再根據新的值來判斷要在某個 state 採取怎樣的 action. 不過於 Qlearning 不同之處:
他在當前 state 已經想好了 state 對應的 action, 而且想好了 下一個 state_ 和下一個 action_ (Qlearning 還沒有想好下一個 action_)
更新 Q(s,a) 的時候基於的是下一個 Q(s_, a_) (Qlearning 是基於 maxQ(s_))
這種不同之處使得 Sarsa 相對於 Qlearning, 更加的膽小. 因為 Qlearning 永遠都是想著 maxQ 最大化, 因為這個 maxQ 而變得貪婪, 不考慮其他非 maxQ 的結果. 我們可以理解成 Qlearning 是一種貪婪, 大膽, 勇敢的演算法, 對於錯誤, 死亡並不在乎. 而 Sarsa 是一種保守的演算法, 他在乎每一步決策, 對於錯誤和死亡比較銘感. 這一點我們會在視覺化的部分看出他們的不同. 兩種演算法都有他們的好處, 比如在實際中, 你比較在乎機器的損害, 用一種保守的演算法, 在訓練時就能減少損壞的次數.

Sarsa-lambda 是基於 Sarsa 方法的升級版, 他能更有效率地學習到怎麼樣獲得好的 reward. 如果說 Sarsa 和 Qlearning 都是每次獲取到 reward, 只更新獲取到 reward 的前一步. 那 Sarsa-lambda 就是更新獲取到 reward 的前 lambda 步. lambda 是在 [0, 1] 之間取值,
如果 lambda = 0, Sarsa-lambda 就是 Sarsa, 只更新獲取到 reward 前經歷的最後一步.
如果 lambda = 1, Sarsa-lambda 更新的是 獲取到 reward 前所有經歷的步.