OpenAI 5 for Dota 是如何连接单位的?

人工智能 深度学习 开放式 深度学习
2021-10-28 15:01:59

我不是人工智能领域的专家,所以如果这是一个简单/容易的问题,我深表歉意。我试图为另一个游戏实现类似于 OpenAI 的网络,但我注意到我并不完全了解网络是如何工作的。

下图是 OpenAI Five 的网络图 OpenAI的模型

基本问题

数据如何连接/在 LSTM 之前连接之后或进入 LSTM 之前的数据维度是多少?以下是我为澄清起见而提供的想法。

第一次解释

在单位的蓝色区域,我最初的理解是,对于每个可见单位,最大池的输出沿列连接。因此,假设行数为 1(因为每个单元都应用了 1d 最大池),列数为 n 并且有 N 个可见单元,连接时矩阵的最终大小为(1,nN)如模型左侧所示,拾音器等提供了一些额外的列。

这种解释有问题

由于玩家每回合可以看到的单位数量不是恒定的,在这种解释下,我怀疑连接层之后的全连接层无法完成其工作,因为矩阵乘法在列数可变的情况下变得不可能。

可能的解决方案

一种可能的解决方案是将观察到的单元数设置为最大值Nmax如果未观察到某些单位,则用常量填充。是这样吗?

第二次解释

我的第二种解释是数据沿行连接。在这种情况下,我可以看到数据可以通过全连接层,因为列数可以保持不变。在这个假设下,我决定在通过 LSTM 之前,将数据重新整形为(批量大小、行数、列数)。

这种解释的问题

虽然我发现这种解释更吸引人,但我注意到在这种思路下,LSTM 仅用于关联输入数据而不与时间关联(LSTM 的时间步长只是下一行数据而不是比实际时间)。我知道这不是一个特别的问题,但我认为这里没有特别需要使用 LSTM,因为在第二种解释中,数据的顺序没有特殊意义。但情况是这样吗?

对于任何不清楚的地方,我提前道歉。请在评论中告诉我,我会尽力澄清!

1个回答

Tl;博士最大池

你可以在图中看到,到处都有可变数量的输入(拾取、单位、英雄修改器/能力/物品),随后是一个最大池,尽管我不知道最大池实现的细节。

来自https://neuro.cs.ut.ee/the-use-of-embeddings-in-openai-five

请注意,虽然修饰符、能力和物品的数量是可变的,但网络最大池会覆盖每个列表。这意味着只有所有这些维度中的最高值才能真正通过。起初它似乎没有意义——它可能给人的印象是你的能力是所有现有能力的组合,例如远程被动治疗。但这似乎对他们有用。

上述处理是对附近的每个单位单独进行的,一般属性、英雄修饰符、技能和物品的结果都串联在一起。然后根据它是敌方非英雄、友方非英雄、中立、友方英雄还是敌方英雄应用不同的后处理。

最后,后处理的结果在该类型的所有单元上进行最大池化。乍一看,这似乎是有问题的,因为附近单位的不同质量会组合在一起,例如,如果一个维度代表一个单位的健康状况,那么网络只能看到相同类型单位的最大健康状况。但是,再次,它似乎工作正常。