强化学习学习(四)Model-Based Reinforcement Learning 从原理到改进分析

文章目录

    • [Model-Based RL](#Model-Based RL)
        • [Basics of Model-based reinforcement learning](#Basics of Model-based reinforcement learning)
        • [Uncertainty of Model-based RL](#Uncertainty of Model-based RL)
        • [Use uncertainty in Model-based RL](#Use uncertainty in Model-based RL)
        • [State space (latent space) models](#State space (latent space) models)

Model-Based RL

Basics of Model-based reinforcement learning

Model-based reinforcement learning: If we know f ( s t , a t ) = s t + 1 f(s_t,a_t)=s_{t+1} f(st,at)=st+1 or p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1∣st,at) in the stochastic case, we can plan it better.

So let's learn f ( s t , a t ) f(s_t,a_t) f(st,at) from data, and then plan through it!

Model-based reinforcement learning version 0.5:

  1. run base policy π 0 ( s t ∣ s t ) \pi_0(s_t|s_t) π0(st∣st) (e.g., random policy) to collect some data D = { ( s , a , s ′ ) i } \mathcal{D}=\{(s,a,s')_i\} D={(s,a,s′)i}
  2. learn dynamics model f ( s , a ) f(s,a) f(s,a) to minimize ∑ i ∣ ∣ f ( s i , a i ) − s i ′ ∣ ∣ 2 \sum_i||f(s_i,a_i)-s'_i||^2 ∑i∣∣f(si,ai)−si′∣∣2 (监督学习)
  3. plan through model f ( s , a ) f(s,a) f(s,a) to choose actions
    但这个version 0.5并不适应于一些场景:要拟合的模型参数过多的时候,如神经网络这种高容量的模型

Model-based reinforcement learning version 1.0:

  1. run base policy π 0 ( s t ∣ s t ) \pi_0(s_t|s_t) π0(st∣st) (e.g., random policy) to collect some data D = { ( s , a , s ′ ) i } \mathcal{D}=\{(s,a,s')_i\} D={(s,a,s′)i}
  2. learn dynamics model f ( s , a ) f(s,a) f(s,a) to minimize ∑ i ∣ ∣ f ( s i , a i ) − s i ′ ∣ ∣ 2 \sum_i||f(s_i,a_i)-s'_i||^2 ∑i∣∣f(si,ai)−si′∣∣2 (监督学习)
  3. plan through model f ( s , a ) f(s,a) f(s,a) to choose actions
  4. execute those actions and add the resulting data { ( s , a , s ′ ) i } \{(s,a,s')_i\} {(s,a,s′)i} to D \mathcal{D} D
  5. 重复2-4
    改变的点,就是不断增加新的数据,能够变得可行一些了。
    Can we do better?

    如果我们的model有一些错误,如在实际上车的方向盘有一点偏左。v 1.0版本的算法能够修改model去纠正这个错误,但是需要过很长时间,因为我们用一个 f ( s , a ) f(s,a) f(s,a)执行了很多步以后才再迭代,我们需要来个更快纠错的算法:当发生错误的时候,立刻replan------先看一下采取action实际导致的state,随后问一下model这样的是不是想要的,而不是继续执行以前的

Model-based reinforcement learning version 1.5:(模型预测控制)

  1. run base policy π 0 ( s t ∣ s t ) \pi_0(s_t|s_t) π0(st∣st) (e.g., random policy) to collect some data D = { ( s , a , s ′ ) i } \mathcal{D}=\{(s,a,s')_i\} D={(s,a,s′)i}
  2. learn dynamics model f ( s , a ) f(s,a) f(s,a) to minimize ∑ i ∣ ∣ f ( s i , a i ) − s i ′ ∣ ∣ 2 \sum_i||f(s_i,a_i)-s'_i||^2 ∑i∣∣f(si,ai)−si′∣∣2 (监督学习)
  3. plan through model f ( s , a ) f(s,a) f(s,a) to choose actions
  4. execute the fist planned action, observe resulting state s ′ s' s′。只执行第一个动作,看看实际的结果是什么样的
  5. append ( s , a , s ′ ) (s,a,s') (s,a,s′) to dataset D \mathcal{D} D
  6. 立刻replan,重复3-5
  7. 重复2-5
    所以整个方法的核心思想就是:我先试运行一部action看看效果怎么样(如果发现了汽车再偏左),那就重新plan得到action。实际上,重新plan的代价非常高,所以在第3步的时候,步伐小一些。
Uncertainty of Model-based RL

想象现在有这样一个场景:你训练一个RL模型在悬崖边行走,如果我们的 f ( s , a ) f(s,a) f(s,a)不对下一个具体状态进行预测而是下一个状态可能的分布,就像你会估计自己还有多远就会掉下悬崖,那么你更有可能到达紧挨着的边缘。如果你保持较小范围的不确定性,对自己的模型有很大的信心,那你会努力靠近;如果你有较大的不确定性,那么就会保持远离悬崖,因为更近的状态不确定。

the model is certain about the data, but we are not certain about the model

我们不去预测 p ( θ ∣ D ) p(\theta|D) p(θ∣D)最大值的 θ \theta θ而是试图直接预测它的分布, p ( θ ∣ D ) p(\theta|D) p(θ∣D)意味着模型的不确定性。随后我们在得到下一个状态的时候,就不是根据最大的 θ \theta θ,而是利用它的分布 去求一个期望。
∫ p ( s t + 1 ∣ s t , a t , θ ) p ( θ ∣ D ) d θ \int p(s_{t+1}|s_t,a_t,\theta)p(\theta|D)d\theta ∫p(st+1∣st,at,θ)p(θ∣D)dθ
举例子:贝叶斯神经网络

以往情况下,节点之间的连接都是确定的数,但是如果我们将它换成带有不确定性的分布,这个神经网络本身就具有了不确定性

当然,我们去得到这个维度很高的整个模型的参数分布的比较困难的,因此进行了一些简化:我们用每条边上的分布参数乘积去拟合,这默认了边上的分布之间是独立的:
p ( θ ∣ D ) = ∏ i p ( θ i ∣ D ) p ( θ i ∣ D ) = N ( μ i , σ i ) \begin{align}p(\theta|D)=\prod_ip(\theta_i|D)\\ p(\theta_i|D)=\mathcal{N}(\mu_i,\sigma_i)\end{align} p(θ∣D)=i∏p(θi∣D)p(θi∣D)=N(μi,σi)

边上的权重参数分布我们用高斯分布去拟合:以往的一个数的权重,现在用两个参数的分布函数来刻画不确定性, μ i \mu_i μi代表确定的参数值, σ i \sigma_i σi代表对这个参数的不确定性。

Bootstrap ensembles

实际上,我们需要这些模型相对独立的训练,SGD这种对数据集的随机采样就能够满足了。让他们投票下一个state是什么,他们之间投票的误差就能够实现一些不确定性估计。

Use uncertainty in Model-based RL

Before: J ( a 1 , ... , a H ) = ∑ t = 1 H r ( s t , a t ) J(a_1,\dots,a_H)=\sum_{t=1}^Hr(s_t,a_t) J(a1,...,aH)=∑t=1Hr(st,at), where s t + 1 = f ( s t , a t ) s_{t+1}=f(s_t,a_t) st+1=f(st,at), a 1 , ... , a H a_1,\dots,a_H a1,...,aH表示一个动作序列

Now: J ( a 1 , ... , a H ) = 1 N ∑ i = 1 N ∑ t = 1 H r ( s t , i , a t ) J(a_1,\dots,a_H)=\frac{1}{N}\sum_{i=1}^N\sum_{t=1}^Hr(s_{t,i},a_t) J(a1,...,aH)=N1∑i=1N∑t=1Hr(st,i,at), where s t + 1 , i = f i ( s t , i , a t ) s_{t+1,i}=f_i(s_{t,i},a_t) st+1,i=fi(st,i,at)

一般情况下,对于候选的动作序列 a 1 , ... , a H a_1,\dots,a_H a1,...,aH:

  1. 采样模型 θ ∼ p ( θ ∣ D ) \theta\sim p(\theta|D) θ∼p(θ∣D),如果用了上面的Bootstrap 就想到于从N个模型中随机选一个
  2. 在每一个时间步长t, 采样状态 s t + 1 ∼ p ( s t + 1 ∣ s t , a t , θ ) s_{t+1}\sim p(s_{t+1}|s_t,a_t,\theta) st+1∼p(st+1∣st,at,θ),
  3. 计算所有时间上的奖励综合 R = ∑ t r ( s t , a t ) R=\sum_tr(s_t,a_t) R=∑tr(st,at)
  4. 重复1-3计算平均奖励
State space (latent space) models

我们需要学: p ( s t ∣ s t ) p(s_t|s_t) p(st∣st)------观测模型 observation model
p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1∣st,at)------状态转移模型 dynamics model
p ( r t ∣ s t , a t ) p(r_{t}|s_t,a_t) p(rt∣st,at)------奖励模型 reward model

standard (fully oberved) model:
max ⁡ ϕ 1 N ∑ i = 1 N ∑ t = 1 T log ⁡ p ϕ ( s t + 1 , i ∣ s t , i , a t , i ) \max_{\phi}\frac{1}{N}\sum_{i=1}^N\sum_{t=1}^T\log p_{\phi}(s_{t+1,i}|s_{t,i},a_{t,i}) ϕmaxN1i=1∑Nt=1∑Tlogpϕ(st+1,i∣st,i,at,i)

现在我们有了一个潜在空间latent space model:
max ⁡ ϕ 1 N ∑ i = 1 N ∑ t = 1 T E [ log ⁡ p ϕ ( s t + 1 , i ∣ s t , i , a t , i ) + log ⁡ p ϕ ( o t , i ∣ s t , i ) ] \max_{\phi}\frac{1}{N}\sum_{i=1}^N\sum_{t=1}^TE[\log p_{\phi}(s_{t+1,i}|s_{t,i},a_{t,i})+\log p_{\phi}(o_{t,i}|s_{t,i})] ϕmaxN1i=1∑Nt=1∑TE[logpϕ(st+1,i∣st,i,at,i)+logpϕ(ot,i∣st,i)]

如果我们知道状态s_t,上面这个式子会很容易,但问题是我们不知道,因此我们只能用未来状态的期望:expectation w.r.t. ( s t , s t + 1 ) ∼ p ( s t , s t + 1 ∣ o 1 : T , a 1 : T ) (s_t,s_{t+1})\sim p(s_t,s_{t+1}|o_{1:T},a_{1:T}) (st,st+1)∼p(st,st+1∣o1:T,a1:T)

我们想学习后验概率approximate posterior q ψ ( s t ∣ o 1 : t , a 1 : t ) q_{\psi}(s_t|o_{1:t},a_{1:t}) qψ(st∣o1:t,a1:t),这个也是一个神经网络encoder,给我们基于当前观测和动作,下一个状态的分布 ,这个神经网络有很多选择,我们在这里选择最简单的一个 q ψ ( s t ∣ o t ) q_{\psi}(s_t|o_t) qψ(st∣ot),这代表状态几乎可以从观测推断出来,因此它是一个确定编码器deterministic ,expectation w.r.t. s t ∼ q ψ ( s t ∣ o t ) , s t + 1 ∼ q ψ ( s t + 1 ∣ o t + 1 ) s_t\sim q_{\psi}(s_t|o_t),s_{t+1}\sim q_{\psi}(s_{t+1}|o_{t+1}) st∼qψ(st∣ot),st+1∼qψ(st+1∣ot+1)也就是说我们有 q ψ ( s t ∣ o t ) = δ ( s t = q ψ ( o t ) ) ⇒ s t = g ψ ( o t ) q_{\psi}(s_t|o_t)=\delta(s_t=q_{\psi}(o_t))\Rightarrow s_t=g_{\psi}(o_t) qψ(st∣ot)=δ(st=qψ(ot))⇒st=gψ(ot),目标函数变成:
max ⁡ ϕ 1 N ∑ i = 1 N ∑ t = 1 T log ⁡ p ϕ ( g ψ ( o t + 1 , i ) ∣ g ψ ( o t , i , a t , i ) + log ⁡ p ϕ ( o t , i ∣ g ψ ( o t , i ) ) \max_{\phi}\frac{1}{N}\sum_{i=1}^N\sum_{t=1}^T\log p_{\phi}(g_{\psi}(o_{t+1,i})|g_{\psi}(o_{t,i},a_{t,i})+\log p_{\phi}(o_{t,i}|g_{\psi}(o_{t,i})) ϕmaxN1i=1∑Nt=1∑Tlogpϕ(gψ(ot+1,i)∣gψ(ot,i,at,i)+logpϕ(ot,i∣gψ(ot,i))

整个上面的这些东西,都是为了在不知道状态的情况下,实现我们的优化,现在这个式子是可微可以用反向传播求解了。

[!NOTE] 小结

如果要去学习一个基于随机状态的模型,需要取对数期望而不是直接取期望,为了得到后验概率的近似,我们用最简单的,一个直接从观测得到状态的确定编码器,这种情况下,期望实际上不需要了,我们可以直接用编码器来代替状态在 observation model和 dynamics model

体现在RL算法中就是如下,整个过程中没有出现状态,只有观测:

Key idea: learn embedding g ( o t ) = s t g(o_t)=s_t g(ot)=st,或者直接学习 p ( o t + 1 ∣ o t , a t ) p(o_{t+1}|o_t,a_t) p(ot+1∣ot,at)

相关推荐
游客5202 分钟前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
一位小说男主2 分钟前
编码器与解码器:从‘乱码’到‘通话’
人工智能·深度学习
Eric.Lee20214 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Dontla9 分钟前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
深圳南柯电子18 分钟前
深圳南柯电子|电子设备EMC测试整改:常见问题与解决方案
人工智能
Kai HVZ19 分钟前
《OpenCV计算机视觉》--介绍及基础操作
人工智能·opencv·计算机视觉
biter008824 分钟前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
吃个糖糖30 分钟前
35 Opencv 亚像素角点检测
人工智能·opencv·计算机视觉
qq_529025291 小时前
Torch.gather
python·深度学习·机器学习
数据小爬虫@1 小时前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python