强化学习-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表异常的大,甚至远远超出内存,这限制了时序差分算法的应用场景。在深度学习兴起后,基于深度学习的强化学习开始占主导地位,所以从下一篇开始咱们开始讨论深度强化学习的建模思路。大数据

相关文章
相关标签/搜索