強化學習-Q-Learning算法

1. 前言

Q-Learning算法也是時序差分算法的一種,和咱們前面介紹的SARAS不一樣的是,SARSA算法聽從了交互序列,根據當前的真實行動進行價值估計;Q-Learning算法沒有遵循交互序列,而是在當前時刻選擇了使價值最大的行動。python

2. Q-Learning

Q-Learning算法在計算當前時刻的行動-狀態價值\(q_t(s_t,a_t)\)時選擇了當前狀態使價值最大的行動\(max_aq_{t-1}(s_{t})\)git

Q-Learning的迭代公式在SARAS的基礎上進行了一些修改,以下:github

\[ q_{t}(s_{t},a_{t}) = q_{t-1}(s_{t-1},a_{t-1}) + \frac{1}{N}(r_t + \gamma*max_aq_{t-1}(s_t) - q_{t-1}(s_{t-1},a_{t-1})) \]算法

3. Q-Learning代碼實現

Q-Learning公式和SARAS的公式十分相像,因此策略提高依然沒有變化,策略評估有一點微小的修改(完整代碼GitHub)。函數

def q_learn_eval(self, agent, env):
    state = env.reset()
    prev_state = -1
    prev_act = -1
    while True:
        act = agent.play(state, self.epsilon)
        next_state, reward, terminate, _ = env.step(act)
        if prev_act != -1:
            # qlearning的迭代公式
            return_val = reward + agent.gamma * (0 if terminate else np.max(agent.value_q[state, :]))
            agent.value_n[prev_state][prev_act] += 1
            agent.value_q[prev_state][prev_act] += (return_val - agent.value_q[prev_state][prev_act]) / agent.value_n[prev_state][prev_act]

        prev_act = act
        prev_state = state
        state = next_state

        if terminate:
            break

4. SARAS和Q-Learning比較

SARSA算法和Q-Learning算法在公式上的不一樣,實際上這兩種算法表明了兩種策略評估的方式,分別是On-Policy和Off-Policy學習

  • On-Policy:對值函數的更新是徹底依據交互序列進行的,咱們在計算時認爲價值能夠直接使用採樣的序列估計獲得。
  • Off-Policy:更新值函數時並不徹底遵循交互序列,而是選擇來自其餘策略的交互序列的子部分替換了本來的交互序列。從算法的思想上來講,Q-Learning的思想更復雜,它結合了子部分的最優價值,更像是結合了價值迭代的更新算法,但願每一次都使用前面迭代積累的最優結果進行更新。

5. 總結

對於Q-Learning和SARSA這樣的時序差分算法,對於小型的強化學習問題是很是靈活有效的,可是在大數據時代,異常複雜的狀態和可選動做,使Q-Learning和SARSA要維護的Q表異常的大,甚至遠遠超出內存,這限制了時序差分算法的應用場景。在深度學習興起後,基於深度學習的強化學習開始占主導地位,所以從下一篇開始咱們開始討論深度強化學習的建模思路。大數據

相關文章
相關標籤/搜索