设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 666|回复: 2
收起左侧

人工智能|增强学习与仿生机器人

[复制链接]
发表于 2018-3-14 16:43:54 | 显示全部楼层 |阅读模式

提到机器人、未来科技、人工智能,可能最容易让人想起的就是一些电影画面。《机器人瓦力》 《终结者》等。今年一篇 IIIT(International Institute of Information Technology)研究人员的论文,描述了如何在机器人开发中使用强化学习技术,论文内容稍后解说,只看到这图就会让人不禁想起《终结者》里的 T800 系列,以下会简称该机器人为 “T800”。


                               
登录/注册后可看大图



机器人有很多类型,例如家用的扫地机器人、工厂代工的机器手臂、无人机、地表勘察车等。仿生类机器人只是按照生物学蓝本来设计机器人,例如波士顿动力学工程公司的大狗。


                               
登录/注册后可看大图



其设计就是按照汪星人的运动规律,当然这是四足类,其平衡问题较易解决,相较之下,双足类机器人的平衡一直是存在问题的,这是源于运动学计算方式带来的问题,下面先简述一下运动学计算是如何让机器人做出适当的行动的。


机器人运动学


我们从结构简单一点的机器人开始——KR210,其样貌如下图。


                               
登录/注册后可看大图

KR210 系列是工厂使用的机器人,其末端可以配置抓勾等配件,实现固定位置抓取,亦可以增加摄像头来完成基于计算机视觉的准确物体定位与抓取,这种机器人是模拟人的“肩-肘-手”结构,我们称之为 6 自由度机器人,为何是 6 自由度呢?在运动学上我们更习惯用以下这个图:


                               
登录/注册后可看大图




从图中可以看到,能起到运动作用的关节(就是圆柱体)仅有 6 个,所以称为 6 自由度。大家可以观察到这张图中,基底有坐标空间(x0,y0,z0),而每个活动关节都有自己的坐标空间,但是最终抓取目标物体的位置却是描述在基底空间的,例如我们说从原点出发去抓一个球,球的位置为(3.5,1.2,2.7),直线距离 15 公分,这样的坐标描述就是基于原点的,15 公分是球在基底坐标空间位置与原点的距离大小。而如上图,最右端的抓勾位置也会基于左下角的基底坐标空间进行描述。


在机器人运动学中我们就需要解两个过程:正向运动过程与逆向运动过程,正向运动过程就是知道某一时刻的参数(theta转角、臂长等)来求解抓勾的位置,即

                               
登录/注册后可看大图
;而逆向运动过程则是知道抓勾的位置,反向求解对应的 theta1 至 theta6 这六个能导致机器人抓勾到达该位置的转角,即

                               
登录/注册后可看大图
。当机器人运行时,我们给予一个目标,放置一个球并把该球基于基底的坐标给予机器人,这时机器人就会由逆向运动计算,求出“要伸手抓球需要的各个转角是多少”,由正向运动计算,求出“套用刚刚求出的转角,看是否能到达球的位置”。这样就会产生一个误差,即“实际上球在这儿,但机器人却抓去了那儿”,随着不断计算减少误差就会得到一个运动过程的轨迹,最终可以正确的抓到球。


当然,以上只是 KR210 系列,6 自由度,接下来可以看看今天的主角,就那个 T800 的结构—— 27 自由度机器人!


                               
登录/注册后可看大图


注意这类机器人研究人员是把右脚作为基底的,当机器人使用运动学运算方法进行工作时,研究人员发现机器人会经常性失去平衡,因为平衡这种事并没有计算在该运动模型中。而计算平衡目前常用一种称为 Zero Moment Point(ZMP)的计算模型:


                               
登录/注册后可看大图


式中,px 与 py 表示重心(CoM)的位置;M 是机器人的质量;g 是重力加速度;L 是角动量;P 是动量。将 ZMP 与运动学过程结合起来,运动学过程会通过很多微步形成通往目标的运动轨迹,每一次反向与正向运动的计算都会形成一个里目标更接近的微步,那么对于每一个微步我们都可以利用 ZMP 模型计算出当前的重心位置,如果在某一微步时重心偏离规定范围了,那么机器人就是失去平衡了,那由这样的微步构成的运动轨迹就是错误的,不能被执行,这样就可以避免机器人在运动过程中摔倒了。


但就实际情况来看,这样的计算过程是相当耗时的,而且往往最终得不到正确结果,这体现在反向运动过程上,一方面反向运动会设计大量的大规模矩阵运算,资源消耗太大,并且会带来多姿势的问题,即机器人要想抓取一个球,其实有多种姿势(也就是有多种配置)都可以达成目标。


                               
登录/注册后可看大图


这就会导致多解问题,造成高的误差。


想想其实人类也并不聪明,小时候我们学步也不见得比机器人轻松,刚刚能够两足行走时也会因为大脑与小脑的计算偏差而经常跌倒。但是我们有一个学习的过程,这是人类与机器人的差别,我们是在学习中不断获得经验,并总是反思跌倒的原因,最后才能无忧无虑的自由奔跑,也许机器人也需要这样的过程。


强化学习


Reinforcement Learning(强化学习,RL)就是这样的技术,曾经被 RL 武装的 Alphago 很好的证明了学习过程的重要性。早期的强化学习多使用 Stochastic 类型,这种强化学习的原理在于,给定一个状态 s,在当前状态下随机给予行动 a,如果该行动造成好的结果则给予奖励 r,如果造成坏的结果则回到之前的状态 s-1 重新判断行动,不断尝试中学习一种概率性的行动方式:π(a/s) = P [At = a/St = s] ,这样的 RL 方法最广泛的用途被用来编写能够自己玩游戏的 Ai,尤其是游戏机中的游戏,因为这类游戏在一个s的a都是有限的,例如《超级玛丽》 这类 RL 构成的计算网络成为 Deep Q-learning Net(DQN)


另一种 RL 称为 Deterministic,这种 RL 是直接从状态 s 中学习行动 a 的函数关系:a = π(s) ,这类 RL 可以适用于不可计数行动的场景。


数学过程


本文使用的增强学习网络结构为 Deep Deterministic Policy Gradient(DDPG)来代替反向运动学的过程,该结构由两个计算网络构成(Actor与Critic),使用经历回放(experience replay)来完成学习,即仍需要记录之前一些状态s的数据来作为奖励依据,这个 replay 需要保存这样一个元组

                               
登录/注册后可看大图
,像其他神经网络一样,DDPG 也需要使用部分 replay数据来计算误差,然后更新网络参数。正如这两个网络(Actor与Critic)的名字,Critic 使用 Bellman 方程来计算一个 Q(s,a,w),而 Actor 网络负责按照 Q 计算出策略值 μ(s; θ),同时 Critic 网也会控制 Actor 网的误差。所以 Actor 网的误差公式就有了:

                               
登录/注册后可看大图


同时研究人员又建立了两个目标网络,

                               
登录/注册后可看大图
就分别表示目标 Critic 网与目标Actor 网,两个目标网可以让原网络缓慢跟踪,避免出现多个离散解的问题,至此就可以构建 Critic 网的误差公式:

                               
登录/注册后可看大图


这里 r 表示奖励(reward),而

                               
登录/注册后可看大图
是一个用于手动控制目标网络影响效果的折现因子超参。


所以,以下两个参数就是需要通过学习不断更新的经验参数:

                               
登录/注册后可看大图


这里

                               
登录/注册后可看大图
是更新控制,当它远小于 1(<<1)时,目标网络就被更新了,这里被设置为0.001。


接下来是奖励函数 r:

                               
登录/注册后可看大图


其中

                               
登录/注册后可看大图
都是可以手动配置的超参,dist 是当前位置与目标位置的绝对距离,

                               
登录/注册后可看大图
是起始位置与当前位置的第 i 个夹角差距。本文的超参取值为:

                               
登录/注册后可看大图


以上就是全部数学内容了,这里整理一下思路以应付后面的逻辑过程

1、 计算网络:

Critic 网

                               
登录/注册后可看大图


目标 Critic 网

                               
登录/注册后可看大图

Actor 网 a =

                               
登录/注册后可看大图

目标 Actor 网

                               
登录/注册后可看大图

2、 超参:

                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图

3、 更新参数:

                               
登录/注册后可看大图

                               
登录/注册后可看大图
,Q,

                               
登录/注册后可看大图

4、 奖励函数:r

5、 到下一个时间的状态后,所有带上撇的都更新为没有上撇的现时状态。


逻辑过程


A. 整体过程

1. 随机初始化 Actor 与 Critic 这两个网络。

2. 为 Actor 网络建立目标 Actor 网络。

3. 为 Critic 网络建立目标 Critic 网络。

4. for 循环,遍历(1 到 最大迭代数)。

5. 通过 Reset() 辅助方法得到 s。

6. 遍历(j 到 最大步数)。

7. 通过 Actor 网络计算出 a,这里只是将当前 s 放入

                               
登录/注册后可看大图
计算得到 a。

8. 为 a 添加噪音。

9. 利用辅助函数 Step(a),得到

                               
登录/注册后可看大图
、r 与 done,其中 done 表示是否已完成目标。

10. 将

                               
登录/注册后可看大图
存在数据缓冲区,用于之后的学习。

11. 判断数据缓冲区是否已满,如果满说明数据量够了,没有满就继续堆。

12. 从满了的缓冲区中取出 BSize 大小的随机数据作为学习用。

13. 使用数据进行训练,更新 Critic 网络得到新的 Q。

14. 使用数据进行训练、新的 Q,更新Actor网络得到新的策略 μ,到这里相当于机器人已经通过计算移动到了新的微步(只是计算出了这个微步,实际上机器人是等整个计算网络把通路计算好后,也就是所有迭代结束或者误差都小到可以接受,这时生成的移动轨迹,才会指导机器人做动作)。

15. 使用更新目标网络。

16. 判断 done 是否为真,为真则跳出整个循环。


B. 辅助方法

Reset():设置随机的初始配置和目标位置,并使用 GetState(config) 得到 s。

GetState(config):正向运动学计算将要到达的位置,利用到达位置、配置、目标位置计算当前状态 s。

Step(config):通过 a 得到新的 config,再用新 config 更新正向运动学模型,并利用 config调用 Reward 得到奖励和结果,最后再调用 GetState 得到 s。

Reward(config):计算 ZMP,判断重心是否超出位置,并判断是否已完成目标。


训练结果


结果如下图,这里横轴都是迭代次数,三个图分别表示 Q 值大小、奖励值 r 大小、误差大小:


                               
登录/注册后可看大图



总结一下本文所描述的思路,首先机器人需要正向运动(FK),反向运动(IK),计算重心(ZMP)。问题最多的 IK 过程是本文着重研究对象,使用深度学习中的强化学习技术DDPG,目光聚焦在每一个 IK 计算的微步,这一步如何踏出就取决于对配置更新的结果,再接下来就深入到如何通过数据训练更新参数。网络结构参数见原文 3 页 B 段。

网址:www.yeslab.net

                               
登录/注册后可看大图




您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-4-17 04:26 , Processed in 0.062395 second(s), 10 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表