sarsa與q_learning的區別:
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 前所有經歷的步.
Q Learning 和SARSA演算法
q更新公式 greedy策略 在q learning的更新過程中,每一步都要根據當前的state以及q函式確定乙個合適的行動action。這裡有乙個如何平衡 經驗 和 探索 的問題。如果完全按照經驗行動,即每次都在q state,中選擇對應值最大的action,那麼很有可能一直侷限在已有經驗中,難以...
Q learning和Sarsa的區別
因此對於sarsa來說 1.在狀態s 時,就知道了要採取哪個a 並真的採取了這個動作。2.動作a的選取遵循e greedy策略,目標q值的計算也是根據 e greedy 策略得到的動作a 計算得來,因此為on policy學習。選擇下個動作的存在探索的可能性 而對於q learning來說 只會選擇...
強化學習Sarsa
演算法如下 相比q learning而言,sarsa會比較膽小,不希望自己掉進陷阱裡,從而做出的決策都比較謹慎 而q learning會選擇一條雖然比較危險但是可以成功的道路 off policy class qlearningtable rl def init self,actions,learn...