基于模型(model-based)的强化学习笔记

最近看到model-based强化学习方法,在这里做一个笔记
【废话】
我是控制专业做强化学习,在我看来强化学习最大的优势是model-free,也是最麻烦的地方,目前强化学习的改进就是从两方面下手:如何学的更好or学的更快。毕竟现实生活中不是都像游戏一样可以无成本等你学习。当时还没有学强化学习基本概念的时候,我就想为什么不把模型信息添加进去呢?
目前控制方面,实用性最大的肯定还是PID(PID万岁~),只要有输出(这点和RL相似),调参数就可以,现在找一个会调PID参数的工程师很容易。现代控制理论最让人诟病的是需要模型,但事实上模型除了一些顶尖领域不管你怎么建,一定有误差(有学者说,能用数学表达式表示的模型一定是有问题的)。既然如此为什么不结合一下,RL+能确定的那部分模型信息,这样学习应该会加快。

【MPC控制】
我没做过MPC控制,先去查了一下MPC怎么做的。
基本框图
首先基本框图,很明显首先MPC优势1,不同于PID单通道设计,MPC是个多变量控制器。优势2,我理解它是最优控制的一种,是个最优化问题,满足限制指标。
MPC 控制器组成
如图,MPC Controller包含两部分,预测+优化。预测模型未来的几步输出,当成一个优化问题输入到优化器,优化器得到的最优解就是控制器的输出。感觉和LQR一样更像个数学优化问题。

MATLAB官方有一个MPC的课程讲的挺好,具体想研究的可以去看。

【model-based rl】
普通的RL,是通过收集过去的数据,并从中学习到最好的策略。所以一开始的数据收集探索阶段很重要,如果你收集的数据很少/不全,你自然是学不到好的策略。所以model-free的缺点就是数据利用效率不高,你学习一个复杂点的环境可能要很久。所以当你知道模型信息的时候,可以更加高效的利用数据。

那么第一个问题:如何建模?
对于游戏等一些环境,确实有点麻烦(我也不知道行不行)。但是对于控制问题来说,是可以的,毕竟控制的第一步都在建模,运动学/动力学模型肯定是可以建出来的。
我们希望的是,当已知( s t , a t s_{t},a_t st,at)能够以得到( s t + 1 s_{t+1} st+1),那怎么拟合?肯定都想到了,神经网络。那么我们用神经网络拟合一个函数 f ( s t , a t ∣ θ ) f(s_{t},a_t|\theta) f(st,atθ),损失函数为
∑ ∣ ∣ f ( s t , a t ∣ θ ) − s t + 1 ∣ ∣ 2 \sum||f(s_{t},a_t|\theta)-s_{t+1}||^2 f(st,atθ)st+12
这里我举例的是一个直观想法,但实际我看论文里,神经网络拟合的是 s t + 1 − s t s_{t+1}-s_t st+1st

MPC-RL伪代码:(取自《深入浅出强化学习编程实战》)

1、利用随机策略产生轨迹,收集轨迹数据D_rand
2、初始化空数据集D_RL,初始化模型网络f
3、for i in range(max_episode):
4、	利用D_RL和D_rand 训练f
5、	for t in range(max_steps):
6、		获得当前状态s
7、		利用f得到优化动作序列A
8、     执行优化系列中第一个动作a     #这和MPC控制是一样的
9、     数据添加到D_RL

其中第7行,由于我们用的是神经网络的方法没有解析解,采用的是一种shooting方法,shooting中文翻译为打靶,就是迭代数值尝试。
具体的方法为:

随机产生K个候选动作序列,然后将这些动作序列作用于环境,利用学到的神经网络动力学模型预测相应的状态序列和回报。那些拥有最高期望累积回报的序列被选择。这些被选择的动作序列并非都被执行,而是只执行一步 a t a_t at ,然后在环境中观察在此动作下新状态信息 s t + 1 s_{t+1} st+1 ,然后利用该方法(shooting方法)重复得到下一步的动作序列。

至此,基于模型的强化学习就完整了,其实还有几个问题我没搞懂,shooting方法能够取到全部的策略吗?如果不能那不还是model-free的问题,具体实现方面也还有些问题,代码还没懂,以后懂了再补充。
想研究的可以去看论文《Neural Network Dynamics for Model-Based Deep Reinforcement Learning with Model-free Fine-Tuning》

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值