上一篇:强化学习RL学习笔记3-gym了解与coding实践
下一篇:强化学习RL学习笔记5-马尔可夫决策过程(MDP)(2)
强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。
本文是笔者对强化学习的一点学习记录,成文于笔者刚开始接触强化学习期间,主要内容参考LeeDeepRL-Notes,学习期间很多概念和理论框架还很不成熟,若文中存在错误欢迎批评指正,也欢迎广大学习者沟通交流、共同进步。
我们设状态的历史为 h t = { s 1 , s 2 , s 3 , … , s t } h_{t}=\left\{s_{1}, s_{2}, s_{3}, \ldots, s_{t}\right\} ht={s1,s2,s3,…,st}( h t h_t ht包含了之前的所有状态),如果一个状态转移是符合马尔可夫的,也就是满足如下两个条件:
即从当前 s t s_t st 转移到 s t + 1 s_{t+1} st+1这个状态,直接等于这之前所有的状态转移到 s t + 1 s_{t+1} st+1。如果某一个过程满足马尔可夫性质(Markov Property),就是说未来的转移跟过去是独立的,它只取决于现在。马尔可夫性质是所有马尔可夫过程的基础。
如上图所示,是一个 马尔科夫链(Markov Chain) 的例子。这个图里面有四个状态,这四个状态从 s 1 s_1 s1, s 2 s_2 s2, s 3 s_3 s3, s 4 s_4 s4之间互相转移。比如说从 s 1 s_1 s1开始:
如果 s 4 s_4 s4是当前状态:
我们可以用如上图所示的 状态转移矩阵(State Transition Matrix) 来描述这样的状态转移。状态转移矩阵类似于一个 conditional probability,当我们知道当前我们在 s t s_t st 这个状态过后,到达下面所有状态的一个概念。所以它每一行其实描述了是从一个节点到达所有其它节点的概率。
上图是一个马尔可夫链的例子,我们这里有七个状态。比如说从 s 1 s_1 s1 开始有 0.4 的概率到 s 2 s s_2s s2s,有 0.6 的概率继续存活在它当前的状态 s 1 s_1 s1 。 s 2 s_2 s2 有 0.4 的概率到 s 1 s_1 s1 ,有 0.4 的概率到 s 3 s_3 s3 ,另外有 0.2 的概率存活在 s 2 s_2 s2 ,所以给定了这个状态转移的马尔可夫链后,我们可以对这个链进行采样,这样就会得到一串的轨迹。
马尔可夫奖励过程(Markov Reward Process, MRP) 是马尔可夫链加上一个奖励函数。在 MRP 中,转移矩阵跟状态都是跟马尔可夫链一样的,多了一个奖励函数(reward function)。奖励函数是一个期望,即到达某一个状态的时候,可以获得多大的奖励,然后这里另外定义了一个 discount factor γ 。
上图还是前文解释的马尔可夫链,如果把奖励也放上去的话,就是说到达每一个状态,我们都会获得一个奖励。这里我们可以设置对应的奖励,比如说到达 s 1 s_1 s1 状态的时候,可以获得 5 的奖励,到达 s 7 s_7 s7 的时候,有 10 的奖励,其它状态没有任何奖励。因为这里状态是有限的,所以我们可以用一个向量来表示这个奖励函数,这个向量表示了每个点的奖励的大小。
这里进一步定义一些概念:
上式有一个叠加系数γ,越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。
G t G_t Gt 是之前定义的 discounted return,这里取了一个期望,期望就是说从这个状态开始,你有可能获得多大的价值。所以这个期望也可以看成是对未来可能获得奖励的它的当前价值的一个表现,就是当你进入某一个状态过后,现在有多大的价值。
为什么需要 discount factor:
这个系数可以作为强化学习 agent 的一个 hyperparameter(超参数) 来进行调整,然后就会得到不同行为的 agent。
仍然是上图的MRP示例,接下来讨论如何计算价值:
我们现在可以计算每一个轨迹得到的奖励,比如我们对于这个 s 4 , s 5 , s 6 , s 7 s_4,s_5,s_6,s_7 s4,s5,s6,s7 轨迹的奖励进行计算,这里折扣系数是 0.5。
所以对于这个轨迹,它的 return 就是 1.25,类似地,可以得到其它轨迹的 return 。
当有了一些轨迹的 return 后,可以通过产生从当前位置出发的所有轨迹取平均的方法来获取前进到当前位置的价值。此即蒙特卡罗采样算法。
但是这里我们采取了另外一种计算方法,我们从价值函数里面推导出 Bellman Equation(贝尔曼等式),如下式所示: V ( s ) = R s ⏟ I m m e d i a t e r e w a r d + γ ∑ s ′ ∈ S P ( s ′ ∣ s ) V ( s ′ ) ⏟ D i s c o u n t e d s u m o f f u t u r e r e w a r d V(s)=\underbrace{R_s}_{\rm{Immediate\ reward}} + \underbrace{γ\sum_{s'\in S}P(s'\mid s)V(s')}_{\rm{Discounted\ sum\ of\ future\ reward}} V(s)=Immediate reward Rs+Discounted sum of future reward γs′∈S∑P(s′∣s)V(s′)
其中:
即当前状态的价值是当前状态的即时价值和未来价值期望( ∑ \sum ∑(向各个状态的转移概率×对应状态的价值))× γ 。
Bellman Equation 定义了当前状态跟未来状态之间的关系。未来打折扣的奖励加上当前立刻可以得到的奖励,就组成了这个 Bellman Equation。 当前状态的值函数可以通过下个状态的值函数来计算。
可以将 Bellman equation 写成矩阵的形式:
可以将矩阵形式的 Bellman equation 转化成下列形式:
V = R + γ P V I V = R + γ P V ( I − γ P ) V = R V = ( I − γ P ) − 1 R \begin{aligned} V& = R+γPV\\ IV& = R+γPV\\ (I-γP)V & = R\\ V&={(I-γP)}^{-1}R \end{aligned} VIV(I−γP)VV=R+γPV=R+γPV=R=(I−γP)−1R
从而可以得到一个解析解:
V = ( I − γ P ) − 1 R V={(I-γP)}^{-1}R V=(I−γP)−1R
由此,可以通过矩阵求逆直接将价值 V 求出,但矩阵求逆的复杂度是 O ( N 3 ) O(N^3) O(N3) ,所以这种通过解析解去求解的方法只适用于小量的 MRP。
Bellman equation 只能解决小量的 MRP ,对于状态很多的 MRP ,可以通过迭代的方法来解:
蒙特卡罗(Monte Carlo)方法就是以当前状态为起点,遍历大量可能轨迹,得到对应的大量 return 。将得到的大量 return 取平均,作为当前状态的价值。
比如说我们要算 s 4 s_4 s4 状态的一个价值。我们就可以从 s 4 s_4 s4 状态开始,随机产生很多轨迹。每个轨迹,我们可以算到它的 return。每个轨迹都会得到一个 return,从而得到大量的 return 。比如说一百个、一千个的 return ,然后直接取一个平均,那么就可以等价于现在 s 4 s_4 s4 价值,因为 s 4 s_4 s4 的价值 V ( s 4 ) V(s_4) V(s4) 定义了你未来可能得到多少的奖励。
也可以用动态规划的办法,一直迭代 Bellman equation,让它最后收敛,就可以得到它的状态。所以算法二就是一个迭代的算法,通过 bootstrapping(拔靴自助) 的办法,然后去不停地迭代这个 Bellman Equation。当这个最后更新的状态跟你上一个状态变化并不大的时候,更新就可以停止,我们就可以输出最新的 V’(s) 作为它当前的状态。所以这里就是把 Bellman Equation 变成一个 Bellman Update,这样就可以得到价值。
动态规划的方法基于后继状态值的估计来更新状态值的估计(算法二中的第 3 行用 V’ 来更新 V )。也就是说,它们根据其他估算值来更新估算值。我们称这种基本思想为 bootstrapping。
上一篇:强化学习RL学习笔记3-gym了解与coding实践
下一篇:强化学习RL学习笔记5-马尔可夫决策过程(MDP)(2)