深度强化学习落地指南总结(一)-需求分析

2021-09-15 15:24:45 浏览数 (1)

  • 本系列是对《深度强化学习落地指南》全书的总结,这本书是我市面上看过对深度强化学习落地讲的最好的一本书,大大拓宽了自己对RL落地思考的维度,形成了强化学习落地分析的一套完整框架,本文内容基本摘自这本书,有兴趣的读者可以自行购买。这次推送的文章比前天推送的加入了自己对RL落地的理解,欢迎留言讨论。

作者对这本书的推荐序:https://zhuanlan.zhihu.com/p/403191691

第一章 需求分析

1.1 需求分析:勿做DRL铁锤人

须知任何机器学习方法都有各自的优势和适用范围,DRL算法也同样有其鲜明的优势和局限性,因此务必要做到具体问题具体分析。不是所有需求都适合用DRL解决,适合用DRL解决的需求在性能上也未必超越传统方法。因此在面对一个新需求的适合,要依次回答“是不是”、“值不值”、“能不能”、“边界在哪里”四个问题。

  • 这点非常重要,就我正在做的落地项目而言,甲方由于现在外界对DRL的猛吹,所以只想使用DRL算法一把梭,但实际上工业界的一些经典控制算法(如PID等)在项目上本身就能有不错的表现,只需要针对特定场景和DRL做一些结合就能得到预期指标,所以在接到需求之后一定要严格评估再做决定。

1.2 一问“是不是”

1.2.1 Agent和环境定义

首先我们要明确需求任务中的Agent和环境。对于大多数任务而言,通常只存在一个决策和行为的主体,此时就是典型的单智能体强化学习问题。然而当任务中同时存在多个行为主体时,情况会变得复杂,即使这些行为主体之间完全同质和相互合作的关系,也至少存在两种Agent定义方案。第一种方案是将所有行为主体看作一个整体,从而构成单智能体强化学习问题;第二种方案是将每个行为主体都作为独立的Agent,从而构成多智能体强化学习(Multi-Agent Reinforcement Learning, MARL)问题。

第一种方案可以保证得到全局最优的联合策略,但状态空间维度和策略复杂度会随着行为主体数量的增加而迅速膨胀,导致算法难以扩展到大规模问题上;第二种方案通过每个Agent独立感知和决策避免了维度诅咒,但随之产生了多Agent间贡献度分配(见4.3.1)和联合探索难题,以及多策略协同优化所导致的环境不稳定性(Environment Nonstationarity),从而影响算法性能。

  • 这个问题我也遇到了,说实话做方案选择时候还是挺纠结的,在我的落地场景中如果单纯从单智能体的角度考虑,无论是状态的维度,动作的维度都会变得非常大,再加上真实落地过程中可怜的数据采样效率,显然是没办法收敛的;选择多智能体的方案正如作者所说,也会会一些别的问题(当然没选择的更大原因是自身对这方面并没有过多的涉猎)。最后我采取的方案还是单智能体,但是使用一些机器学习筛选和相关领域专家知识的方法对状态维度和动作维度分别都进行了大幅度的减少,确保最后算法能够收敛。

1.2.2 马尔科夫决策过程和强化学习

  • 首先我们需要判断这个需求任务是不是一个强化学习问题,这个需要从强化学习的数学定义出发(Agent ->
s_t

->

pi(a_t|s_t)

->

a_t

->

s_{t 1}

->

r(s_t,a_t)

,这里简单用几个符号表示,就不具体展开了 )。以上过程被称为马尔科夫决策过程(Markov Decision Process,MDP)。若每步只能观测到部分状态信息,则称为部分可观测马尔科夫决策过程(Partially Observable Markov Decision Process,POMDP)。

强化学习的涵盖范围不止于此,当环境不存在特定状态转移概率分布

p(s_{t 1}|s_t,a_t)

,或者说状态转移完全随机时,MDP问题就退化为上下文多臂老虎机(Contextual Multi-Armed bandits, CMAB)了;如果环境不存在状态的概念,或者说只有一个状态且没有状态转移,问题就退化为多臂老虎机。

1.3 二问“值不值”

在判断一个任务是否适合用DRL作为解决方案时,首先需要考虑两种可能性:能否使用规则或启发式搜索,以及是否应该使用传统强化学习算法,这两个问题的答案取决于任务解空间的大小和复杂度。任务解空间通常表示为

S × A

,即状态和动作的复合空间。

1.3.1 试试规则和启发式搜索

在解决实际问题时,应该追求条件允许范围内的最优定制化方案,即我们要想办法降低解空间的维度。这些方案可能抓住了底层的物理和数学本质,可能充分挖掘了任务逻辑和先验知识,可能充分发挥了计算机的算力,甚至可能主动设置高度可控的应用场景规避了很多棘手的问题。

  • 在面对需求的时候,我们应当先放下RL这种“玄学”的想法,把"work"当做第一要义。一个非常重要的经验就是先花大量的功夫在数据处理和可视化上面,如果数据可视化做得好的话往往可以发掘一些潜在规律,从简单来说可以用if-else能解决,稍微难点可能用一些数学模型来表示;这个部分还有一些小彩蛋:就算只是发现了一些小规律,在奖励函数设计的时候如果可以加进去,往往会有意想不到的惊喜。

1.3.2 别忘了传统强化学习

在有一类任务中,一方面面由于维度较高导致很难通过观察发现有效规则,且启发式搜索所需的算力和存储能力显著增加,难以利用有限资源获得满意性能;另一方面,状态-动作组合的期望累计回报分布无显著规律并呈现多模态特征,即在相同状态下不同动作的期望累计回报较为接近。强化学习在这类任务中是可能具有优势的,并且在解空间可穷举、规模适中的前提下,诸如Q-learning和Sarsa等传统强化学习方法的性能未必逊于DRL算法。

  • 在维度没那么高的时候,亲测使用传统RL的方法在很多时候都能work,有时候迫于甲方宣传的压力(众所周知,产品 AI绑定的宣传方式能提升销量)会加上神经网络,但效果不但没有变好,收敛的时间往往也会变长。

1.3.2 使用DRL的理由

  • 作者将一定要使用DRL的理由总结为以下三点:

  1. 难以从庞大的解空间中分析出有效规则和启发式搜索方案,或者解空间中可能存在比已有规则和启发式搜索更好的方案。
  2. 解空间维度过高或不可穷举,基于表格值估计的传统强化学习算法(如Q-learning)在存储空间和计算效率上遇到瓶颈。
  3. 类似于二维图像和长跨度时序信息等高维状态信息中包含大量冗余成分,有赖于深度神经网络的强大特征提取能力,从中提取有用的高层抽象语义特征,并建立起长期决策相关性。

1.4 三问“能不能”

在明确了使用DRL算法的必要性后,还需要仔细评估其可行性,即回答“能不能”的问题。在具体层面,这取决于目标任务是否满足场景固定和数据廉价这两个关键要求。前者关系到训练后的策略能否顺利迁移至部署环境并维持高性能,而后者则决定了是否有足够多的数据使DRL算法成功收敛。

1.4.1 场景固定:两个分布一致

如果说有监督学习的训练过程是针对某个目标函数,关于输入数据的单分布定制优化,DRL则是关于输入状态和状态转移概率的双分布定制优化。算法从前者习得定制化的特征提取能力,并根据后者学会基于上述特征的定制化决策或估值能力。

1.4.1.1 状态分布一致

状态分布是由初始状态分布、策略和状态转移概率共同决定,其中最根本的影响因素还是来自环境的固有属性。关于状态分布的一致性,可以参考下图(a)的围棋游戏,若训练时直接采用左半边木质棋盘的原始图像作为输入,那么DRL算法中神经网络的特征提取功能将会在这种特殊状态分布下高度定制化。若后续把游戏切换为右上角的极简风格或右下角的“化石”风格,无论是棋盘底纹和棋子样式均发生了显著变化,则相当于状态信息进入了另外一种截然不同的分布,原来的网络将无法提取出有效的高层特征。

为了使同一套DRL算法适用于各种棋盘风格,一种有效手段是对原始信息进行抽象化预处理。如图(b)所示,整张棋盘被初始化为19×19大小的矩阵,空白位置、白子和黑子被分别表示为0,1和2。无论棋盘和棋子实际长什么样子,状态分布都始终保持一致。

1.4.1.2 状态转移概率分布一致

所谓状态转移概率一致,就是要求Agent在任意状态

s

下采取动作

a

后,进入下一个状态

s'

的概率分布

p(s'|s,a)

保持不变。状态转移概率分布一致要求的最大挑战通常来自使用模拟器(Simulator)训练时带来的Reality Gap。另外如果想要训练好的模型能顺利迁移至别的场景,需要在训练过程中制定更泛化的场景,使状态转移概率分布扩展至更大的范围。

1.4.2 数据廉价:多、快、好、省

由于强化学习缺乏高效的监督信号,再加上深度神经网络众所周知的特点,DRL算法天然需要大量数据进行训练,这也是DRL一直被学术界诟病的重要缺陷——低成本效率(Low Sample Efficiency)

  • 因此拥有多快好省的数据非常重要,多指的是数据量多,快指的是数据采集速度快,好指的是数据质量高,质量高指的是训练环境和部署环境差异较小,省指的是数据采集成本小。为了省通常会使用模拟器来生成数据,但是会存在Reality Gap,所以往往需要一个好的模拟器来采集数据。
  • 当然并非所有模拟器都存在Reality Gap,其中最典型的代表是视频游戏和棋盘类游戏。这类任务也就是Game as Simulation。当然并非所有任务都能做到Game as Simulation,但只要尽量缩小模拟器的Reality Gap,就仍然能用DRL算法训练出具备实用价值的策略。

1.5 四问“边界在哪里”

在实际应用中,对于DRL算法在一个具体任务中的“职责范围”需要清晰界定。即使经过仔细评估后认为DRL可以带来较为显著的整体性能提升,也不代表任务内部每个子功能模块都应该交给DRL处理,任务中每个子功能模块也都可能有各自最适用的解决方案。

  • 这里主要是体现各方法、各模块协同合作的思想。对于一个落地应用来说,往往能按照功能分为多个模块(包括一个主模块和多个次模块),在实践过程中可以把核心模块中定义为强化学习问题的交给DRL解决,其他模块可以根据自身特点再分别选择各自合适的算法,从而组成一整个决策系统。如下图麻将AI Suphx所示:

当然上述DRL和其他方法分别负责不同子功能模块的方案并不是协同式混合方案的唯一形式,在实践中还有其他融合方式:(1)可以在基于规则或传统控制算法的原有策略基础上训练增量式DRL策略,此时DRL算法学习的是如何修正原有策略的不足;还可以将其他方法作为DRL动作空间的一部分,此时DRL算法学习的是如何在恰当时机切换到这些方法使其发挥最大作用(见2.3.2节)。

  • 和传统方法融合这个做法在我的RL落地实践中起到了很大的作用,因为传统方法往往是有理论支撑,可能优化的效果不够好但总体来说是一个相对稳妥的选择,我举个可能不恰当的例子:比如从A地去到B地,有三条大路,现在的任务需求是让你选择一条最短路径,RL可能可以在某一条大路里面选择最短的一个路线,但可能会走偏,走到别的大路去;而传统方法就像是一个矫正器,虽然在每条大路里面不一定能选择最短的走法,但总能保证走在正确的大路上。所以这时候可以在每次RL决策几步后,用传统方法做一个矫正,这样才在保证下限的情况下做到一定的优化。

0 人点赞