tensorflow如何做幂律分布_案例分享 | 分布式强化学习在网易大型 MMO 游戏中的应用...

5d500994e9c8b23769f52e17ac44972b.png

8f4b0381a95bf06e2ed2ae52690a24e5.png

业务场景概要

游戏场景

《逆水寒》是一款武侠题材的端游 MMO (Massively Multiplayer Online) 大作,玩家扮演古代侠客,在游戏世界中与其它玩家、NPC 进行交互,体验厚重的历史与多彩的江湖。

本次案例分享的场景,是《逆水寒》中的一个核心玩法“流派竞武”。“流派竞武”是单人 PK 玩法,玩家争夺排行榜名次,进攻方发起挑战,防守方无法应战时由机器人代为出战。传统机器人基于规则编写,一方面开发起来费时费力,另一方面水平有限难以满足玩家需要。而使用强化学习训练出来的 RLAI 机器人进行战斗,具有玩家适配、风格多样、水平高超、难度可控等特点。玩家角色的可选技能有几十个,战斗中携带的技能只有十个,实际玩家技能搭配的排列组合非常多,RLAI 机器人在各种技能组合下都有对应的策略,差异明显的搭配下也呈现不同的战斗风格,这是传统规则 AI 无法实现的。

76cf9fcf062cc9d737fd253f5eef58a2.png
Figure 1 逆水寒流派竞武玩法示意

AI 建模

在该场景下,对强化学习算法而言,主要存在以下两个问题:

  1. 地图较大,AI 需要靠近对手后才能进攻并获得奖赏,存在探索困难的问题
  2. 随机技能组合,动作组合数共有

982fad824a0fff429782e44e46f243f7.png

=44352种,AI 需学会在不同技能组合下存在的不同套路打法。

针对第一个问题,我们采用了课程学习的方式,对第二个问题,我们将是否携带了技能作为模型特征编码至网络原始输入状态中。

出于对训练速度的要求,未采用直接的图像输入,输入状态中的信息是通过游戏内置接口获得。

61c92d75c3a102a1e5a7efa84fbb698f.png
Figure 2 随机技能挑选示意

输入状态主要包含:

  • AI 自身及对手相对位置(包括距离及角度)
  • 表示当前可用动作的 0-1 向量
  • 表示当前装备技能的 0-1 向量
  • 状态信息(自身及对手的当前属性状态以及Buff信息)

动作主要包含:

  • 位移相关:移动、跳、躲避等
  • 技能相关(共 10 个)

奖励函数主要包括:

  • 胜/负,稀疏,仅在一局游戏结束后才给
  • 与 HP 有关的 Reward,包括进攻防守等,稠密

神经网络方面,我们使用的是简单的三层全连接网络。为了加速训练,减少无效动作的探索,我们将状态中的 legal action 信息作为 mask,在网络输出动作前将无效动作进行过滤。

4ed1a7f90c2557fab70c52d436c599ae.png

训练框架及环境介绍

单机及多机训练构架

为了对比单机训练和分布式训练方式在本文所述的场景下的区别,我们分别配置了以下两种训练环境:

其中,Worker 模块和 Learner 模块上均会维护一套 TensorFlow 的神经网络计算图,区别在于 Worker 上的计算图仅进行推断而不进行训练,计算梯度和反向传播部分操作均在 Learner 模块上进行。Worker 模块在此处负责与游戏模块进行交互,收集训练样本。为了增加样本获取速率,我们会在单个节点上启动多个 Worker 模块。为了不阻塞 Learner 的训练,我们将模型分发模块独立出来,做成了 Router,专门用于分发模型到 Worker 模块。

e86d5b02a49743e30f463378a48266ff.png
Figure 3 单机训练构架

与单机训练模式不同的是,在分布式训练配置下,节点被区分为 Worker 节点与 Learner 节点。Worker 节点仅负责与游戏模块进行交互获取训练数据,Learner 节点仅负责模型训练。节点间的模型分发由各节点上的 Router 模块进行转发。

b54442497de1b50a15c345effda7b9c1.png
Figure 4 分布式训练构架

核心代码

网络定义部分

由于框架支持通过配置文件自动生成网络结构,此处对 TensorFlow 定义网络部分做了一定的包装

  • 创建图,Saver 以及对应的配置参数

ee6000fe92acdc342e3251e5aaec64b8.png
  • 具体网络结构分步构建

cd7f0053b50eb89c30da9f1d7f4a2d9b.png
  • 网络输入部分的 PlaceHolder 构建

89ccc78c4ce122a987432c775f6737bc.png
  • 网络中间层构建方式

c4c01da6e52b062ee145eae43e87a377.png

5ded0166e4c85ef82a985f620d046b48.png

Learner 模块训练部分

核心其实就是一个循环,训练后把模型分发给 Worker 模块

55c0c6fcf18e2681a0f5de4b23f9d82c.png

8e56ee48ef88812a3bbf0acdebc70f5e.png

Worker 模块

核心逻辑为将交互的得到的训练数据发送给 Learner 模块,更新 Learner 模块发送来的模型

f3caf09676de7b1bfead3c2f32e6266d.png

68ba9bc763bfba46d0da4a141e125ef8.png

实验设置和结果

实验设置

本次实验对比了单机模式下及分布式(3 节点)模式下训练逆水寒流派竟武 1v1 对战的场景。实验通过对比达到相同测试指标下所消耗的时间差异,来评判分布式训练方式相对于单机的提升效果。

硬件及框架配置:

  • 单个节点硬件配置:
    • CPU:Intel Xeon Gold 6266C@3GHz
    • 内存:192GB
  • 单机模式下,框架配置的Worker数量为 40 个
  • 分布式模式下,使用四个节点,其中三个为 Worker 节点,每个节点上配置 40 个 Worker(共 120 个Worker),剩余的一个节点为 Learner 节点

算法配置:

  • 使用算法:IMPALA [1]
  • Batch Size: 256
  • Learning Rate: 2.5e-4
  • # 优化器参数
  • Optimizer: Adam
  • Adam Beta_1:0.9
  • Adam Beta_2: 0.999
  • Adam Epsilon 1.0e-8
  • # IMPALA算法计算V-Trace参数
  • Rho: 1.0
  • C: 1.0

游戏配置:

  • 训练角色:血河(近战角色)
  • 训练方式:RLAI vs 内置流程图 AI

测试评估方式:双方均配置随机血量/随机技能组合情况下,测试 100 局对战后各项指标取平均值(采用此种方式进行评估是为了能够综合评价 RLAI 在不同情况下对于内置流程图AI的测试指标情况,如:出生时血量较对手少,技能组合较对手差等劣势情况)。

结果分析

首先,我们对比了不同配置下,训练样本产生速率及消耗速率的差异,从图上看,分布式配置下,样本产生和消耗速率的提升基本与 Worker 个数增加成正比。

a1e3e007bb67ce20316fd9bf809a4035.png

此外,我们还对比了游戏中相关的指标(包括测试胜率,技能失败率,战斗结束剩余血量比例,平均死亡率);可以看出,达到相同的指标,分布式训练耗时差不多是原有 40% 左右。

1b6bce9d202284a5d7cdf512dc882551.png
Figure 5 测试胜率对比

0751577b8d5ddea7ef4493cb75f46b73.png
Figure 6 技能失败率对比

aac37eb55e26088fa976fe41a37c3ae8.png
Figure 7 战斗结束胜率血量百分比对比

c778dd6af1707a99426365fd60f8213e.png
Figure 8 平均战斗结束死亡率对比

由此,可以说明借助 TensorFlow 实现的分布式强化学习训练方案,在训练逆水寒 1v1 的 RLAI 过程中,能够较为有效的缩短训练时长,同时模型依旧保持较高的水准

总结

本文以逆水寒游戏场景为例,介绍了网易伏羲实验室如何使用 TensorFlow 实现分布式训练,生产用于线上使用的 RL-GameAI。上线后,AI 对战玩家的胜率可以达到 90% 以上,其效果已接近人类顶尖高手操作水平。

后续我们将继续探索,将前沿技术、先进算法、TensorFlow 框架与实际游戏工业场景相结合,更高效优质的生产游戏 AI,提供人工智能在游戏场景中的解决方案。

文 / 南北, @网易伏羲AI实验室

— 参考文献 —

[1] Espeholt, Lasse, et al. "Impala: Scalable distributed deep-rl with importance weighted actor-learner architectures." arXiv preprint arXiv:1802.01561 (2018).

想了解更多 TensorFlow 落地应用?欢迎关注 TensorFlow 官方微信公众号(TensorFlow_official)!

65890240b9acfb259f24358ddf721a15.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值