粉丝1370获赞8954

让机器人学会走路,一直就是人工智能研究的核心问题之一。只有走的又快又准又稳,适应各种地形,才能催生出未来的机器人。保姆、保洁、保安、保镖, 从波士顿动力到特斯拉,从小米到智慧君,通用人形机器人离我们越来越近了。 今天就带大家使用 matlab 的深度学习和强化学习工具箱,还有仿真工具 semial link, 玩一个特别有趣的强化学习案例,训练双足智能体,学会走路, 你将亲眼见证他从蹒跚学步的人工智障升级修炼成健步如飞的人工智能全过程。这个可爱的小机器人由一个躯干和两条腿组成,每条腿由脚踝、膝盖、胯 三个自由度,两条腿总共六个自由度,都可以施加扭距转动。智能体可以观测自己的位置、姿态、速度、扭距和地面给他的接触力和摩擦力,总共三十一个环境观测值。 智能体的行走效果有奖励函数衡量,走的越快越稳,越久越远越优雅,奖励函数值就越大。 而智能体的任务就是从一轮轮的仿真模拟中观测环境给他的各种反馈,不断试错,优化奖励函数,探索和学习出最优的走路动作和策略。 整个过程呢,不需要人为去指导干涉,智能体自己就能适应环境,学会走路。这就是神奇的强化学习。在 在打游戏、下围棋、做决策、自动驾驶、药物设计等领域已经达到甚至超越了人类的水平。最近大火的 chat gpt 背后也是强化学习。 今天的代码教程在 get up 上免费开源,我用的版本是 matlab r 二零二二 b 打开代码,首先运行 start up working robot 的 m 文件, 把这些目录全部加入到 matlab 的工作目录中,然后进入 reinforcement learning 目录,点击点 m l x 的代码教程。这是 live editor 交互式编辑器,非常类似 python 中的珠 pater notebook, 可以逐代码块儿的运行调试,非常方便 选择六自由度还是十自由度的环境?十自由度呢,是在刚刚六自由度的基础上,脚踝 和胯又各加了一个自由度,关节变得更加灵活。但是两个效果其实是差不多的,我这里就用六自由度做演示,设置全局参数,如果你的电脑有 gpu, 可以开启 gpu 加速和病情运算的加速。 好,接下来获取智能体采取的动作值和环境给他的观测值。 观测值 observation info 呢,总共有三十一个观测值,而动作值呢,有六个电机的扭距值,六个电机在六个关节上,智能体可以对每个电机施加扭距,这就是他采取的动作 设置各种各样的物理参数,腿脚尺寸,关节的阻尼系数,初始机器人的姿态和强化学习的时间参数,每一轮 仿真的最长时间和每一个时刻的时间。好,接下来就是强大的 semilink, 在 cmo link 中可以仿真出真实的物理世界,地球有重力,地面有摩擦。这几个试播器一样的窗口就是观测我们想追踪的任何值,比如说奖励函数值,扭矩,动作值,我们先把它关掉。 右边这个方块呢,就是机器人的物理环境,点开可以看到机器人的左腿、右腿、躯干,地面和各种各样的传感器,就像给他浑身贴满了传感器。 左边这个方块是强化学习智能体,它采取 action 动作,再获取环境反 反馈给他的 observation 观测值和 reward 的奖励函数值。那观测值呢?刚刚也说了,有三十一个。而奖励函数呢,由五项组成,分别是奖励前进子速度、惩罚横向的偏移、 惩罚跳的太高、惩罚用力过大,奖励存活时长。智能题走的越快越稳,越久,越远越优雅,奖励函数就越大。每一项奖励函数的权重都可以手动修改, 不同的权重组合可以催生出不同的智能体走路行为。我专门做了另一个短视频,可以看一看。那这个方块呢,是环境判定这一轮仿真是否失败?如果智能体跌倒,仰面朝天,或者 横向偏移过大,就判定本轮仿真失败,重启新一轮的仿真。 那智能体到底是如何做出决策的呢?他的脑回路是怎么样的呢?他的大脑其实是 d d p g。 强化学习算法由 actor 神经网络和 critic 神经网络两个神经网络共同组成。 actor 神经网络输入从环境观测到的三十一个观测值,输出采取的动作相当于一个考生。 而 critic 神经网络呢,输入从环境观测到的三十一个观测值,以及 actor 采取的动作输出 q 值, q 值就相当于 critic 对 actor 决策的评分。所以 critic 神经网络相当于考官,一个考生,一个考官。两个神经网络教学相 长,彼此促进共同进步,协同进化,共同组成了智能体的大脑。那可以使用 meta lab 的深度学习工具箱 deep network designer 工具可视化神经网络结构, 从工作区导入,先看 actor network, 输入三十一个 observation 观测值,输出六个自由度的扭矩。 再看 critic network, 输入三十一个 observation 观测值和 actor 做出的六个动作,输出这个动作的评分。这里边每一个模块儿都可以可视化 的拖拽点击修改,非常的方便。好指定智能体的超参数,比如未来时刻的奖励函数,折扣系数。创建智能体 agent 刚创建的时候,这个 agent 是完全随机初始化的,他还没有经过训练和仿真,他是一个纯纯的人工智障。我们可以仿真一轮跑一跑试试看。 就打开了 meta lab 的 mechanics explorer, 那他确实不会走路,刚出生还没站稳就被判定为失败了。 那训练之后是什么样的呢?可以调用我预先训练好的一个模型文件来跑一跑,可以看到走的非常丝滑流畅。你也可以从头开始训练自己 己的智能体,指定更多的训练超参数,包括训练轮次、日制、可视化和模型保存。然后呢,就开始漫长的训练了,两千五百轮大概要花十个小时, 你可以看到训练过程中每一轮的仿真动画和日志图表。如果你有时间的话,可以坐下来慢慢欣赏智能体学习过程中的各种有趣行为。 有迈大步,小碎步,踮着脚,蹲着走,垫步,像醉汉一样东倒西歪,像放学一样蹦蹦跳跳,从蹒跚学步到走出六亲不认的步伐。 在折线图里,浅蓝色是每一轮仿真的奖励值,深蓝色是滑动平均的奖励值都在不断升高,表示走的越来越好。橙色线呢,是初始状态的。 q 物质逐渐稳定收敛,训练完成之后,先把训练过程中的日志保存成 csv 文件,再把智能体模型保存到本地, 你就可以把上面推理预测的模型文件换成你自己训练得到的模型文件, 看看跑出来是什么样的效果。打开训练得到的日志 csv 文件,也可以看到,在训练过程中,奖励函数值越来越高,智能体存活的时间也越来越长。 q 零逐渐收敛, 就证明我们学习的越来越好。今天呢,我们使用 matlab 的深度学习和强化学习工具箱,还有仿真工具 cmink, 实现了双足智能体行走的 ddpg 强化学习算法。我们只需要像上帝一样设 治好物理环境智能体和奖励函数,让智能体自己在环境中摸爬滚打,从错误中不断学习进步,最终适应环境,完成任务。 我们每一个人又何尝不是一个智能体呢?跌倒三千次之后,发现了一个更好更强大的自己,凡是杀不死你的,都将使你更强大。


