前阵子做了一篇关于应用深度强化学习来完成机械臂操控的报告,因为导师要在机器人上加机械臂。在这里简单分享一下训练机械臂的过程以及方法。
主要内容来自以下论文:
训练一个机械臂去完成任务,这个任务是把一个乐高积木叠在另一个乐高积木上面。如下所示:
整个实验是在模拟环境中完成的。这个机械臂一共9个关节,6个手臂,3个手指,如下所示:
状态:9个关节的角度和角速度,加上两个积木的位置和相对距离以及到手指的距离。
PS:这款机械臂 Jaco 是由 Kinova Robotics 开发的,有兴趣的可以去买 :)
首先把整个任务分成两部分:
抓取积木 A(积木 A 离桌面到达一个阈值 \theta 视为完成)
叠到积木 B 上去(A 的坐标投影到 B 的坐标系中重合视为完成)
介绍一下应用的算法 Deep Deterministic Policy Gradient:
一款基于 Actor-Critic 结构的算法,加上了来自 DQN 的 Target Network 概念,mini-batch 更新。可以看作 DQN with continuous action space :)
上图的一个循环就是一步,对应模拟的50ms,每个 Episode 会在 150 步后结束,也就是说机械臂有 7.5 秒的时间来完成任务。唯一调的超参数是 Learning rate。
简单说一下更新:Policy Gradient 没什么特别的,Loss function 所需的 Target value 就是由两个 Target Networks 提供的。
整理了一下 Target Network 的原因:
所谓的高效训练就体现在两个扩展上面了:
还有没有其他提速的方法呢?有。
简单来说就是有目的地训练部分任务。比如训练叠积木,就把初始状态设为积木 A 已经在手上了。
另外一个初始化方法是随机取一个 1 至完成任务所需步骤数的随机数,然后或人为或一个成功的 Episode 来执行这个数,再以这个过程的终止状态作为初始状态。
r_{S1} 是第一部分任务的 reward, r_{S2} 是第二部分的 reward,两个函数都是基于欧几里得距离。
设计 reward function 需要注意的就是参数以及对训练过程的引导。
以上是第一篇文章的训练过程。
还有其他适用于机械控制的 RL 算法,比如 NAF、ADHDP。前面提到的训练方法同样适用,不一一介绍了。