大家好,我是佳恺,最近一直在研究强化学习,烧了大量脑细胞之后,现在总算对强化学习有一个整体的了解了,掌握强化学习基础知识后我又用PPO算法实现了一个简单的火箭回收模型。对强化学习有兴趣的朋友可以了解一下
文章的主要内容如下:
一、什么是强化学习
二、PPO火箭回收案例
三、研究强化学习的意义
四、强化学习的应用
五、总结
一、什么是强化学习(来自ChatGPT)
强化学习是一种机器学习方法,它涉及到智能系统(通常是一个agent代理程序)通过与环境互动来学习如何做出决策,以最大化一个特定目标的累积奖励。在强化学习中,代理程序采取一系列动作,观察环境的状态,接收奖励信号,然后尝试学习如何在不同的状态下采取最佳的行动,以获得最大的奖励。
上面的定义可能不好理解,可以将它比喻成教小狗学技能的过程。想象你有一只小狗,你想让它学会一些新的技巧,比如捡球或者坐下。你不会一开始告诉它每一个步骤,而是采用试错的方法。
首先,你让它尝试各种不同的动作,看看哪一个能够获得奖励,比如给它一块小零食。如果小狗做对了,你就奖励它,这样它就知道这个动作是好的。如果它做错了,你不给奖励,这样它就会知道那个动作是不好的。
通过不断的试验和奖惩,小狗会逐渐学会哪些动作可以获得奖励,从而变得越来越聪明。在强化学习中,计算机程序也是这样学习的,通过不断尝试不同的行动,观察结果,最终找到最佳的方法来实现特定的目标。这就是强化学习的基本思想。
二、PPO火箭回收案例
1、火箭回收虚拟环境
首先,用强化学习实现火箭回收需要一遍又一遍的尝试来学习正确的策略,所以只能用模拟火箭降落的虚拟环境,这个案例火箭模拟环境用的是密歇根大学博士,现北航教授邹征夏,在2021年发布的rocket-recycling项目
项目地址是:https://github.com/jiupinjia/rocket-recycling
关于这个项目的介绍:
邹征夏教授作为 SpaceX 的忠实粉丝,一直梦想拥有自己的火箭。当时,他研究了一个有趣的问题,即是否可以通过简单的强化学习“构建”虚拟火箭并解决具有挑战性的问题 - 火箭回收。
他尝试了两项任务:悬停和着陆。火箭被简化为二维平面上的刚体。其中考虑了基本的气缸动力学模型,并假设空气阻力与速度成正比。火箭底部安装有推力矢量发动机。该发动机提供不同方向的可调推力值(0.2g、1.0g 和 2.0g)。对喷嘴添加角速度约束,最大旋转速度为30度/秒。
通过上述基本设置
动作空间被定义为发动机离散控制信号的集合,包括推力加速度和喷管角速度。
状态空间由火箭位置、速度、角度、角速度、喷嘴角度和模拟时间组成。
对于悬停任务:基于两个规则给出步数奖励:
1)火箭与预定义目标点之间的距离 - 距离越近,分配的奖励越大。
2)火箭体的角度(火箭尽量保持直立)
对于着陆任务:我们查看接触地面瞬间的速度和角度 - 当接触速度小于安全阈值并且角度接近 0 度(直立)时,我们认为它是成功的登陆并获得丰厚奖励。其余规则与悬停任务相同。
他实现了上述环境并训练了一个基于策略的代理(actor-critic)来解决这个问题。经过 20000 多个episode后,episode 奖励终于很好地收敛了。
其实,在准备研究强化学习之前,我就决定用一个案例来验证自己是否理解了这些知识,当时找了好几个项目,有超级马里奥,小人学走路,自动倒车入库等,最后看到这个火箭回收就决定用它了,我本身也挺喜欢马斯克的,哈哈...
回归正题,通过前面的介绍,可以看到其实邹征夏教授已经用AC算法实现了火箭回收功能。不过为了加深自己对强化学习的理解,我就想用PPO算法再实现一遍
为什么选择PPO算法,一个是因为它是由OpenAI提出的,另外一个是它效果还不错,并且用得比较多,像ChatGPT的RLHF里用到了PPO,王者荣耀之前版本的绝悟AI也用到了PPO,老熟人了说是
PPO的公式:
接下直接演示下我用PPO实现火箭回收的效果:
刚开始训练的模型,基本就是花式坠毁,完全没学到规律
经过多次尝试,它慢慢学会了在空中调整姿态,但是还没学会以正确的姿势着陆到目标位置
最后,经过一天的训练,火箭可以成功的着陆到目标位置
4、结果分析
从训练结果来看,我的效果离邹征夏教授原版的效果还是有差距,这个差距主要是体现在训练时间和火箭回收的稳定性上。
我这个训练花了一天,当然收敛的话可能没用到这么久,因为我训练了4,5小时效果都还不行,然后我就没管了,等到第二天才来看的效果。但是原版只需要几个小时就能收敛。
我分析的原因有几点
首先是,用的强化学习算法不同。第二,actor和critic的结构不同,我只用了4个linear+relu的结构,邹征夏教授线性层前面还把输入映射到了更高维的空间向量。第三,因为结构不同,学习率等超参数也用得不一样。
如果想要更好的效果,肯定要继续优化算法才行
然后,PPO算法的实现按公式来,算比较固定,所以我偷懒直接用了这篇文章的代码:
https://blog.csdn.net/weixin_40959890/article/details/130568144
修改实现火箭回收的代码我放到gitee了,有兴趣的同学可以看看,超参数和模型结构可以根据自己的思路进行修改:
https://gitee.com/null_565_7483/ppo_rocket
三、研究强化学习的意义
在我看来,强化学习这个方向最核心的能力就是智能决策,符合现在很多领域智能决策的需求,比如自动驾驶、机器人、量化金融等等。
就像是汽车自动驾驶,在没有人的操控下,汽车看到红灯要停下来;看到斑马线有人经过,它也要停下来;甚至是,有个苹果从人行道滚到了马路上它也要减速,因为可能有人追出来捡苹果。
还有家庭服务机器人,看到散在沙发上的外套,它会收起来放进洗衣机;看到下暴雨,知道关上门窗。
如果没有智能决策,实现上面这些动作应该是比较困难的。
这也是强化学习的意义所在。当然,强化学习可能不是终极解,未来可能会有更好的技术,那个未来再说
四、强化学习的应用
根据我的了解,可以用到强化学习的地方有这些
1、游戏和棋牌娱乐
王者荣耀、星际争霸、Dota2这些都是有大厂的强化学习AI应用的
棋牌娱乐类最著名的莫过于能击败世界冠军的,alpha go,alpha zero了。还有大量的斗地主、麻将、德州扑克的AI应用在摩擦人类玩家。
2、金融领域
在股票交易、风险管理和投资决策中,强化学习可以帮助优化投资策略
3、自动驾驶
这个说烂了,强化学习被用来开发自动驾驶汽车的决策系统,使其能够在不同的交通情况下做出安全和智能的驾驶决策。
4、机器人
这个也说烂了,用强化学习训练机器人执行各种任务,如自主导航、物体抓取、工业自动化和医疗手术。还能代替人们去执行灭火、洪灾、地震救援这些危险任务。甚至能帮我买菜、做饭、洗碗、打扫卫生,扶着白发苍苍的我出去遛弯,有现做的吃啥yuzhi菜呢...
五、总结
总结一下,这篇文章前半部分讲了下什么是强化学习,以及火箭回收的案例,后半部分聊了下强化学习的意义和应用。
可能这些内容离我们的生活还有一段距离,但随着时间推移,技术进步,这些技术会慢慢应用到我们生活的方方面面,说不定人人都能拥有一台上知天文,下知地理,能文能武的AI助手呢
最后,如果有对AI、强化学习、机器人、自动驾驶等领域感兴趣的朋友可以关注一下佳恺,我们一起交流学习!