1. DeepMimic的两个主要方法
- 提前终止
- 参考状态初始化
2. 状态和动作的表示:状态S 包括每个关节相对于根的位置,四元素表示的旋转、线性速度和角速度,阶段变量 ϕ \phi ϕ,当 ϕ = 0 \phi=0 ϕ=0时,表示运动的开始,当 ϕ = 1 \phi=1 ϕ=1 时,表示运动的结束。在循环运动中,在每个循环结束后,阶段变量重置为 0 。
3. 奖励函数的设计:
用于学习控制策略的奖励函数是各个奖励项的加权之和,使得智能体在模仿参考运动的同时,完成目标任务。
1)匹配关节朝向的奖励
2)减小关节速度差异的奖励
3)匹配参考运动手、足位置的奖励
4)惩罚偏移参考运动质心的奖励
5)完成额外目标的奖励
3. 初始状态分布
固定的初始状态分布:每个episode都包括从运动开始到结束,使得策略必须学习运动的整个阶段。但固定状态初始化状态分布很难探索到具有高价值的状态,这是因为策略只能学习到较容易达到的状态。所以在DeepMimic中改变初始状态的分布。
参考状态初始化(RSI):使用参考运动的采样对初始状态进行初始化,能够克服固定状态初始化很难探索到高价值状态的缺点。
4. 提前终止(ET):当达到一段固定的时间后,或者当触发某些终止条件后就终止当前的episode。当提前终止触发后,智能体在episode剩下的部分得到的奖励就为 0 。这相当于一种阻止不良行为的塑形奖励。另一方面,使得数据的分布偏向于与任务更相关的采样。
5. 多技能的集成:使用多个片段进行训练来得到期望的风格,并使用one-hot编码来输入特定的片段。
技能选择器:使用one-hot编码表示对技能的选择,并同时模仿学习一组不同的技能,随机选择训练的技能并进行采样,使得在训练完成后,能够按需执行任意的技能序列。因此,策略同时也需要学习不同片段中技能的过渡。
复合策略:因为使用同一网络学习多个技能的挑战性,所以可以使用分而治之的策略。使用不同的策略训练不同的技能,然后将它们集合到一个复合的策略中。并使用值函数在给定的状态下选择合适的技能。
6. 技能的训练
控制角色向前运动的任务
7. 代码实现中的技巧
策略网络的初始化,在DeepMimic的策略网络训练初期,策略网络的输出应当接近于0,来使得参考运动能够更好地指导控制策略的学习。所以DeepMimic使用对角高斯矩阵对策略分布进行参数化(通过限制均匀初始化分布的均值,并限制采样的范围,比如范围 [-0.01, 0.01],并将初始化分布的偏差bias初始化为0;分布的方差同样通过均匀初始化进行初始化,并将初始化分布的偏差bias初始化为0.05),并将均值的偏差的初始值设为 0 。从代码的实现来看,DeepMimic将策略网络的隐藏层作为主干(backbone)网络,将策略分布的均值(mean)和方差(std)分别作为两个具有单层网络的策略头(multi-heads)的输出,来进行学习。
DeepMimic中的一个参数配置的例子:
ct_agent_dog_ppo.txt
{
"AgentType": "PPO",
"ActorNet": "fc_2layers_1024units",
"ActorStepsize": 0.000001,
"ActorMomentum": 0.9,
"ActorWeightDecay": 0.0005,
"ActorInitOutputScale": 0.01,
"CriticNet": "fc_2layers_1024units",
"CriticStepsize": 0.0005,
"CriticMomentum": 0.9,
"CriticWeightDecay": 0,
"ItersPerUpdate": 1,
"Discount": 0.95,
"BatchSize": 4096,
"MiniBatchSize": 256,
"Epochs": 1,
"ReplayBufferSize": 1000000,
"InitSamples": 1,
"NormalizerSamples": 1000000,
"RatioClip": 0.2,
"NormAdvClip": 4,
"TDLambda": 0.95,
"OutputIters": 10,
"IntOutputIters": 200,
"TestEpisodes": 32,
"ExpAnnealSamples": 64000000,
"ExpParamsBeg":
{
"Rate": 1,
"Noise": 0.05
},
"ExpParamsEnd":
{
"Rate": 0.2,
"Noise": 0.05
}
}
参数分析:
ExpParamsBeg
是初始的参数,ExpParamsEnd
是训练结束时的参数,在训练过程中,选择从高斯分布进行采样的概率从1下降到0.2,期间高斯分布的噪声始终为0.2
ActorWeightDecay
是actor
网络权重bias
损失的系数,在训练的过程中会减小网络权重的bias
ActorInitOutputScale
是对actor
网络和critic
网络初始网络权重的限制,通过这个参数,网络权重的初始化范围变为[ActorInitOutputScale, -ActorInitOutputScale]
ActorStepsize
和CriticStepsize
分别是actor
网络和critic
网络的学习率
RatioClip
, ItersPerUpdate
, BatchSize
, MiniBatchSize
和 Epochs
是PPO算法如何更新网络权重的参数, 在上面给定的参数中,在训练的每一步都会更新,但每次只在同一批采样上更新一次
代码结构图
在训练过程中,逐渐增大
episode
的长度。能够避免避免智能体在学习过程中“安于现状”(即智能体会尽可能地提升每个episode开始时的奖励,而不去努力探索未知的状态来得到更多的奖励)的情况,从而提升策略在整个max_episode
上的性能。
链接:
[1] Reimplementation of DeepMimic in Isaac Gym - dung defender的文章 - 知乎
[2] DeepMimic: example-guided deep reinforcement learning of physics-based character skills