如果我们想让Agent来执行的某个动作,简单的演示给它看通常更加直观,而不是试错的方法来学习它。考虑我们训练医护兵NPC的示例:我们可以喂给医护兵真实世界例子的观察observations 以及 来自于游戏控制器的动作来指导医护兵的行为,而不是通过通过奖励函数间接训练医生。更具体地,在该模式中,训练期间的Brain type被设置为Player,并且控制器执行的所有动作都将被记录(除了agent观察之外)并将其发送到Python API。然后,模仿学习算法将使用来自人类玩家的这些(观察-动作)对 来学习策略。 Youtube视频链接(https://youtu.be/kpb8ZkMBFYs)需翻墙。
使用行为克隆
可以使用各种可能的模仿学习算法,其中最简单的一种是行为克隆。它的工作原理是收集教师的培训数据,然后简单地用它来直接学习策略,就像监督学习图像分类或其他传统机器学习任务一样。
为了在场景中使用模仿学习,你需要的第一件事是创建两个大脑,一个是“老师”,另一个是“学生”。 我们假设Brain对象的名称分别是“Teacher”和“Student”。
将“Teacher”Brain设置为Player模式,并正确配置输入以映射到相应的操作。确保在Brain的属性窗口中选中“Broadcast”。
设置“Student”Brain为External 模式。
把Brain赋值给希望训练的Agents(一个Agent作为老师,至少一个设置为学生)。
在config/trainer_config.yaml中,为“Student”大脑添加一个条目。 将此条目的trainer参数设置为imitation,将brain_to_imitate参数设置为Teacher大脑的名称:“Teacher”。 另外,设置batches_per_epoch,它控制每个时刻的训练量。 如果您希望长时间训练Agent,请增加max_steps选项。
使用mlagents-learn config/trainer_config.yaml --train --slow启动训练过程,并在屏幕上显示“通过按Unity Editor中的"Start training by pressing the Play button in the Unity Editor"消息时按Unity中的▶️按钮。
在Unity窗口中,通过提供您希望看到的行为的“教师演示”来控制有Teacher Brain的Agent。
观看有Student Brain的Agent开始与演示内容表现类似。
一旦学生Agent展示了所需的行为,请从命令行使用CTL + C结束培训过程。
将生成的* .bytes文件移动到Assets文件夹的TFModels子目录,并与Internal Brain一起使用。
BC Teacher Helper
我们提供了一个方便的工具——BC Teacher Helper,该组件可以添加到 Teacher Agent。
该工具让你使用键盘快捷键完成以下内容:
- 开始和停止记录经验。如果您想要与游戏进行交互但没有让agent从这些交互中学习,这非常有用。 切换它的默认命令是按键盘上的R。
2.重置训练缓冲区。这使您可以指示agent忘记其最近经验缓冲区。 如果您希望让他们快速学习新行为,这非常有用。 重置缓冲区的默认命令是按键盘上的C.
原文连接:https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Training-Imitation-Learning.md