本次是Datawhale的第二次打卡活动, 详情见链接
关键词 | 关键词 |
---|---|
马尔可夫性质 | (Markov Property) |
马尔可夫链 | (Markov Chain) |
状态转移矩阵 | (State Transition Matrix) |
马尔可夫奖励过程 | (Markov Reward Process, MRP) |
奖励函数 | (reward function) |
discount factor | γ |
horizon | 说明了同一个 episode 或者是整个一个轨迹的长度 |
Return | 奖励的逐步叠加 |
state value function | 状态价值函数 |
Gt:discounted return | 折扣奖励 |
Bellman Equation | (贝尔曼等式) |
解析解 | (analytic solution) |
bootstrapping | (拔靴自助) |
马尔可夫决策过程 | (Markov Decision Process) |
Q 函数 | (action-value function) |
Bellman Expectation Equation | 贝尔曼期望等式 |
Backup Diagram | 定义了你未来下一时刻的状态跟你上一时刻的状态之间的一个关联。 |
policy evaluation又叫prediction | 预测你当前采取的这个策略最终会产生多少的价值 |
最佳价值函数 | (Optimal Value Function) |
policy iteration | 策略迭代 |
value iteration | 价值迭代 |
Bellman Optimality Equation | 贝尔曼最佳等式 |
马尔科夫
马尔科夫过程 | 概念 |
---|---|
MRP | ![]() |
MP | ![]() |
MDP | ![]() |
example
MP | ![]() |
MRP | ![]() |
MDP | ![]() |
公式计算
Gt折扣奖励及价值函数 | ![]() |
价值函数化简 | ![]() |
化简具体过程贝尔曼等式 | ![]() |
状态转移及奖励函数 | ![]() |
状态价值函数及动作价值函数 | ![]() |
价值函数和动作价值函数与奖励 | ![]() |
MDP价值函数和动作价值函数 | ![]() |
习题及解答
Keywords
马尔可夫性质(Markov Property): 如果某一个过程未来的转移跟过去是无关,只由现在的状态决定,那么其满足马尔可夫性质。换句话说,一个状态的下一个状态只取决于它当前状态,而跟它当前状态之前的状态都没有关系。
马尔可夫链(Markov Chain): 概率论和数理统计中具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)。
状态转移矩阵(State Transition Matrix): 状态转移矩阵类似于一个 conditional probability,当我们知道当前我们在这个状态过后,到达下面所有状态的一个概念,它每一行其实描述了是从一个节点到达所有其它节点的概率。
马尔可夫奖励过程(Markov Reward Process, MRP): 即马尔可夫链再加上了一个奖励函数。在 MRP之中,转移矩阵跟它的这个状态都是跟马尔可夫链一样的,多了一个奖励函数(reward function)。奖励函数是一个期望,它说当你到达某一个状态的时候,可以获得多大的奖励。
horizon: 定义了同一个 episode 或者是整个一个轨迹的长度,它是由有限个步数决定的。
return: 把奖励进行折扣(discounted),然后获得的对应的收益。
Bellman Equation(贝尔曼等式): 定义了当前状态与未来状态的迭代关系,表示当前状态的值函数可以通过下个状态的值函数来计算。Bellman Equation 因其提出者、动态规划创始人 Richard Bellman 而得名 ,同时也被叫作“动态规划方程”。
Monte Carlo Algorithm(蒙特卡罗方法): 可用来计算价值函数的值。通俗的讲,我们当得到一个MRP过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 Discounted 的奖励 gg 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。
Iterative Algorithm(动态规划方法}: 可用来计算价值函数的值。通过一直迭代对应的Bellman Equation,最后使其收敛。当这个最后更新的状态跟你上一个状态变化并不大的时候,这个更新就可以停止。
Q函数 (action-value function): 其定义的是某一个状态某一个行为,对应的它有可能得到的 return 的一个期望(over policy function)。
MDP中的prediction(即policy evaluation问题): 给定一个 MDP 以及一个 policy \piπ ,去计算它的 value function,即每个状态它的价值函数是多少。其可以通过动态规划方法(Iterative Algorithm)解决。
MDP中的control问题: 寻找一个最佳的一个策略,它的 input 就是MDP,输出是通过去寻找它的最佳策略,然后同时输出它的最佳价值函数(optimal value function)以及它的这个最佳策略(optimal policy)。其可以通过动态规划方法(Iterative Algorithm)解决。
最佳价值函数(Optimal Value Function): 我们去搜索一种 policy π ,然后我们会得到每个状态它的状态值最大的一个情况,就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy)。optimal policy 使得每个状态,它的状态函数都取得最大值。所以当我们说某一个 MDP 的环境被解了过后,就是说我们可以得到一个 optimal value function,然后我们就说它被解了。
2 Questions
为什么在马尔可夫奖励过程(MRP)中需要有discount factor?
答:
首先,是有些马尔可夫过程是带环的,它并没有终结,然后我们想避免这个无穷的奖励;
另外,我们是想把这个不确定性也表示出来,希望尽可能快地得到奖励,而不是在未来某一个点得到奖励;
接上面一点,如果这个奖励是它是有实际价值的了,我们可能是更希望立刻就得到奖励,而不是我们后面再得到奖励。
还有在有些时候,这个系数也可以把它设为 0。比如说,当我们设为 0 过后,然后我们就只关注了它当前的奖励。我们也可以把它设为 1,设为 1 的话就是对未来并没有折扣,未来获得的奖励跟我们当前获得的奖励是一样的。
所以,这个系数其实是应该可以作为强化学习 agent 的一个hyperparameter 来进行调整,然后就会得到不同行为的 agent。
为什么矩阵形式的Bellman Equation的解析解比较难解?
答:通过矩阵求逆的过程,就可以把这个 V 的这个价值的解析解直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 O(N^3),所以就当我们状态非常多的时候,比如说从我们现在十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的一个矩阵。这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去解,只能对于很小量的MRP。
计算贝尔曼等式(Bellman Equation)的常见方法以及区别?
答:
Monte Carlo Algorithm(蒙特卡罗方法): 可用来计算价值函数的值。通俗的讲,我们当得到一个MRP过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 Discounted 的奖励 gg 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。
Iterative Algorithm(动态规划方法): 可用来计算价值函数的值。通过一直迭代对应的Bellman Equation,最后使其收敛。当这个最后更新的状态跟你上一个状态变化并不大的时候,通常是小于一个阈值 \gammaγ ,这个更新就可以停止。
以上两者的结合方法: 另外我们也可以通过 Temporal-Difference Learning 的那个办法。这个 Temporal-Difference Learning 叫 TD Leanring,就是动态规划和蒙特卡罗的一个结合。
马尔可夫奖励过程(MRP)与马尔可夫决策过程 (MDP)的区别?
答:相对于 MRP,马尔可夫决策过程(Markov Decision Process)多了一个 decision,其它的定义跟 MRP 都是类似的。这里我们多了一个决策,多了一个 action ,那么这个状态转移也多了一个 condition,就是采取某一种行为,然后你未来的状态会不同。它不仅是依赖于你当前的状态,也依赖于在当前状态你这个 agent 它采取的这个行为会决定它未来的这个状态走向。对于这个价值函数,它也是多了一个条件,多了一个你当前的这个行为,就是说你当前的状态以及你采取的行为会决定你在当前可能得到的奖励多少。
另外,两者之间是由转换关系的。具体来说,已知一个 MDP 以及一个 policy π 的时候,我们可以把 MDP 转换成MRP。在 MDP 里面,转移函数 P(s’|s,a) 是基于它当前状态以及它当前的 action,因为我们现在已知它 policy function,就是说在每一个状态,我们知道它可能采取的行为的概率,那么就可以直接把这个 action 进行加和,那我们就可以得到对于 MRP 的一个转移,这里就没有 action。同样地,对于奖励,我们也可以把 action 拿掉,这样就会得到一个类似于 MRP 的奖励。
MDP 里面的状态转移跟 MRP 以及 MP 的结构或者计算方面的差异?
答:
对于之前的马尔可夫链的过程,它的转移是直接就决定,就从你当前是 s,那么就直接通过这个转移概率就直接决定了你下一个状态会是什么。
但是对于 MDP,它的中间多了一层这个行为 a ,就是说在你当前这个状态的时候,你首先要决定的是采取某一种行为。然后因为你有一定的不确定性,当你当前状态决定你当前采取的行为过后,你到未来的状态其实也是一个概率分布。所以你采取行为以及你决定,然后你可能有有多大的概率到达某一个未来状态,以及另外有多大概率到达另外一个状态。所以在这个当前状态跟未来状态转移过程中这里多了一层决策性,这是MDP跟之前的马尔可夫过程很不同的一个地方。在马尔科夫决策过程中,行为是由 agent 决定,所以多了一个 component,agent 会采取行为来决定未来的状态转移。
我们如何寻找最佳的policy,方法有哪些?
答:本质来说,当我们取得最佳的价值函数过后,我们可以通过对这个 Q 函数进行极大化,然后得到最佳的价值。然后,我们直接在这个Q函数上面取一个让这个action最大化的值,然后我们就可以直接提取出它的最佳的policy。
具体方法:
穷举法(一般不使用):假设我们有有限多个状态、有限多个行为可能性,那么每个状态我们可以采取这个 A 种行为的策略,那么总共就是 |A|^{|S|}个可能的 policy。我们可以把这个穷举一遍,然后算出每种策略的 value function,然后对比一下可以得到最佳策略。但是效率极低。
Policy iteration: 一种迭代方法,有两部分组成,下面两个步骤一直在迭代进行,最终收敛:(有些类似于ML中EM算法(期望-最大化算法))
- 第一个步骤是 policy evaluation ,即当前我们在优化这个 policy \piπ ,所以在优化过程中得到一个最新的这个 policy 。
- 第二个步骤是 value iteration ,即取得价值函数后,进一步推算出它的 Q 函数。得到 Q 函数过后,那我们就直接去取它的极大化。
Value iteration: 我们一直去迭代 Bellman Optimality Equation,到了最后,它能逐渐趋向于最佳的策略,这是 value iteration 算法的精髓,就是我们去为了得到最佳的 v^* ,对于每个状态它的 v ^*这个值,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次之后它就会收敛到最佳的policy以及其对应的状态,这里面是没有policy function的。
表格型方法
1 Keywords
P函数和R函数: P函数反应的是状态转移的概率,即反应的环境的随机性,R函数就是Reward function。但是我们通常处于一个未知的环境(即P函数和R函数是未知的)。
Q表格型表示方法: 表示形式是一种表格形式,其中横坐标为 action(agent)的行为,纵坐标是环境的state,其对应着每一个时刻agent和环境的情况,并通过对应的reward反馈去做选择。一般情况下,Q表格是一个已经训练好的表格,不过,我们也可以每进行一步,就更新一下Q表格,然后用下一个状态的Q值来更新这个状态的Q值(即时序差分方法)。
时序差分(Temporal Difference): 一种Q函数(Q值)的更新方式,
SARSA算法: 一种更新前一时刻状态的单步更新的强化学习算法,也是一种on-policy策略。该算法由于每次更新值函数需要知道前一步的状态(state),前一步的动作(action)、奖励(reward)、当前状态(state)、将要执行的动作(action),
2 Questions
构成强化学习MDP的四元组有哪些变量?
答:状态、动作、状态转移概率和奖励,分别对应(S,A,P,R),后面有可能会加上个衰减因子构成五元组。
基于以上的描述所构成的强化学习的“学习”流程。
答:强化学习要像人类一样去学习了,人类学习的话就是一条路一条路的去尝试一下,先走一条路,我看看结果到底是什么。多试几次,只要能一直走下去的,我们其实可以慢慢的了解哪个状态会更好。我们用价值函数 V(s)V(s) 来代表这个状态是好的还是坏的。然后用这个 Q 函数来判断说在什么状态下做什么动作能够拿到最大奖励,我们用 Q 函数来表示这个状态-动作值。
基于SARSA算法的agent的学习过程。
答:我们现在有环境,有agent。每交互一次以后,我们的agent会向环境输出action,接着环境会反馈给agent当前时刻的state和reward。那么agent此时会实现两个方法:
1.使用已经训练好的Q表格,对应环境反馈的state和reward选取对应的action进行输出。使用这几个值
去更新我们的Q表格。
Q-learning和Sarsa的区别?
答:Sarsa算法是Q-learning算法的改进。(这句话出自「神经网络与深度学习」的第 342 页)(可参考SARSA「on-line q-learning using connectionist systems」的 abstract 部分)
首先,Q-learning 是 off-policy 的时序差分学习方法,Sarsa 是 on-policy 的时序差分学习方法。
其次,Sarsa 在更新 Q 表格的时候,它用到的 A’ 。我要获取下一个 Q 值的时候,A’ 是下一个 step 一定会执行的 action 。这个 action 有可能是 \varepsilonε-greddy 方法 sample 出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作。但是就是它实实在在执行了的那个动作。
但是 Q-learning 在更新 Q 表格的时候,它用到这个的 Q 值 对应的那个 action ,它不一定是下一个 step 会执行的实际的 action,因为你下一个实际会执行的那个 action 可能会探索。Q-learning 默认的 action 不是通过 behavior policy 来选取的,它是默认 A’ 为最优策略选的动作,所以 Q-learning 在学习的时候,不需要传入 A’,即 a_{t+1}a
t+1
的值。
更新公式的对比(区别只在target计算这一部分):
Sarsa 实际上都是用自己的策略产生了 S,A,R,S’,A’ 这一条轨迹。然后拿着 但是 Q-learning 并不需要知道,我实际上选择哪一个 action ,它默认下一个动作就是 Q 最大的那个动作。所以基于此,Sarsa的action通常会更加“保守”、“胆小”,而对应的Q-Learning的action会更加“莽撞”、“激进”。
On-policy和 off-policy 的区别?
答:Sarsa 就是一个典型的 on-policy 策略,它只用一个 \piπ ,为了兼顾探索和利用,所以它训练的时候会显得有点胆小怕事。它在解决悬崖问题的时候,会尽可能地离悬崖边上远远的,确保说哪怕自己不小心探索了一点了,也还是在安全区域内不不至于跳进悬崖。
Q-learning 是一个比较典型的 off-policy 的策略,它有目标策略 target policy,一般用 \piπ 来表示。然后还有行为策略 behavior policy,用 \muμ 来表示。它分离了目标策略跟行为策略。Q-learning 就可以大胆地用 behavior policy 去探索得到的经验轨迹来去优化我的目标策略。这样子我更有可能去探索到最优的策略。
比较 Q-learning 和 Sarsa 的更新公式可以发现,Sarsa 并没有选取最大值的 max 操作。因此,Q-learning 是一个非常激进的算法,希望每一步都获得最大的利益;而 Sarsa 则相对非常保守,会选择一条相对安全的迭代路线。