强化学习(Reinforcement learning)的基本内涵是将问题用代理(Agent,有的地方也将其翻译为智能体)和环境进行建模。其中代理能够对环境执行一些特定的动作 a ∈ A a \in A a∈A,从而到达某个状态 s ∈ S s \in S s∈S,然后我们就可以根据该状态为代理赋予特定的奖励 r r r。强化学习的基本思想如下图所示:
代理的目标是最大化未来的奖励总和,它通过将未来可获得的最大奖励添加到当前的奖励来实现这一点(类似于贪心算法),从而通过潜在的奖励影响当前行动(e.g., 假设知晓未来好好读书就能考上好大学从而使个人将来发展更加顺利,那么从高一开始就会好好学习)。这个潜在奖励(Value)是从当前状态开始的所有未来动作的奖励期望值的加权和。
通常人们用马尔科夫决策过程(Markov decision process,MDP) 来描述强化学习问题,一个基本的MDP问题可以用一个五元组 ( S , A , P , R , γ ) \left( {S,A,P,R,\gamma } \right) (S,A,P,R,γ)来表示,各个符号的含义如下所示:
这样,MDP的目标就是找到一种策略 π ( s ) \pi (s) π(s),使得代理在状态 s s s下能够做出对应的动作 a a a,使得回报(Return) G t G_t Gt能够达到最大:
(1) G t = R t + 1 + γ 1 R t + 1 + γ 2 R t + 2 + … = ∑ k = 0 ∞ γ k R t + k + 1 \begin{aligned} {G_t} &= {R_{t + 1}} + {\gamma ^1}{R_{t + 1}} + {\gamma ^2}{R_{t + 2}} + \ldots \\ &= \sum\limits_{k = 0}^\infty {{\gamma ^k}{R_{t + k + 1}}} \\ \end{aligned} \tag {1} Gt=Rt+1+γ1Rt+1+γ2Rt+2+…=k=0∑∞γkRt+k+1(1)
其中, G t G_t Gt表示回报(Return), R R R表示奖励(Reward), γ \gamma γ表示折扣因子。
现在,我们再定义一个价值函数(Value function),其定义为回报的期望,用于表示当前状态的未来潜在价值(e.g., 小明当前的状态是考上了一所好大学,那么他未来的潜在价值应该比较高):
(2) V ( s ) = E [ G t ∣ S t = s ] V\left( s \right) = \mathbb{E}\left[ {\left. {{G_t}} \right|{S_t} = s} \right] \tag {2} V(s)=E[Gt∣St=s](2)
这里需要注意区分三个概念:Reward(奖励),Return(回报)和Value(价值):
当前,强化学习的有两种思路:基于策略(Policy)函数的强化学习和基于价值(Value)函数的强化学习。
前面的公式(2)提及了价值(Value)是回报(Return)的期望,现在,我们对公式(2)进行展开,得:
(3) V ( s ) = E [ G t ∣ S t = s ] = E [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 R t + 4 + … ∣ S t = s ] = E [ R t + 1 + γ ( R t + 2 + γ R t + 3 + … ) ∣ S t = s ] = E [ R t + 1 + γ ⋅ G t + 1 ∣ S t = s ] \begin{aligned} V\left( s \right) &= \mathbb{E}\left[ {\left. {{G_t}} \right|{S_t} = s} \right] \\ &= \mathbb{E}\left[ {\left. {{R_{t + 1}} + \gamma {R_{t + 2}} + {\gamma ^2}{R_{t + 3}} + {\gamma ^3}{R_{t + 4}} + \ldots } \right|{S_t} = s} \right] \\ &= \mathbb{E}\left[ {\left. {{R_{t + 1}} + \gamma \left( {{R_{t + 2}} + \gamma {R_{t + 3}} + \ldots } \right)} \right|{S_t} = s} \right] \\ &= \mathbb{E}\left[ {\left. {{R_{t + 1}} + \gamma \cdot {G_{t + 1}}} \right|{S_t} = s} \right] \\ \end{aligned} \tag {3} V(s)=E[Gt∣St=s]=E[Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+…∣∣St=s]=E[Rt+1+γ(Rt+2+γRt+3+…)∣St=s]=E[Rt+1+γ⋅Gt+1∣St=s](3)
这里回顾一下, G t G_{t} Gt表示回报(Return)。由于 V ( s ) = E [ G t ∣ S t = s ] V\left( s \right) = \mathbb{E}\left[ {\left. {{G_t}} \right|{S_t} = s} \right] V(s)=E[Gt∣St=s],因此上式可以写成:
(4) V ( s ) = E [ R t + 1 + γ ⋅ V ( s t + 1 ) ∣ S t = s ] V\left( s \right) = \mathbb{E}\left[ {\left. {{R_{t + 1}} + \gamma \cdot V\left( {{s_{t + 1}}} \right)} \right|{S_t} = s} \right] \tag {4} V(s)=E[Rt+1+γ⋅V(st+1)∣St=s](4)
上述公式(4)就是Bellman方程。从Bellman方程可以发现一个规律:当前状态的价值(Value)与两个因素有关:1) 当前的奖励(Reward);2) 下一个迭代时刻的价值(Value)。
e.g., 假设当前的状态是考上了好大学,其价值(Value)是拥有一个高品质人生,当前的奖励(Reward)是接受高品质的高等教育,下一个迭代时刻的价值(Value)是拥有一份稳定的工作和报酬。那么高品质人生 = 接受高品质的高等教育 + 稳定的工作和报酬(即对应上述公式(4))。
假设已知了状态转移概率矩阵 P P P和奖励函数 R R R,结合Bellman方程,我们有
(5) π ( s ) : = arg max a ∑ s ′ P a ( s , s ′ ) ( R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ) : = arg max a E [ R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ] ⎵ V ( s ) : = arg max a V ( s ) \begin{aligned} \pi \left( s \right) &:= \arg \mathop {\max }\limits_a \sum\limits_{s'} {{P_a}\left( {s,s'} \right)\left( {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right)} \\ &:= \arg \mathop {\max }\limits_a \underbrace {\mathbb{E}\left[ {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right]}_{V\left( s \right)} \\ &:= \arg \mathop {\max }\limits_a V\left( s \right) \\ \end{aligned} \tag {5} π(s):=argamaxs′∑Pa(s,s′)(Ra(s,s′)+γ⋅V(s′)):=argamaxV(s) E[Ra(s,s′)+γ⋅V(s′)]:=argamaxV(s)(5)
上述公式翻译过来就是:在状态 s s s,我们的代理会以某种概率执行动作 a a a,从而到达新的状态 s ′ s' s′,我们可以根据这个新的状态 s ′ s' s′计算【奖励(Reward)以及其价值(Value)】,根据Bellman方程,中括号内的部分就是当前状态 s s s的价值(Value)。我们的代理需要在当前状态 s s s下做出一个动作 a a a,使得这个价值(Value)达到最大。
为后续方便起见,我们将上述公式的最后一行针对价值 V ( s ) V(s) V(s)的展开部分独立出来,如下所示:
(6) V ( s ) : = E [ R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ] : = ∑ s ′ P a ( s , s ′ ) ( R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ) \begin{aligned} V\left( s \right) &:= \mathbb{E}\left[ {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right] \\ &:= \sum\limits_{s'} {{P_a}\left( {s,s'} \right)\left( {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right)} \\ \end{aligned} \tag {6} V(s):=E[Ra(s,s′)+γ⋅V(s′)]:=s′∑Pa(s,s′)(Ra(s,s′)+γ⋅V(s′))(6)
基于价值迭代的求解方法中,迭代过程中仅仅更新价值(Value),其迭代公式如下:
(7) V i + 1 ( s ) : = max a ∑ s ′ P a ( s , s ′ ) ( R a ( s , s ′ ) + γ ⋅ V i ( s ′ ) ) {V_{i + 1}}\left( s \right): = \mathop {\max }\limits_a \sum\limits_{s'} {{P_a}\left( {s,s'} \right)\left( {{R_a}\left( {s,s'} \right) + \gamma \cdot {V_i}\left( {s'} \right)} \right)} \tag {7} Vi+1(s):=amaxs′∑Pa(s,s′)(Ra(s,s′)+γ⋅Vi(s′))(7)
基于value的迭代算法描述如下所示:
Initialize array V V V arbitrary (e.g., V ( s ) = 0 V\left( s \right) = 0 V(s)=0 for all s ∈ S + s \in {\mathcal{S}^ + } s∈S+ )
repeat
Δ ← 0 \Delta \leftarrow 0 Δ←0
for each s ∈ S s \in {\mathcal{S} } s∈S
v ← V ( s ) v \leftarrow V\left( s \right) v←V(s)
V ( s ) ← max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] V\left( s \right) \leftarrow {\max _a}\sum\nolimits_{s',r} {p\left( {\left. {s',r} \right|s,a} \right)\left[ {r + \gamma V\left( {s'} \right)} \right]} V(s)←maxa∑s′,rp(s′,r∣s,a)[r+γV(s′)]
Δ ← max ( Δ , ∣ v − V ( s ) ∣ ) \Delta \leftarrow \max \left( {\Delta ,\left| {v - V\left( s \right)} \right|} \right) Δ←max(Δ,∣v−V(s)∣)
end for
until Δ < θ \Delta < \theta Δ<θ ( θ \theta θ is a small positive number)
output: a deterministic policy, π \pi π , such that π ( s ) = arg max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] \pi \left( s \right) = \arg {\max _a}\sum\nolimits_{s',r} {p\left( {\left. {s',r} \right|s,a} \right)\left[ {r + \gamma V\left( {s'} \right)} \right]} π(s)=argmaxa∑s′,rp(s′,r∣s,a)[r+γV(s′)]
从上述算法描述可以看出,价值迭代方法在求解时,会遍历状态集 S S S中所有的状态,将其中具有最大价值的所对应的动作保留下来形成策略 π ( s ) \pi \left(s \right) π(s)。
与基于价值迭代的求解方法不同,基于策略迭代的方法在迭代过程中要同时更新价值(Value)和策略(Policy)。通常它分为如下两个主要步骤:
1. 策略评估。 它对应公式(6),如下所示:
(6) V ( s ) : = E [ R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ] : = ∑ s ′ P a ( s , s ′ ) ( R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ) \begin{aligned} V\left( s \right) &:= \mathbb{E}\left[ {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right] \\ &:= \sum\limits_{s'} {{P_a}\left( {s,s'} \right)\left( {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right)} \\ \end{aligned} \tag {6} V(s):=E[Ra(s,s′)+γ⋅V(s′)]:=s′∑Pa(s,s′)(Ra(s,s′)+γ⋅V(s′))(6)
策略评估的内涵就是在给定的策略下,迭代更新价值(Value)直至收敛,从而得到稳定的价值函数。这么做的意义在于更好地估计当前策略的价值(Value)。
2. 策略改进。 它对应上述公式(5),如下所示:
(5) π ( s ) : = arg max a ∑ s ′ P a ( s , s ′ ) ( R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ) : = arg max a E [ R a ( s , s ′ ) + γ ⋅ V ( s ′ ) ] ⎵ V ( s ) : = arg max a V ( s ) \begin{aligned} \pi \left( s \right) &:= \arg \mathop {\max }\limits_a \sum\limits_{s'} {{P_a}\left( {s,s'} \right)\left( {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right)} \\ &:= \arg \mathop {\max }\limits_a \underbrace {\mathbb{E}\left[ {{R_a}\left( {s,s'} \right) + \gamma \cdot V\left( {s'} \right)} \right]}_{V\left( s \right)} \\ &:= \arg \mathop {\max }\limits_a V\left( s \right) \\ \end{aligned} \tag {5} π(s):=argamaxs′∑Pa(s,s′)(Ra(s,s′)+γ⋅V(s′)):=argamaxV(s) E[Ra(s,s′)+γ⋅V(s′)]:=argamaxV(s)(5)
在策略改进步骤中,代理利用步骤1中更新后的价值(Value)函数,更新每种状态下的策略并迭代,直到策略稳定下来。其迭代算法描述如下所示:
Initialization
V ( s ) ∈ R    and    π ( s ) ∈ A ( s ) V\left( s \right) \in \mathbb{R}\;{\text{and}}\;\pi \left( s \right) \in \mathcal{A}\left( s \right) V(s)∈Randπ(s)∈A(s) arbitrary for all s ∈ S s \in \mathcal{S} s∈S
Policy evaluation
repeat
Δ ← 0 \Delta \leftarrow 0 Δ←0
for each s ∈ S s \in \mathcal{S} s∈S
v ← V ( s ) v \leftarrow V\left( s \right) v←V(s)
V ( s ) ← ∑ s ′ , r p ( s ′ , r ∣ s , π ( s ) ) [ r + γ V ( s ′ ) ] V\left( s \right) \leftarrow \sum\nolimits_{s',r} {p\left( {\left. {s',r} \right|s,\pi \left( s \right)} \right)\left[ {r + \gamma V\left( {s'} \right)} \right]} V(s)←∑s′,rp(s′,r∣s,π(s))[r+γV(s′)]
Δ ← max ( Δ , ∣ v − V ( s ) ∣ ) \Delta \leftarrow \max \left( {\Delta ,\left| {v - V\left( s \right)} \right|} \right) Δ←max(Δ,∣v−V(s)∣)
end for
until Δ < θ \Delta < \theta Δ<θ ( θ \theta θ is a small positive number)
Policy improvement
p o l i c y s t a b l e ← true policystable \leftarrow {\text{true}} policystable←true
for each s ∈ S s \in \mathcal{S} s∈S
a ← π ( s ) a \leftarrow \pi \left( s \right) a←π(s)
π ( s ) ← arg max a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] \pi \left( s \right) \leftarrow \arg {\max _a}\sum\nolimits_{s',r} {p\left( {\left. {s',r} \right|s,a} \right)\left[ {r + \gamma V\left( {s'} \right)} \right]} π(s)←argmaxa∑s′,rp(s′,r∣s,a)[r+γV(s′)]
if a ≠ π ( s ) a \ne \pi \left( s \right) a̸=π(s) then
p o l i c y s t a b l e ← false policystable \leftarrow {\text{false}} policystable←false
end if
end for
if p o l i c y s t a b l e policystable policystable, then
stop and return V V V and π \pi π
else
go to 2
end if
当然,以上两种求解方法也有一些共同点,比如两者在迭代计算过程中都依赖状态转移概率矩阵 P P P和奖励(Reward)函数 R R R。这里需要强调的是状态转移概率矩阵 P P P,如果已知转移概率 P P P也就称为获得了模型 Model,这种通过模型来获取最佳策略的方法也就称为 model-based 的方法。
然而,在现实场景下,有很多问题很难获取状态转移概率矩阵 P P P,因此人们需要采用model-free的方法来找到最佳策略,e.g., Q-learning,Policy Gradient,Actor-Critic,这些方法都属于model-free方法。
本笔记简要说明了强化学习的基本原理,描述了基于贝尔曼方程的MDP问题建模以及两种主要的求解方法——价值(Value)迭代方法和策略(Policy)迭代方法,这两种方法都属于model-based方法,在现实场景下具有一定的局限性,后续笔记将逐步展开介绍一些典型的model-free方法。
参考资料: