深度强化学习有一个很大的不足点,它在数据采样效率上面是非常低的。
在机器学习里面的采样效率说的是:如果采用某个训练集,训练集的大小和模型的最终性能是有关系的,如果想达到某个性能的话,就需要多大量的训练数据。所以说不同的机器学习模型,或者说机器学习算法它需要多大量的数据其实是一个衡量这个模型好不好的一个关键指标。
由于强化学习本身就是以一种试错型的方式进行学习的,这个方式的学习算法就导致深度强化学习具有比较低的采样效率。因为如果智能体采样出来的新的数据不是特别能够帮助更新你的Q-Value
,或者是更新你的Policy
,那么这个采样对于整个Agent
来说是利用率非常低的。
基于模型的强化学习
所以在17
、18
年开始就有一个新的方向,Model-Based RL
。Model-Based
在90
年代初其实就有学者对其进行过研究。像Q-Planning
、Dyna-Q
都是最早期的Model-Based RL
。Model
这个概念在强化学习里面其实是比较特殊的,在平时说训练监督学习、无监督学习等算法中model
就是预测数据模型本身,而在强化学习中,最终的输出是通过策略π \piπ实现的,但是我们从来不会把ploicy
π \piπ称之为model
。我们是把环境称之为model
。所以在强化的算法或者论文中,我们一般称之为环境的模型,如果是策略本身,它就称之为policy
。
MBRL
基本的套路就是我们依据经验数据训练一个model
,然后基于这个model
我们就可以在所学的这个model
上面进行进一步的学习,比如像生成一些数据也好,还是传递一些梯度也好,去训练policy
。通过这种方式我们就不必与真实的环境做交互,从而获得性能的提升。而当policy
π \piπ发生了改变的话,那么它和环境交互出来的data
的分布本身也会发生改变。
通常来说环境提供两个部分:
state dynamic
:p ( s ′ ∣ s , a ) p(s^{\prime}|s,a)p(s′∣s,a)。Reward function
:r ( s , a ) r(s,a)r(s,a)。这个奖励可以是一个数值,也可以是一个采样出来的分布。
当给定某个具体的policy
π ( a ∣ s ) \pi(a \mid s)π(a∣s),和真实环境进行交互。环境进行上述两个条件概率分布计算p ( s ′ , r ∣ s , a ) p\left(s^{\prime}, r \mid s, a\right)p(s′,r∣s,a),去得到交互出来的数据{ ( s , a , r , s ′ ) } \left\{\left(s, a, r, s^{\prime}\right)\right\}{(s,a,r,s′)}:
然后基于这个交互出来的数据去训练我的Q
值函数。如果是基于模型的强化学习的话,那么我们需要学一个world model
:p ^ ( s ′ , r ∣ s , a ) \hat{p}\left(s^{\prime}, r \mid s, a\right)p^(s′,r∣s,a)。此时交互出来的数据是一个仿真数据simulated data
。基于模拟数据,我们可以用无模型强化学习算法MFRL
来进行学习:
通过这种方式,我们就绕开了与环境进行直接交互所带来的一些问题、弊端。
无模型RL V.S. 基于模型的RL
- Model-based RL
1. 一旦模型被学习到了,之后就可以用On-Policy
的方式进行学习,可以一直无限次进行交互,能够避免Off-Policy
带来的一些问题。2. 当然最大的好处还是极大地减少与真实环境的交互,像Batch RL
和Offline RL
中就经常会采用到MBRL
中的一些方法。3. 与MFRL
相比具有较高的采样效率。4. 由于模型具有误差,那么会产生模型的累计误差。
- Model-free RL
1. 无模型强化学习最大的好处就在于它拥有最好的效果,因为所有的数据都是真实的。2. 有时候会显现出数据的不稳定性,因为数据本身的采样并不是基于某个期望下进行的,而是随着策略π \piπ改变而改变的。3. 缺陷就在于较低的采样效率,并且需要超大的算力平台。
基于模型的强化学习:黑盒模型和白盒模型
所谓的黑盒模型说的是,训练的模型只是用来采样数据。它里面到底是如何去计算state
和reward
,我们并不关心。我们只将其看作一个产生无穷无尽的训练数据的黑盒。然后我们产生完数据之后都是用model-free
的方法来训练policy
。像Dyna-Q
,MPC
、和MBPO
这样一些经典的算法都是Blackbox
的。
另外一类算法是白盒模型,白盒模型相比于黑盒模型,他的区别在于state dynamic
:p ϕ ( s ′ ∣ s , a )已知。假设当前policy
的参数是θ:π θ 。我们可以直接优化state
s ss的value
值,对于state
s ′ 求导(不是对于V ( s ′ ) 的参数求导)。为什么可以对s ′ 求导呢?因为s ′ 可以看作p ϕ ( s ′ ∣ s , a ) 的输出,这个时候用链式法则就可以进一步对a 求导,a 此时又是policy
π θ 的输出了,于是我们又可以在policy
上面再通过链式法则对θ 进行求导:
所以一旦把这个盒子打开,变成了一个白盒的话,我们就可以使用概率密度和梯度两种信息来进行学习。白盒模型也可以像黑盒模型一样去sample
更多的data
。这些工作有MAAC
,SVG
,PILCO
等等这些算法。
从Dyna算法介绍基于模型的强化学习
学model
的时候通常会采用supervised learning
一类的算法进行学习。另外一类是通过计算状态转移分布p ϕ ( s ′ ∣ s , a ) 来实现的。如果我们学一个模型,然后构造(construct value function
)的话,可能会带来两方面的误差,第一个是模型本身带来的误差,另外一个是value function
带来的误差。
- Q-Planning:
首先通过随机的智能体采样得到数据,然后学一个model
:p ^ ( s ′ , r ∣ s , a ) 。之后要做的是:
选择一个状态S 和一个动作A ,然后将其送入sample model
中去,去获得下一个奖励reward
和下一个状态S ′ 。这样通过S 和A 就构建了一个四元< S , A , R , S ′ > 。有了这样一个四元组之后,我们就可以去做Q-Learning
。
- Dyna:
Dyna-Q
中还可以通过实际环境中获得的经验做学习。
拿到一个状态S ,然后依据Q 函数探索得到一个动作A 。有了这个采样到的动作之后,我们将其在真实环境中执行,得到真实的奖励R RR和真实的下一个状态S ′。这样也能获得一个四元组,之后就可以依据更新公式对Q 函数进行进一步的更新。之后在假定模型是确定行环境的时候,我们直接就可以依据数据训练Model了。
之后重复n 步,从之前的观测状态S 中随机选择一个,之后从动作A 中随机选择一个,依据模型M o d e l ( S , A ) 计算得到奖励和下一个状态,再做一步Q 更新。所以在Dyna-Q
中做的是1
步的MFRL
和n 步的MFRL
。但是每次模型只往前推进一步。
基于模型的强化学习有几个很重要的问题:
- 基于所学的这样一个非完美模型能不能改进我们的数据效率呢?
- 基于深度学习所训练的环境模型肯定不是那么准确的,这个时候我们还能不能去相信我们的模型呢?如何去相信模型采样所得到的数据呢?
- 如何使用我们的模型,从而获得更好的策略呢?
随机打靶算法:RS,PETS,POPLIN
在有了模型之后,能不能在近乎不学习policy
的情况下能够去获得比较高的性能。因为我们有模型,这样我们就能从模型中直接进行搜索,得到最好的action
。
有了model
之后,通过做任何形式的action
,模型都会给予反馈,告诉你当前这个决策好不好。shooting method
说的就是给定当模型p ( s ′ , r ∣ s , a ) ,对于每个状态前state
s ,和一个候选(candidate
)动作a 。可以构建一个长度为T TT的action sequence
:
有了状态和所有的动作序列之后,就可以和环境进行交互,产生相应的episode
:
基于上述采样样本,我们可以估计Q 值函数并得到策略π ( s ):
这个时候我们根本就没学习,有了一个模型之后,之后模拟计算,走到终局或者指定的T TT步,看看哪个候选动作a aa能够获得较大的收益,就选哪个。当智能体走到了真正的s 1 s_{1}s1之后再做一遍这个操作。这个也叫做MPC
。
Random Shooting(RS)
在RS
算法中,action sequence
是随机采样得到的,它有一些好处,第一个好处就是这个action sequence
它可以非常简单得到。它甚至不管你的state
是啥,先可以把动作序列给做出来。在这个过程中是不做学习的,没有梯度的计算。它也不太需要去考虑task
到底有多长这样。
同样这种做法带来的坏处也很明显,像variance
就很大,因为搜索的空间很大,而只采样了一条。一种可行的办法就是说,我们把每个action
不看它state
的情况下,整体来看它到底能带来更大的value
还是更低的value
。给它做成像一个二分类一样的东西,叫cross entropy method
。就是对action
做一些简单的分堆,采样的时候就期望去采样得到高reward
或者高value
的action
。这种方法与完全随机采样相比是能够获得更好的reward
的。
PETS:Probabilistic Ensembles with Trajectory Sampling
在2018
年的NIPS
上面发表了一篇RS
类算法的文章PETS
。它拿一系列可训练的高斯模型做了一个ensemble
。
每一个高斯模型去采样下一个state
的时候,他就是去follow
一个mean
和一个variance matrix
。做一个Gaussian NN
:
本身的μ θ 和Σ θ都是用θ 参数化的神经网络。当给定当前s t , a t ,我就可以确定性地去计算到μ ,基于这个μ和Σ 我就可以采样接下来的这个s t + 1 。
从上述论述我们可以看到每个模型都是一个Gaussian NN
,我们有N NN个高斯做了一个Ensemble
操作。这里其实是通过集成学习降低模型的variance
,这里的variance
并不是Σ \SigmaΣ,而是一些没有见过的数据导致的泛化性能的variance
。
当我们有了N 个高斯的概率模型之后,我们就可以用这N 个概率模型去做trajectory sampling
(TS)。这里所采样的trajectory sampling
的方法其实是比较特殊的。因为我们有N 个高斯模型,所以我们可以直接采样出来一个高斯模型,走一步,得到一个新的高斯分布,在这个高斯分布里面,我们再采样一个新的state
,接下来我们又要走下一步,走下一步的时候,我们又从这N NN个高斯模型里面去采样,这样就能够实现trajectory
的前向传播。基于这N NN个高斯模型,我们就可以去做planning
。在每一个time step
上,MPC
算法通过采样去计算多个最优动作序列,之后采用第一个action
,然后重复上述的规划任务。这样的一种算法就称作Planning via Model Predictive Control
。
这里采样获取动作的时候,采用的是CEM
的方式来获取相对来说比较好的action
。然后对每个动作序列去做一个评估,之后更新CEM
。但是最终对于环境的执行来说,是执行最好的动作序列a t *中的第一个action
。采样得到的数据重新加入到数据集中去。