参考:
- 《动手学强化学习》 张伟楠、沈键、俞勇
- 强化学习课程:https://www.bilibili.com/video/BV1oN4y1F7UM/
- 强化学习入门 第三讲 蒙特卡罗方法:https://zhuanlan.zhihu.com/p/25743759
- 强化学习进阶 第六讲 策略梯度方法:https://zhuanlan.zhihu.com/p/26174099
- 强化学习入门 第四讲 时间差分法(TD):https://zhuanlan.zhihu.com/p/25913410
本文是对以上参考链接的学习总结,如果错误欢迎指出~
强化学习解决的问题是序贯问题,智能体需要连续不断地做出决策,来实现最终目标
强化学习的过程可以用下图来描述:智能体通过动作与环境进行交互时,环境会返给智能体一个当前的回报,智能体根据当前的回报评估所采取的动作,如果动作有利于目标实现则保留,否则就衰减
强化学习是智能体不断与环境进行交互来实现目标的一种方法。
智能体感知环境的某一个状态,根据状态决策下一步的动作并作用于环境,环境根据自己的状态和智能体的动作产生奖励反馈给智能体。
智能体最终的目标是通过做决策来最大化序贯决策中的累积奖励期望:
最 优 策 略 = arg max 策 略 E ( 状 态 , 动 作 ) ∼ 策 略 的 占 用 度 量 [ 奖 励 函 数 ( 状 态 , 动 作 ) ] 最优策略=\arg \max\limits_{策略}E_{(状态,动作)\sim 策略的占用度量}[奖励函数(状态,动作)] 最优策略=arg策略maxE(状态,动作)∼策略的占用度量[奖励函数(状态,动作)]
另外,在交互学习中,有探索和利用两个概念,探索是指尝试更多的可能,利用是指采取已知期望奖励中最大的策略,强化学习过程中需要注意二者的平衡
强化学习的过程可以用一个马尔可夫决策过程来描述:
马尔可夫决策过程由元组 < S , A , P , r , γ > <\mathcal{S},\mathcal{A},P,r,\gamma> <S,A,P,r,γ>构成:
在一个马尔可夫奖励过程中,从 t t t时刻状态 S t S_t St开始,直到终止状态,所有奖励的衰减之和称为回报,如下
G t = R t + γ R t + 1 + γ 2 R t + 2 + ⋯ = ∑ k = 0 ∞ γ k R t + k G_t=R_{t}+\gamma R_{t+1}+\gamma^2 R_{t+2}+\dots=\sum\limits_{k=0}^ \infty \gamma^kR_{t+k} Gt=Rt+γRt+1+γ2Rt+2+⋯=k=0∑∞γkRt+k
其中, R t R_t Rt表示在时刻 t t t获得的奖励
在马尔可夫奖励过程中,一个状态的期望回报被称为这个状态的价值,所有状态的价值就组成了价值函数,价值函数的输入为某个状态,输出为这个状态的价值.
价值函数可以写为:
V ( s ) = E [ G t ∣ S t = s ] = E [ R t + γ R t + 1 + γ 2 R t + 2 + … ∣ S t = s ] = E [ R t + γ ( R t + 1 + γ R t + 2 + … ) ∣ S t = s ] = E [ R t + γ G t + 1 ∣ S t = s ] = E [ R t + γ V ( S t + 1 ) ∣ S t = s ] \begin{aligned} V(s) &= E[G_t|S_t=s]\\ &= E[R_{t}+\gamma R_{t+1}+\gamma^2 R_{t+2}+\dots|S_t=s] \\ &= E[R_{t}+\gamma (R_{t+1}+\gamma R_{t+2}+\dots)|S_t=s] \\ &= E[R_{t}+\gamma G_{t+1}|S_t=s] \\ &= E[R_{t}+\gamma V(S_{t+1})|S_t=s] \end{aligned} V(s)=E[Gt∣St=s]=E[Rt+γRt+1+γ2Rt+2+…∣St=s]=E[Rt+γ(Rt+1+γRt+2+…)∣St=s]=E[Rt+γGt+1∣St=s]=E[Rt+γV(St+1)∣St=s]
其贝尔曼方程表示为:
V ( s ) = r ( s ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s ) V ( s ′ ) — — 贝 尔 曼 方 程 = E [ R t ∣ S t = s ] + E [ γ V ( S t + 1 ) ∣ S t = s ] \begin{aligned} V(s)&=r(s)+\gamma \sum\limits_{s'\in \mathcal{S}}P(s'|s)V(s') \qquad \qquad ——贝尔曼方程 \\ &=E[R_{t}|S_t=s]+E[\gamma V(S_{t+1})|S_t=s] \\ \end{aligned} V(s)=r(s)+γs′∈S∑P(s′∣s)V(s′)——贝尔曼方程=E[Rt∣St=s]+E[γV(St+1)∣St=s]
该方程对每一个状态都成立。
智能体根据当前状态从动作集合中选择一个动作函数,称为策略,通常用 π \pi π表示。
π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s)=P(A_t=a|S_t=s) π(a∣s)=P(At=a∣St=s)是一个函数,表示策略 π \pi π在输入状态为 s s s的情况下,采取动作 a a a的概率。
策略分为确定性策略和随机性策略。
表示从状态 s s s出发遵循策略 π \pi π能获得的期望回报,定义为
V π ( s ) = E π [ G t ∣ S t = s ] = E π [ R t + 1 + γ V π ( S t + 1 ) ∣ S t = s ] = ∑ a ∈ A π ( a ∣ s ) ( r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V π ( s ′ ) ) \begin{aligned} V_\pi(s)&=E_{\pi}[G_t|S_t=s]\\ &=E_\pi[R_{t+1}+\gamma V_\pi(S_{t+1})|S_t=s]\\ &=\sum\limits_{a\in \mathcal{A}}\pi(a|s)\left(r(s,a)+\gamma \sum\limits_{s'\in \mathcal{S}}P(s'|s,a)V_\pi(s')\right) \end{aligned} Vπ(s)=Eπ[Gt∣St=s]=Eπ[Rt+1+γVπ(St+1)∣St=s]=a∈A∑π(a∣s)(r(s,a)+γs′∈S∑P(s′∣s,a)Vπ(s′))
给定策略 π \pi π时,该函数可以评价当前状态的好坏,给定状态时,该函数可以评价当前策略的好坏
策略是静态的、不随状态改变的;但是在某一个状态根据策略产生的动作是不确定的,是有一定概率的。
能够描述不同状态下执行不同动作的概率的“函数”就是策略。
表示对当前状态 s s s执行动作 a a a得到的期望回报
q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] = r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V π ( s ′ ) = r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) \begin{aligned} q_\pi(s,a)&=E_\pi[G_t|S_t=s,A_t=a]\\ &=r(s,a)+\gamma\sum\limits_{s'\in\mathcal{S}}P(s'|s,a)V_\pi(s')\\ &=r(s,a)+\gamma\sum\limits_{s'\in\mathcal{S}}P(s'|s,a)\sum\limits_{a'\in\mathcal{A}}\pi(a'|s')q_\pi(s',a') \end{aligned} qπ(s,a)=Eπ[Gt∣St=s,At=a]=r(s,a)+γs′∈S∑P(s′∣s,a)Vπ(s′)=r(s,a)+γs′∈S∑P(s′∣s,a)a′∈A∑π(a′∣s′)qπ(s′,a′)
动作价值函数用来评价在策略 π \pi π下,对于当前状态 s t s_t st采取动作 a t a_t at后所得结果的好坏。
状态价值函数和动作价值函数之间的关系为 V π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) V_\pi(s)=\sum\limits_{a\in \mathcal{A}}\pi(a|s)q_\pi(s,a) Vπ(s)=a∈A∑π(a∣s)qπ(s,a),该式表示在使用策略 π \pi π时,状态 s s s的价值等于在该状态下基于策略 π \pi π采取的所有动作的概率与相应的价值相乘再求和
最优状态价值函数
V ∗ ( s ) = max π V π ( s ) , ∀ s ∈ S = max a ∈ A { r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V ∗ ( s ′ ) } \begin{aligned} V^*(s) &=\max\limits_\pi V_\pi(s),\forall s\in \mathcal{S} \\ &=\max\limits_{a\in\mathcal{A}}\{ r(s,a)+\gamma\sum\limits_{s'\in \mathcal{S}}P(s'|s,a)V^*(s') \} \end{aligned} V∗(s)=πmaxVπ(s),∀s∈S=a∈Amax{r(s,a)+γs′∈S∑P(s′∣s,a)V∗(s′)}
最优动作价值函数
q ∗ ( s , a ) = max π q π ( s , a ) , ∀ s ∈ S , a ∈ A = r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) max a ′ ∈ A q ∗ ( s ′ , a ′ ) \begin{aligned} q^*(s,a) &=\max\limits_{\pi}q_\pi(s,a),\forall s\in \mathcal{S},a\in \mathcal{A} \\ &=r(s,a)+\gamma\sum\limits_{s'\in\mathcal{S}}P(s'|s,a)\max\limits_{a'\in A}q^*(s',a') \end{aligned} q∗(s,a)=πmaxqπ(s,a),∀s∈S,a∈A=r(s,a)+γs′∈S∑P(s′∣s,a)a′∈Amaxq∗(s′,a′)
则:
q ∗ ( s , a ) = r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V ∗ ( s ′ ) \begin{aligned} q^*(s,a)&=r(s,a)+\gamma\sum\limits_{s'\in\mathcal{S}}P(s'|s,a)V^*(s') \end{aligned} q∗(s,a)=r(s,a)+γs′∈S∑P(s′∣s,a)V∗(s′)
最优状态价值函数是选择此时使最优动作价值最大的那个动作时的状态价值 V ∗ ( s ) = max a ∈ A Q ∗ ( s , a ) V^*(s)=\max\limits_{a\in \mathcal{A}}Q^*(s,a) V∗(s)=a∈AmaxQ∗(s,a)
最优动作价值函数表示在当前状态下,在所有策略下产生的众多动作价值函数中的最大值,另一角度理解,该函数也可以评价在最优策略下当前动作的好坏情况。
当得到多个策略下不同的动作价值函数,那么最优策略就可以定义为每次使动作价值函数值最大的动作:
π ∗ ( a ∣ s ) = { 1 , i f a = arg max a ∈ A q ∗ ( s , a ) 0 , e l s e \pi^*(a|s)=\begin{cases} 1,if\quad a=\arg\max_{a\in A} q^*(s,a)\\ 0,else \end{cases} π∗(a∣s)={1,ifa=argmaxa∈Aq∗(s,a)0,else
将动作价值函数 q q q与状态价值函数 V V V的差定义为优势函数 A A A, A ( s , a ) = q ( s , a ) − V ( s ) A(s,a)=q(s,a)-V(s) A(s,a)=q(s,a)−V(s)。
如果优势函数大于零,则说明该动作比平均动作好,如果优势函数小于零,则说明当前动作还不如平均动作好。
智能体无需制定显式的策略,通过维护价值表格或价值函数,每次决策时选择使价值函数最大的动作。
维护价值表格的方法通常用来解决动作空间和状态空间离散的情况,并且状态空间和动作空间都不能太大。
对于状态空间维数很大,或者状态空间为连续空间的情况,可以采用逼近的方法来近似价值函数,常见的逼近方法有:
当逼近的值函数结构确定时,值函数的逼近就等价于参数的逼近,值函数的更新也就等价于参数的更新。
Q-learning、DQN及DQN改进算法都是基于价值的方法,其中,Q-learning处理有限状态,DQN解决连续状态。
在基于价值学习的强化学习方法中,有一个很重要的概念就是时序差分,时序差分方法可以用来估计策略的价值函数。
时序差分中对价值函数的增量更新方式
V ( s t ) ← V ( s t ) + α [ G t − V ( s t ) ] = V ( s t ) + α [ r t + γ V ( s t + 1 ) − V ( s t ) ] V(s_t)\leftarrow V(s_t)+\alpha[G_t-V(s_t)]=V(s_t)+\alpha[r_{t}+\gamma V(s_{t+1})-V(s_t)] V(st)←V(st)+α[Gt−V(st)]=V(st)+α[rt+γV(st+1)−V(st)]
在时序差分算法中,利用当前获得的奖励+下一个状态的价值估计来作为当前状态获得的回报。
其中,
基于策略的方法是直接显式地学习一个目标策略。
基于值函数的方法最后得到的是动作的好坏程度,智能体直接选择最好的动作执行即可。基于策略的方法最终输出的动作空间的概率分布,也就是动作的策略(动作的概率分布:连续/离散),根据概率分布进行抽样,得到的抽样结果作为智能体的执行动作。
基于策略学习的强化学习方法中,很重要的一个概念就是策略梯度。
基于策略的方法首先需要将策略参数化。假设目标策略 π θ \pi_\theta πθ是一个随机性策略,且处处可微,其中 θ \theta θ是对应的参数。
在神经网络中,通过求解目标函数*(如价值函数的期望)*的梯度,采用梯度上升法,更新参数,直到得到最优的策略即使目标函数最大的策略。
定义目标函数为 J ( θ ) = E s 0 [ V π θ ( s 0 ) ] J(\theta)=E_{s_0}[V_{\pi_\theta}(s_0)] J(θ)=Es0[Vπθ(s0)],对目标函数求梯度,如下:
在策略学习中,可以给价值函数添加一项基线 b b b,基线可以是任何数,但是不能是 A A A的函数,该项的引入,可以使得reward出现正负,能够更好的采样到未出现的动作,使得策略收敛的更快,但是不会影响策略梯度的计算。
加入基线后的梯度可以表示为:
g = E π [ ( Q π ( s t , a t ) − b ( s t ) ) ▽ θ log π θ ( a t ∣ s t ) ] g=E_\pi[(Q_\pi(s_t,a_t)-b(s_t)) \bigtriangledown_\theta \log \pi_\theta(a_t|s_t)] g=Eπ[(Qπ(st,at)−b(st))▽θlogπθ(at∣st)]
概括一下基于策略的方法为:参数化智能体的策略,设计衡量策略好坏的目标函数,通过梯度上升的方法来最大化这个目标函数,使得策略最优。
该算法是基于值函数的方法和基于策略的方法的叠加,但是其本质是基于策略的算法,只是会额外学习价值函数。
该算法分为两个部分:Actor(策略网络)和Critic(价值网络)。Actor直接负责输出每个Action的概率,有多少个Action就有多少个输出。Critic输出的是动作价值Q。这是两个神经网络。
强化学习的策略常见的有在线策略和离线策略。
称采样数据的策略为行为策略,称用这些数据来更新的策略为目标策略
对于离线策略,需要注意,一定要保证智能体在学习过程中能与环境不断交互,将采样得到的最新的经验样本加入经验回放池中,从而保证经验回放池中有一定数量的样本和当前智能体策略对应的数据分布相近