DeepMimic: Example-Guided Deep Reinforcement Learning of Physics-Based Character Skills
概述
这是一篇在动画人物上的强化应用文章,非常震撼,主要集中在Multi-skilled agents的学习上,以及提出一种该问题下的Exploration问题。
目标是imitation + task objective的结合,通过RL学习一个多技能的agent,强调在动画上的generalization的问题。
因为是具体动画制作的应用领域,所以focus on 算法,大体怎么做,不像之前的写那么多公式,并考虑计算细节。
这一篇文章其实技术细节写得十分详细,甚至是state的设计、action在实际应用中再接个PD从控制器,以及在Vision-based的时候怎么做,如果细节不太清楚的可以看看这篇文章技术细节。
一、High-level的做法
- 数据上有一堆专家数据,Paper中为kinematic reference motions
- 要学习的robust policy为 π ( a t ∣ s t , g t ) \pi(a_t|s_t,g_t) π(at∣st,gt),其中 g t g_t gt为task-specified的
- 最终希望学得的Agent能以专家的motion去完成指定的task(比如用专家展示的正常跑步姿态去触碰一个球;用专家展示的后空翻姿态去完成这个动作)
- 所以最核心的就是一个为task-specified的objective,一个是imitation objective,将一个任务拆解为以某种方式完成某种目标
所以要关注的就是
- 如何从专家数据中提取中对应的监督信息(Imitation Objective)
- 学习multi-skills的时候,怎么平衡?(Multi-Skill Objective)
-
- 如何设计task-specified的goal(Task Objective)
- 如何将Task Objective与Imitation objective混合在一起?
至于怎么设计state、goal、action以及target pose的具体细节忽略。
二、主要逻辑
2.1 Single Imitation Objective
首先是解决第一个关注点,怎么从expert reference motion中提取到监督信息?
r t I r_t^I rtI为一个姿态动作的Imitation Objective, r t p r_t^p rtp为关节姿态或者关键方向(joint orientation)的目标, r t v r_t^v rtv关节角速度(angular velocity)的木目标, r t e r_t^e rte为描述end-effector在3D world position的目标, r t c r_t^c rtc为物体质心位置的目标。
这些目标分别为:(q是reference motion pose描述方向,p是3D world position描述位置)
所以一个Imitation Objective由四部分小目标组成,这些目标相当于说,你这policy输出的motion(joint orientation/position/velocity/point)得与reference motion非常接近,优化的目标就是这个exponentiated Sum Square Error,这个Imitation Objective还是很直观的。
(越符合,给出的reward越大,越不符合,给出的reward越小,相当于是一个Objective的定义)
2.2 Multi-Skill Imitation Objective
刚才介绍的是对一种Skill的Imitation Objective,现在看看怎么学习一个多技能的Agent。
- 定义一个Multi-clip reward来表示多种Skill的组合
- 一个skill selector policy采样one-hot编码,便于user手动选择
- 组成一个composite policy,以结合多种技能来形成一个complex behavior
其实就是说,训练时单独train多个policies,在测试时利用其value function进行选出合适的policy,这个整体称为composite policy,至于skill selector是方便user即我们进行操作的。
假如有k个独立训练好的policy的 { V i ( s ) , π i ( a ∣ s ) } i = 1 k \{V^i(s),\pi^i(a|s)\}_{i=1}^k {Vi(s),πi(a∣s)}i=1k,一个值函数判断状态价值,一个策略函数是怎么做。那一个composite policy就是把这些独立的合起来:
Π ( a ∣ s ) = ∑ i = 1 k p i ( s ) π i ( a ∣ s ) p i ( s ) = exp [ V i ( s ) / T ] ∑ j = 1 k exp [ V j ( s ) / T ] \Pi(a|s)=\sum_{i=1}^kp^i(s)\pi^i(a|s)\\ p^i(s)=\frac{\exp[V^i(s)/T]}{\sum_{j=1}^k\exp[V^j(s)/T]} Π(a∣s)=i=1∑kpi(s)πi(a∣s)pi(s)=∑j=1kexp[Vj(s)/T]exp[Vi(s)/T]
T是温度,通过每个policy的值函数来决定当前状态s来决定composite policy应该选择哪个policy执行,这样一个组合后的policy就能利用多个独立的policy来形成复杂动作。(Boltzman Distribution来决定single policy的概率)
2.2 Task Objective
这是一个往某一方向按某一速度跑的任务的reward,为了完成某个task而设计的reward:
r
t
G
=
exp
[
−
2.5
max
(
0
,
v
∗
−
v
t
T
d
t
∗
)
]
r_t^G=\exp[-2.5\max(0,v^*-v^T_td^*_t)]
rtG=exp[−2.5max(0,v∗−vtTdt∗)]
d t ∗ d^*_t dt∗为target direction, v t T v^T_t vtT为agent的center-of-mass velocity, v ∗ v^* v∗为desired speed
就是说,如果agent质心的速度 v t T v_t^T vtT与方向 d t ∗ d_t^* dt∗,与我们设置的desired speed即 v ∗ v^* v∗,差距很大的话,reward即 r t G r_t^G rtG就很小。只有两者相等时,reward最大。
(至于target direction由goal来提供,即 g t = d t ∗ g_t=d_t^* gt=dt∗,训练时,goal是随机的,测试时可人为设定)
下面还有很多具体任务设计的reward,对于reward design中的范围、奖励设置、归一化等有很多具体的例子进行学习,具体参考Paper,再贴个出来。
网络结构:(H是如果用vision-based policy的话,就像2016 JMLR那个Visuomotor policy做,不用就直接state,goal输入)
输出是一个policy:
三、实验
这篇文章在算法层面上不难,DRL上用的算法是PPO包括了GAE计算优势函数,计算值函数用了 T D ( λ ) TD(\lambda) TD(λ),更偏向于amazing、exciting的应用。感觉实验性文章的工程难度超大= =,从中窥探一些经验吧:
- 先熟悉这四个Agent的一些小细节,如关节数、质量、高度、自由度,状态与动作的维度
-
然后Ablation Study是必看的,RSI是reference state Initialization,ET是Early Termination,是Imitation Objective中的做法。(通俗来说,RSI是随机选取专家数据的初始状态进行探索,相当于在高价值状态附近探索,效率会高些;ET是为了避免过拟合环境中的dynamics 噪声)
-
看看Imitation与Goal Objective的结合效果(都是把Objective做到了reward里去的)
Imitation单独来看非常一般,因为问题实在是太高维了,数据量不足
基于State与Goal的Rl单独看来比Imitation好出一大截,但稀疏reward的情况下,性能的好坏取决于能否探索到High-Reward Region,探索到了,性能肯定ok,毕竟监督信息reward传递到位了。
因此,利用Imitation的Objective来指导RL中对High-Reward状态的探索,就是这篇Paper在算法层面的一个点,还探究了RSI以及ET两种Trick的对比实验。 -
看看需要多少仿真数据量(Walk那一列表示motion,可以理解成姿态,是Imitation Objective,Target Heading那一列表示goal,可以理解成任务,是Task Objective/Goal Objective)(NR是Normalized Return)
嗯,需要的虚拟数据是千万级别的,那估计Train一个就得三四天了= =
总结
代码有开源:https://github.com/xbpeng/DeepMimic
文章:https://arxiv.org/abs/1804.02717
大佬的博客:https://xbpeng.github.io
一句话总结:专家数据的Imitation形成一个Objective与Task Objective相关的Goal都做进了Reward里面,然后建模成一个RL目标就是优化,最后将多种Policy用Boltzman Distribution组合起来,比较重要的是RSI与ET两个Tricks。
简略点:核心是RL中的Reward Design,分为Imitation Reward与Goal Reward两部分。
不足:
- 一个Episode的长度问题,训练的时候使用了一个phase variable对Episode分阶段训练(实际上就是分层强化学习,分阶段探索潜在的High-Reward Region)
- 多个Policy集成为一个Composite Policy肯定对可集成Skilled的个数有所限制,感觉并不是真正学到了Skill背后的能力,Meta-Learning就很适合搞一下了
最后贴个图感受一下训练过程的跌宕起伏: