强化学习 Reinforce Learning
强化学习区别于机器学习的一点是,强化学习是来做决策的。根据环境的反馈,做出决策。 外界环境情况复杂,和环境的交互主要有 环境的状态 stat、智能体的动作、和对动作带来收益的评价 reward。
这里面涉及2个对象,agent 和 env。 agent 根据环境状态 做出动作即决策,环境env根据 agent 当前的状态和动作,返回下一个状态。 循环往复,直到环境给出结束的状态。
在算法实践里,环境 env 是人为设计好的,这个需要精心的构造,来反映客观世界的环境。学习者不用关心这部分,有现成的一些环境供实验。
这里介绍的表格型算法,主要解决的是有限状态和有限动作的情况。这方面典型算法 SARSA 和 QLearning 。
Sarsa (state-action-reward-state'-action')
Sarsa 是 On Policy 算法,学习特定 stat 、action 下的价值 Q,最终建立一个 Q 表格,stat 行、action 列。
根据与环境交互得到的 reward 来更新 Q 表格。
Q 表格更新公式: Q(St,At) = Q(St,At) + α * [ Rt+1 +γ * Q(St+1,At+1) - Q(St , At)]
Rt+1 来自与环境对(St,At)得奖励。
SARSA 在行动中学习。 只有1个 Policy ,使用了两次 greedy-epsilon 选出 Q(St,At) 和 Q(St+1,At+1)。
Q Learninng
Q learning 是 Off Policy 算法
更新 Q 表格得公式:
Q(St,At) = Q(St,At) + α * [ Rt+1 +γ * max ( Q(St+1, : ) ) - Q(St , At)]
SARSA 和 Q learning 差别仅在 下一步的 Q(St+1, At+1) 计算这里不一样。
关于算法主要有2点:
1. Q 表格更新 看似是需要用到下一个动作和状态的奖励,似乎是个迭代的过程,如何计算?
当前的价值 要由 当前(St,At)和(St+1,At+1)的价值来确定,这样迭代下去不就是追溯到结束才能算出第一个动作的价值。其实这里做了简化处理,初始化 Q 表格后,确定性的动作和状态知道后就知道价值了,所以不用考虑那么长远,即 next_obs,reward = env.step(action) ,再根据 next_obs, 根据策略选择(有一定几率随机)next_action, 然后查 next_q 。
2. 什么是 on Policy 和 off Policy ?
知乎@三笠 On Policy 与 off Policy 的区别在于:更新价值所使用的方法沿着既定的策略(on Policy)抑或是新策略(off Policy) 。
Sarsa 当前的Q是是基于既定策略, next_Q选择也是基于按既定策略多走一步得到的 Q。(这里有一定概率不是当前最优的。)
而Q learning, 当前动作的 Q 既定策略的(有一定随机概率), 但 next_Q 直接选 max(Q(next_obs,:)) 最优的, 不选随机的项。