深度学习实战——强化学习与王者荣耀(腾讯开悟)

         忆如完整项目/代码详见github:https://github.com/yiru1225(转载标明出处 勿白嫖 star for projects thanks)

目录

系列文章目录

一、强化学习综述与PPO算法解析

1.强化学习综述

1.1 强化学习简介

1.2 强化学习的要素与架构

1.3 强化学习应用场景

1.4 强化学习算法综述

2.PPO算法

2.1 PPO算法简介

2.2 PPO算法详解

        传统策略梯度算法

        自然策略梯度算法

        信赖域策略优化算法(TRPO)

        近端策略优化算法(PPO)

二、腾讯MOBA强化学习框架解构

1.论文简介

2.框架详解

三、参考资料


系列文章目录

本系列博客重点在深度学习相关实践(有问题欢迎在评论区讨论指出,或直接私信联系我)。

第一章  深度学习实战——不同方式的模型部署(CNN、Yolo)_如何部署cnn_@李忆如的博客

第二章  深度学习实战——卷积神经网络/CNN实践(LeNet、Resnet)_@李忆如的博客-CSDN博客

第三章  深度学习实战——循环神经网络(RNN、LSTM、GRU)_@李忆如的博客-CSDN博客

第四章 深度学习实战——模型推理优化(模型压缩与加速)_@李忆如的博客-CSDN博客

第五章 深度学习实战——强化学习与王者荣耀(腾讯开悟) 


梗概

本篇博客主要介绍强化学习与腾讯AI Lab在MOBA(王者荣耀)中提出的强化学习系统框架。


一、强化学习综述与PPO算法解析

由于开悟平台上的实践(智能体训练与对战)实际上是强化学习的经典任务,故本章先对强化学习的核心概念做一定引入,并对本次实验开悟使用的算法PPO进行解析。

1.强化学习综述

1.1 强化学习简介

强化学习是机器学习的一个分支领域,旨在设计智能体(agent)能够通过与环境的交互学习最优行为策略。与监督学习和无监督学习不同,强化学习并不依赖于标记好的训练数据或明确的目标函数,而是通过与环境的反馈进行学习,即强化学习是第三种机器学习范式。

Reinforcement learning is learning what to do—how to map situations to actions——so as to maximize a numerical reward signal. ----- Richard S. Sutton and Andrew G. Barto 《Reinforcement Learning: An Introduction II》

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第1张图片

图1 监督学习-无监督学习-强化学习划分

在强化学习基本流程中,智能体通过观察环境的状态,采取行动,然后接收环境的奖励或惩罚来评估行动的好坏。目标是通过与环境的交互,使智能体学会选择能够最大化累积奖励的行动序列,即学习到最优的策略。强化学习的关键在于将长期的累积奖励最大化,而不仅仅是针对单个行动的即时奖励。

综上,我们可以总结出强化学习的核心特点如下:

  1. 没有监督者,只有一个奖励信号
  2. 反馈是延迟的而非即时
  3. 具有时间序列性质
  4. 智能体的行为会影响后续的数据

1.2 强化学习的要素与架构

强化学习系统一般包含四个核心要素如下:

  1. 状态(State):环境的描述,反映了智能体与环境的交互情况。
  2. 行动(Action):智能体在某个状态下采取的动作。
  3. 奖励(Reward):环境根据智能体的行动给予的反馈信号,表示行动的好坏。
  4. 策略(Policy):智能体在给定状态下选择行动的策略,可以是确定性策略(确定选择一个行动)或概率性策略(选择行动的概率分布)。

Tips:强化学习系统还包含“智能体(agent)”与“环境(environment)”两大部分。

强化学习系统核心部分详解如表2:

表2 强化学习核心部分详解

Ⅰ、策略(Policy):

策略定义了智能体对于给定状态所做出的行为,即一个从状态到行为的映射,事实上状态包括了环境状态和智能体状态,这里我们是从智能体出发的,也就是指智能体所感知到的状态。因此我们可以知道策略是强化学习系统的核心,因为我们完全可以通过策略来确定每个状态下的行为。我们将策略的特点总结为以下三点:

  1. 策略定义智能体的行为
  2. 它是从状态到行为的映射
  3. 策略本身可以是具体的映射也可以是随机的分布

Ⅱ、奖励(Reward):

奖励信号定义了强化学习问题的目标,在每个时间步骤内,环境向强化学习发出的标量值即为奖励,它能定义智能体表现好坏,类似人类感受到快乐或是痛苦。因此我们可以体会到奖励信号是影响策略的主要因素。我们将奖励的特点总结为以下三点:

  1. 奖励是一个标量的反馈信号
  2. 它能表征在某一步智能体的表现如何
  3. 智能体的任务就是使得一个时段内积累的总奖励值最大

Ⅲ、价值(Value):

价值(函数),与奖励的即时性不同,价值函数是对长期收益的衡量,而不仅仅盯着眼前的奖励。结合强化学习的目的,我们能很明确地体会到价值函数的重要性,事实上在很长的一段时间内,强化学习的研究就是集中在对价值的估计。我们将价值函数的特点总结为以下三点:

  1. 价值函数是对未来奖励的预测
  2. 它可以评估状态的好坏
  3. 价值函数的计算需要对状态之间的转移进行分析

Ⅳ、环境(模型)

模型(Model),是对环境的模拟,如当给出了状态与行为后,有了模型我们就可以预测接下来的状态和对应的奖励。但我们要注意的一点是并非所有的强化学习系统都需要有一个模型,因此会有基于模型(Model-based)、不基于模型(Model-free)两种不同的方法,不基于模型的方法主要是通过对策略和价值函数分析进行学习。我们将模型的特点总结为以下两点:

  1. 模型可以预测环境下一步的表现
  2. 表现具体可由预测的状态和奖励来反映

结合表2,一个实际的例子如图2所示,对应的元素/部分如表3所示:

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第2张图片

图2 强化学习示例

表3 示例-元素/部分对应

名称

对应上图2中的内容

agent

environment

鸟周围的环境,水管、天空(包括小鸟本身)

state

拍个照(目前的像素)

action

向上向下动作

reward

距离(越远奖励越高)

根据强化学习定义及元素/部分解析,我们可以总结其核心架构如图3所示: 

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第3张图片

图3 强化学习核心架构

分析:如图3所示,强化学习基本流程即从当前的状态st出发,在做出一个行为At之后,对环境产生了一些影响,它首先给agent反馈了一个奖励信号Rt,接下来我们的agent可以从中发现一些信息,进而进入一个新的状态,再做出新的行为,形成一个循环

1.3 强化学习应用场景

强化学习在众多领域有着广泛的应用,它提供了一种学习最优决策的框架,使得智能体能够通过与环境的交互不断优化自己的行为,逐步提高性能,常见应用场景如图4所示,一些具体的应用及其核心实现如图5所示:

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第4张图片

图4 强化学习常见应用场景 

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第5张图片

图5 强化学习具体应用及其核心实现样例

1.4 强化学习算法综述

强化学习算法按照不同的标准可以有几种划分规则如图表1,一些常见算法如图6所示:

图表1 强化学习算法划分规则

Ⅰ、按照环境是否已知划分:免模型学习(Model-Free) vs 有模型学习(Model-Based)

  1. Model-free就是不去学习和理解环境,环境给出什么信息就是什么信息,常见的方法有policy optimization和Q-learning。
  2. Model-Based是去学习和理解环境,学会用一个模型来模拟环境,通过模拟的环境来得到反馈。Model-Based相当于比Model-Free多了模拟环境这个环节,通过模拟环境预判接下来会发生的所有情况,然后选择最佳的情况。

Tips:一般情况下,环境都是不可知的,所以这里主要研究无模型问题。

Ⅱ、按照学习方式划分:在线策略(On-Policy) vs 离线策略(Off-Policy)

  1. On-Policy指agent必须本人在场, 并且一定是本人边玩边学习。典型的算法为Sarsa。
  2. Off-Policy是指agent可以选择自己玩, 也可以选择看着别人玩, 通过看别人玩来学习别人的行为准则, 离线学习同样是从过往的经验中学习, 但是这些过往的经历没必要是自己的经历, 任何人的经历都能被学习,也没有必要是边玩边学习,玩和学习的时间可以不同步。典型的方法是Q-learning,以及Deep-Q-Network。

Ⅲ、按照学习目标划分:基于策略(Policy-Based)和基于价值(Value-Based)。

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第6张图片

  1. Policy-Based的方法直接输出下一步动作的概率,根据概率来选取动作。但不一定概率最高就会选择该动作,还是会从整体进行考虑。适用于非连续和连续的动作。常见的方法有Policy gradients。
  2. Value-Based的方法输出的是动作的价值,选择价值最高的动作。适用于非连续的动作。常见的方法有Q-learning、Deep Q Network和Sarsa。

Tips:更为厉害的方法是二者的结合:Actor-Critic,Actor根据概率做出动作,Critic根据动作给出价值,从而加速学习过程,常见的有A2C,A3C,DDPG等。

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第7张图片

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第8张图片

图6 强化学习常见算法

2.PPO算法

参考论文:Proximal Policy Optimization Algorithms (arxiv.org)

由于本次实验平台(开悟)是基于PPO(Proximal Policy Optimization)算法训练智能体,故我们在本部分仅以PPO算法作为强化学习算法特例做解析,根据1.4综述(图表1规则)与图6划分,我们可以看到PPO算法为Model-Free下的基于策略的强化学习算法

2.1 PPO算法简介

PPO由OPENAI在2017年提出,核心原理在学习并优化策略以最大化累积奖励。其是基于TRPO(Trust Region Policy Optimization)算法的改进,通过一种称为“近端策略优化”(proximal policy optimization)的方式来更新策略。目标是在每次更新时保持策略的改变幅度在一个可接受的范围内,以确保稳定性和可靠性。

PPO算法的主要思想是通过两个关键的步骤来优化策略:采样数据和策略更新

  1. 采样数据:在PPO算法中,智能体与环境进行交互来收集数据。通过执行当前策略,并根据环境的反馈(奖励信号)收集一定数量的轨迹或经验。
  2. 策略更新:使用采样数据来更新策略。PPO算法的核心是定义一个目标函数,该函数衡量当前策略与新策略之间的差异,并通过最大化目标函数来更新策略。

PPO算法的优点包括简单易实现、相对较快的收敛速度以及对超参数不敏感。它已被广泛应用于各种强化学习任务,包括机器人控制、游戏玩耍和自动驾驶等领域。

Tips:需要注意的是,PPO算法有多个变体,如PPO1和PPO2,它们在具体策略更新步骤和近端剪切参数的定义上略有不同,但核心思想都是基于近端策略优化进行策略更新。

2.2 PPO算法详解

2.1中简单介绍了PPO算法的核心原理与流程,其详细演变过程如图7所示:

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第9张图片

图7 PPO算法演变过程

  • 传统策略梯度算法

首先根据图6与2.1我们知道PPO为概率梯度强化算法,传统的策略梯度算法与神经网络的优化思路相同,通过参数θ优化目标函数,梯度近似如式1,更新规则如式2:

\begin{aligned} \nabla_{\theta} J(\theta) & \approx \frac{1}{m} \sum_{i=1}^{m} \nabla_{\theta} \log P\left(\tau^{(i)} ; \theta\right) R\left(\tau^{(i)}\right) \\ = & \frac{1}{m} \sum_{i=1}^{m}\left(\sum_{t^{(i)}=0}^{T^{(i)}} \nabla_{\theta} \log \pi_{\theta}\left(a_{t^{(i)}} \mid s_{t^{(i)}}\right)\right) R\left(\tau^{(i)}\right) \\ & \approx \frac{1}{n} \sum_{i=1}^{n}\left(\nabla_{\theta} \log \log \pi_{\theta}\left(a_{t^{(i)}} \mid s_{t^{(i)}}\right) R\left(t^{(i)}\right)\right. \end{aligned} 

式1 传统梯度RL算法梯度近似 

\theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta) 

式2 传统梯度RL算法更新规则

分析:在传统策略梯度强化学习算法中,根据式1可以完全计算梯度(已知策略\pi_{\theta}),并使用式2更新对θ调整优化,直至迭代到最优策略。

补充:常见两种策略为Softmax策略高斯策略。实际问题中损失函数定义为式3:

L(a, s, r)=-\log \left(\pi_{\theta}(a \mid s)\right) r 

式3 传统梯度RL算法损失函数(实际问题) 

  • 自然策略梯度算法

在传统的策略梯度算法中,我们根据目标函数梯度和步长更新策略权重,这样的更新过程可能会出现两个常见的问题:

1、过冲(Overshooting):更新错过了奖励峰值并落入了次优策略区域

2、下冲(Undershooting):在梯度方向上采取过小的更新步长会导致收敛缓慢

为缓解/解决以上两个问题,自然策略梯度算法被提出,有两个核心优化如下,权重更新方案如式4所示,算法伪代码如图8所示:

1、考虑到策略对局部变化的敏感性,策略梯度由逆Fisher矩阵校正,而传统的梯度方法假定更新为欧几里得距离。

2、更新步长α具有适应梯度和局部敏感性的动态表达式,确保无论参数化如何,策略变化幅度为。在传统方法中,α通常设置为一些标准值,如0.1或0.01。

\Delta \theta=\sqrt{\frac{2 \epsilon}{\nabla J(\theta)^{\top} F(\theta)^{-1} \nabla J(\theta)}} \tilde{\nabla} J(\theta)

式4 自然策略梯度算法 - 权重更新方案

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第10张图片

图8 自然策略梯度算法流程伪代码

  • 信赖域策略优化算法(TRPO)

根据自然策略梯度算法的流程分析,实际上它存在以下三个主要缺陷:

1、近似值可能会违反KL约束,从而导致分析得出的步长过大,超出限制要求

2、矩阵F^{-1_{}}计算时间太长,是O(N^3)复杂度的运算

3、我们没有检查更新是否真的改进了策略。由于存在大量的近似过程,策略可能没有优

因此,信赖域策略优化算法(TRPO)被提出,相对自然策略梯度算法,TRPO主要有三个改进,每个改进都解决了原始算法中的一个问题。TRPO的核心是利用单调改进定理,验证更新是否真正改进了我们的策略

Ⅰ、共轭梯度法(conjugate gradient method)

我们知道自然策略梯度算法中计算Fisher矩阵是一个耗时且数值不稳定的过程。而引入共轭梯度法,这是一个近似F^{-1} \nabla \log _{\theta}(x)乘积的数值过程,这样我们就可以避免计算逆矩阵。共轭梯度通常在||步内收敛,从而可以处理大矩阵。

Ⅱ、线搜索(line search)

虽然自然梯度策略中提供了给定KL散度约束的最佳步长,但由于存在较多的近似值,实际上可能不满足该约束。

TRPO 通过执行线搜索来解决此问题,通过不断地迭代减小更新的大小,直到第一个不违反约束的更新。这个过程可以看作是不断缩小信任区域,即我们相信更新可以实际改进目标的区域,线搜索伪代码如图9所示:

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第11张图片

图9 线搜索伪代码

Ⅲ、改进检查

在TRPO中,我们并没有假设更新会提高替代优势\pounds {(\theta )} ,而是真正检查了它。尽管实际计算时需要根据旧策略计算优势,以及使用重要性抽样来调整概率,会花费一些时间,但验证更新是否真正改进了策略是有必要的

  • 近端策略优化算法(PPO)

    TRPO算法解决了许多与自然策略梯度相关的问题,并获得了在RL任务上的广泛采用。但是,TRPO仍然存在一些缺点,特别是:

1、无法处理大参数矩阵:尽管使用了共轭梯度法,TRPO仍然难以处理大的 Fisher矩阵,即使它们不需要求逆

2、二阶优化很慢:TRPO的实际实现是基于约束的,需要计算上述Fisher矩阵,这大大减慢了更新过程。此外,我们不能利用一阶随机梯度优化器,例如ADAM

3、算法复杂:TRPO很难解释、实现和调试。当训练没有产生预期的结果时,确定如何提高性能可能会很麻烦

故PPO被提出,常见(变体)为PPO PenaltyPPO Clip(均在上述参考论文中提出)。

Ⅰ、PPO Penalty

TRPO在理论分析上推导出与KL散度相乘的惩罚项,但在实践中,这种惩罚往往过于严格,只产生非常小的更新。PPO通过设置目标散度\delta的方式解决了这个问题,希望我们的

每次更新都位于目标散度附近的某个地方。目标散度应该大到足以显著改变策略,但又应该小到足以使更新稳定。

每次更新后,PPO都会检查更新的大小。如果最终更新的散度超过目标散度的 1.5倍,则下一次迭代我们将加倍β来更加重惩罚。相反,如果更新太小,我们将β减半,从而有效地扩大信任区域,算法伪代码如图10所示:

Tips:加倍与减半是基于启发式确定的,而非数学证明的结果。

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第12张图片

图10 PPO Penalty伪代码

分析:与自然策略梯度和TRPO算法相比,PPO更容易实现。同时,我们可以使用流行的随机梯度下降算法(如ADAM等)执行更新,并在更新太大或太小时调整惩罚。

Ⅱ、PPO Clip

Clipped PPO是目前最流行的PPO的变体,也是我们说PPO时默认的变体。PPO Clip相比于PPO Penalty效果更好,也更容易实现。与PPO Penalty不同,与其费心随着时间的推移改变惩罚,PPO Clip直接限制策略可以改变的范围。我们重新定义了替代优势如式5:

\begin{array}{c} \mathrm{L}_{\pi_{\theta}}^{C L I P}\left(\pi_{\theta_{k}}\right) \\ \mathrm{E}_{\tau \sim \pi_{\theta}}\left[\sum_{t=0}^{T}\left[\min \left(\rho_{t}\left(\pi_{\theta}, \pi_{\theta_{k}}\right) A_{t}^{\pi_{\theta_{k}}}, \operatorname{clip}\left(\rho_{t}\left(\pi_{\theta}, \pi_{\theta_{k}}\right), 1-\epsilon, 1+\epsilon\right)\right]\right]\right. \\ \rho_{t}(\theta)=\frac{\pi_{\theta}\left(a_{t} \mid s_{t}\right)}{\pi_{\theta_{k}}\left(a_{t} \mid s_{t}\right)} \end{array} 

式5 PPO Clip替代优势

其中,clip为截断函数,当重要性采样超出规定的上或下限后,函数会返回对应的上或下限,如图11所示:

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第13张图片

图11 clip替代优势示意图 

二、腾讯MOBA强化学习框架解构

第一章主要针对强化学习的原理、架构、应用、算法进行了综述,并以开悟的基础算法PPO为例详解了强化学习算法。而在开悟平台实践与报告前,在本章我们将会针对平台底层的强化学习框架(腾讯AI Lab MOBA框架)进行论文的对照与解析。

参考论文:Mastering Complex Control in MOBA Games with Deep RL 

1.论文简介

这个问题在MOBA游戏的1v1对战中,涉及的状态和动作空间比传统的1v1游戏(如围棋和Atari游戏系列)要复杂得多,这使得搜索具有人类水平表现的策略非常困难。为此腾讯提出了一个深度强化学习框架,从系统和算法的角度来解决这个问题。论文提出的算法包括几种新颖的策略,包括控制依赖解耦、动作屏蔽、目标注意力和dual-clip PPO。在提出的Actor-Critic网络的训练下,在《王者荣耀》中,训练后的AI智能体能够在完整的1v1对战中击败顶级职业人类玩家。

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第14张图片

图12 Go 1v1与MOBA 1v1复杂度对比

2.框架详解

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第15张图片

图13 腾讯MOBA强化学习系统/框架总览

如图13所示,腾讯提出的MOBA 1v1强化学习系统设计包括四个主要模块:强化学习学习器、人工智能服务器、调度模块和内存池。这个设计旨在解决MOBA 1v1等复杂代理控制问题引入的随机梯度的高方差,需要较大的批量大小以加快训练速度。

  1. AI服务器:负责游戏环境和AI模型之间的交互逻辑,通过自我对弈生成回合,并使用镜像策略进行采样对手策略。基于从游戏状态提取的特征,使用Boltzmann探索预测英雄动作,即基于Softmax分布进行采样。采样的动作然后被发送到游戏核心进行执行。执行后,游戏核心连续返回相应的奖励值和下一个状态。
  2. 调度模块:调度模块是一个服务器,与同一台机器上的多个AI服务器绑定。它从AI服务器收集数据样本,包括奖励、特征、动作概率等。这些样本首先被压缩和打包,然后发送到内存池
  3. 内存池:内存池也是一个服务器。其内部实现为内存高效的循环队列用于数据存储。它支持长度不同的样本,并基于生成的时间进行数据采样。
  4. RL学习器:RL学习器是一个分布式训练环境。为了加速使用大批量大小的策略更新,多个RL学习器从相同数量的内存池中并行获取数据。RL学习器中的梯度通过环形全局归约算法进行平均。为了减少IO成本,从RL学习器训练的模型以对等方式快速同步到AI服务器。

深度学习实战——强化学习与王者荣耀(腾讯开悟)_第16张图片

图14 框架核心算法架构

系统/框架算法设计如图14,首先,网络使用卷积、全连接和全连接(FC)将图像特征fi、向量特征fu和游戏状态信息fg(可观察到的游戏状态)编码为编码hi、hu和hg。其中注意力分布计算如式6:

p(t \mid a)=\operatorname{Softmax}\left(F C\left(\mathrm{~h}_{\mathrm{LSTM}}\right) \cdot h_{k e y s}^{T}\right) 

式6 注意力分布计算

    论文中没有使用我们上文提到的经典PPO,而是设计了改进后的Dual-clip PPO。在经典的PPO算法(式5)的基础上,它进一步剪辑了比值rt(θ),以使其有一个下界c,支持大规模的分布式训练,如式7所示:

\widehat{\mathbb{E}}_{t}\left[\max \left(\min \left(r_{t}(\theta) \hat{A}_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_{t}\right), \hat{c A}_{t}\right)\right] 

式7 Dual-clip PPO核心原理

    至此,开悟平台底层的深度强化学习框架核心部分均已解析完成。

三、参考资料

1.强化学习(一):简介——什么是强化学习?_Woody2357的博客-CSDN博客

2.强化学习入门:基本思想和经典算法 - 张浩在路上 (imzhanghao.com)

3.Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始 - 知乎 (zhihu.com)

4.lecture_13_advanced_pg.pdf (berkeley.edu)

你可能感兴趣的:(机器学习理论,深度学习,python,人工智能,神经网络,算法)