强化学习学习(四)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![image.png](https://img-blog.csdnimg.cn/img_convert/b30945163219747a798a15f2f736d451.png)

体现在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)

相关推荐
guoji77883 小时前
安全与对齐的深层博弈:Gemini 3.1 Pro 安全护栏与对抗测试深度拆解
人工智能·安全
实在智能RPA3 小时前
实在 Agent 和通用大模型有什么不一样?深度拆解 AI Agent 的感知、决策与执行逻辑
人工智能·ai
独隅3 小时前
PyTorch 模型部署的 Docker 配置与性能调优深入指南
人工智能·pytorch·docker
lihuayong4 小时前
OpenClaw 系统提示词
人工智能·prompt·提示词·openclaw
黑客说4 小时前
AI驱动剧情,解锁无限可能——AI游戏发展解析
人工智能·游戏
踩着两条虫4 小时前
AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库
android·前端·vue.js·人工智能·低代码·系统架构·rxjava
小仙女的小稀罕4 小时前
听不清重要会议录音急疯?这款常见AI工具听脑AI精准转译
开发语言·人工智能·python
书到用时方恨少!4 小时前
Python random 模块使用指南:从入门到精通
开发语言·python
reesn4 小时前
qwen3.5 0.8B纠正任务实践
人工智能·语言模型