面向真实场景的数据驱动决策优化
导读: 今天分享题目为面向真实场景的数据驱动决策优化。
主要有三部分:
-
数据驱动决策优化在实际落地中的挑战
-
离线强化学习
-
离线强化学习与在线强化学习的融合
分享嘉宾|詹仙园博士 清华大学 助理教授
编辑整理|洪佳胤
出品社区|DataFun
01/数据驱动决策优化在实际落地中的挑战
首先和大家分享下数据驱动决策优化在实际落地中的挑战。
1. AI 落地的理想与现实
这部分我们介绍数据决策优化的方法,以及在一些场景上落地的现状。
目前在 AI 这个领域,尤其是 Gaming AI 这个领域,已经有一些非常成熟而且非常好的成果出现。在其他的领域,比如机器人、自动驾驶等一些工业领域,AI 其实也慢慢在落地。
2. 序贯决策方法在实际应用中的挑战
但其实在把强化学习这些方法落地的时候,我们也遇到越来越多的问题。比如经典的决策优化任务的设定,就是根据当前系统观测到的状态,去做某个动作;然后根据反馈的奖励再去做长期的优化。
但在真实世界里,如果我们去应用的话,首先 在训练阶段,很难跟系统做交互,因为没有训练好的策略可能会给出不好的动作,有可能对真实的工业系统或者自动驾驶的驾驶行为造成灾难性的影响;二是 奖励函数也很难设计,又无法与系统做交互,因此也无法评价策略的好坏;另外,在真实场景中也有大量的安全约束,不仅需要做优化,也需要最小化这个风险。
但另外一方面,很多真实系统里是有一些数据的,当然这个数据有好有坏,有的数据可能非常单一,可能对决策空间的覆盖非常不完备。但很多情况下,我们还是有一些可用数据的。所以我们现在可能想问,是不是可以有一些数据驱动的方法来比较好地解决这些问题?但是这个领域现在还处在快速发展的探索阶段,我们可以看到越来越多新的方法出现,但现在并没有一个 one solution for all 的算法。
3. 数据驱动序贯决策的概述
这里我们先讲一下,我们在数据驱动序贯决策优化问题上的全景图。如果我们把从系统里面收集到的数据和系统允许的交互程度画两根轴,其实就会得到这样一张图。
当我们没有数据,但是允许无限制地跟系统交互的时候,其实也就对应着大量的 Online 场景。在这个领域里面,其实我们在 Gaming AI 上已经有些非常好的落地应用,已经有一些非常成熟的方法。
那当我们跟系统允许的交互量越来越小,但是可能拥有一些数据的时候,这个情况就不太一样了。我们就需要更多地依赖于数据去做决策,而不是基于跟系统的交互。这部分其实也是现在研究的一个热点,有很多 hard problem,包括怎么去训练,怎么让它稳定下来,怎么样去做评估等一系列的问题。
这个轴最右边对应着无限量的数据供给,但是完全没有系统交互。如果数据足够好的话,现在已经有一些方法可以比较好地解决这个问题。这也对应了纯粹的离线场景。但其实在现实世界中遇到的问题,大部分对应在这个范畴:仅有很少或基本没有系统交互的机会、也仅有少部分数据,这时候对应了很多现实问题,但是他也带来很大的挑战。如果解决好这类问题的话,我们就可以把数据驱动决策优化的落地往前推很大一步。
--
02/离线强化学习的发展
1. 强化学习概述
大概 2018 年、2019 年开始,在强化学习的交流中就出现了一些比较悲观的声音。比如,深度强化学习没有作用;或者说这里面存在各种各样问题,就是浪费时间;甚至有人就开玩笑说 70% 的场景无效。
2. DRL 在实际应用中的挑战
我们分析一下,瓶颈很大程度上出现在这个地方:
一般强化学习中普遍假设有一个完美的系统可以无限制交互,或者我们有一个完美的仿真环境。但现实是这样一个完美的仿真环境可能建不出来或者代价太大。比如,很多复杂的系统里会存在一些过于复杂的地方,我们都没有理解清楚:一方面,这些系统里可能有一些不可观测量,我们没法准确地复现或者观测;但如果用一个不完美的仿真去直接强化的话,你会发现它存在严重的仿真到现实的偏差,导致我们在仿真环境里训练得很好的策略无法迁移到真实场景里。这就带来一系列的挑战。
3. 离线强化学习
离线强化学习其实就是把仿真的交互环节给去掉,直接通过数据去做强化,但这里面也有一些问题:首先是它跟现有的试错学习(Trial-and-error)的强化学习范式非常不一样,基本上在离线强化的场景里,我们可能有一些数据,这些数据是由一些未知的策略(一般是行为策略)产生的。这里面可能有一个(或多个)数据分布非常狭窄的行为策略产生,或者是覆盖非常稀疏的数据。我们需要从这些数据里训练出一个策略,再部署回去。表面上看,它可能跟 Off-Policy 强化学习方式比较像,因为它有一个 Buffer。但实际我们后来发现,就是用这种 Off-Policy RL 的算法去解 Offline RL 的问题,是不太可行的。这个在后面会详细介绍。
首先,我们介绍 formal definition。其实,**离线强化的 definition 和在线强化的基本上一样,唯一的区别就是环境交互换成了静态的数据集 D,它可能有一些预先设计好的轨迹。**我们可能有一些生成这个数据的行为策略,一般设为 πβ。另外,还有动作价值函数、状态价值函数和边际状态分布。这些部分与一般 RL 中的定义一致。
4. 自举误差积累和分布偏移
但是问题主要出现在以下几个部分:首先,在 RL 中我们很核心的就是 Bellman update。在离线的情况下,做 Bellman 更新的时候,如果给定一个数据集,在该数据集里,当前的状态、动作、奖励以及下一个状态,在数据集里是既有的;但是下一时刻的动作,一般是从 policy 里采样的。假如一个价值函数和这个数据拟合非常好,就无大碍;但假如这个价值函数稍微偏了一点,我们就会错误地认为在这个未知区域的这个动作可能会带来一个更好的价值估值。在依据这个结果做更新的时候,它就会认为这个地方更好,就会不停的往错误的价值函数区域去做更新,导致这个价值在未知 OOD action 的地方出现严重的错误。
所以如果把一些 Online Off-PolicyRL 算法在离线场景里跑,就会发现跑出来的 policy 效果非常差,但是它估计出来的 Q 值非常高,也就是过分乐观地去做一些价值的估计,背后的本质原因就是在后面做了一些反事实推理,在我们不知道的地方,运用错误的推理得到的信息进一步做优化,所以就会把这个事情越搞越糟。
5. 如何实现离线强化学习?
所以,Offline RL 是怎么工作的呢?第一个非常直接的方法,就是通过在策略上加约束的方式去实现,比如 policy constraints 的方法。这类方法其实想法很简单,既然这个价值估值,在这个数据集以外的 Out-Of-Distribution (OOD) data 区域里面会出问题,那么就让它不要去这个地方。这里的约束方法有很多种,比如说可以用显式或隐式的方法去约束策略和数据的分布差异,也可以去限制它的在数据支撑集的差异。
另外一个思路其实就是对价值或者奖励去做正则化,比如图中蓝色的点就是数据中的样本点,绿色就是已知可靠的区域,我们尽量保证这个绿色区域里的一些奖励或者价值不要变,但是在对这个未知的地方去做奖励或价值上的正则化或者惩罚。这样的话,我们在做 policy maximization 的时候,就会避免去这个地方。现在比较多的 model-based 的方法以及 model-free 的方法都在用这一套思路。或者是在这个 reward 上加一个基于 uncertainty 的惩罚项,这个 uncertainty measure 或者是从多个 model 里面估计出来的,或者是多个 Q 网络的 ensemble 里面估计出来的,或者就干脆把这个价值函数的训练目标改成让它可以最小化未知区域的 q 值、最大化数据集里的 q 值,从而实现价值函数正则化。
最近还有一些比较新也是比较有效的方法,就是我们做严格的样本内学习(in-sample learning),就比如目前引起较大关注的IQL (implicit Q-learning) 方法,我们尽量的是把价值函数完全用数据集里的数据去做学习,但是我就学习比数据里面的价值函数更好的价值函数,然后再去做 policy maximization。
6. 现有方法中的过度保守现象
但所有的这个方法有一个共有的准则,都是非常保守、非常悲观的;这样的方法在实际运用中,就会出现各种各样的问题。比如迷宫实验里,蓝色的线就是轨迹覆盖的区域,我们只要把这个数据集扣掉两个很小的区域,就会发现现在主流的一些 Offline 方法的性能基本全都掉到底,基本上都学不起来。这里其实就说明现在所有的方法其实都过于保守了,对数据集的要求非常高。如果数据覆盖得不够好,或者数据覆盖得非常狭窄,这个时候如果过度得做 OOD 约束,就会影响性能。
包括现在很多 Offline RL 里面的一些 performance guarantee(性能保证),背后根本性的假设就是有数据全覆盖的前提。即策略衍生出的分布是可以被数据集里的分布包含的。这样的话,优化就只在这里面做,好处是可以有各种各样的理论工具供使用,坏处就是非常不现实。**因为大部分真实场景采集出来的数据并不能保证是 full coverage,而且因为我们是在做优化问题,即最优的模式未必就在现有的数据里面,它可能在数据的边缘或者在数据以外的区域,**所以如果做得太保守,严格地限制 OOD 和 exploitation,有些任务就很难解决。
7. 价值函数在 OOD 约束中的表现如何?
所以如何解决这个问题呢?首先,我们会看一下价值函数,尤其是 Deep Q-Functions 在 OOD 的这些区域到底表现如何?这里可以考虑一个非常简单的一维随机游走任务,就是有一个 Agent 可以在 [-10,10] 这个轴上左右走,到最右边奖励最大,白色点代表离线数据。如果用一个比较经典的方法,比如 TD3,在上面去学习一个价值函数,基于这些数据来估计价值函数的估计误差,就会发现其实在数据凸包内的点,基本上价值估值的偏差不会太远;但当我们去做数据凸包外的外推,它的估计误差可能很大,就算离它很近也是。一般来说,我们称凸包内的点为内插点,凸包外的点为外推点。
在这种情况下,我们发现 Q-Function 在用深度神经网络去学习的时候,可以较好地做内差的估计,但是做外推估计的能力很差。
8. 理论解释
这个性质在很多深度神经网络学习的研究里,尤其是在监督式学习的研究里也被发现了。我们同样也可以证明,这个现象也适用于离线强化学习的范畴。当内差点的价值函数估计的偏差,是可以被这个点到这个数据集里最近的点的价值函数所控制;而且对所有的内差点,都有明确的上界。但是对于外推点而言,就没有明确的上界;即外推点离数据集越远,价值函数的误差可能越大。所以,这也说明,在做 Offline RL 的时候,也要考虑数据集在空间里的 geometry,否则就难以充分利用深度 Q 神经网络的泛化能力。
9. 如何测量某个点到数据集的距离?
那么,如何把这个想法变成一个算法呢?可以用State-conditioned distance function来解决。简单来说,这是用于计算任意一点到整个数据集的平均距离。可以用上图中的监督式学习目标来具体学习,即给定数据集中的每一个点,用数据集里随机采样的动作来计算到当前数据集中动作的距离,再用距离函数进行拟合。
10. 距离函数的作用是什么?
这样学习出来的 State-conditioned distance function 有一些性质。首先,在这个函数里包络形成的内插点距离都很小,但是外推点距离都很大。而且,对 State-conditioned distance function 的最优解函数对动作求梯度,对所有外推点的梯度方向都指向凸包内部。
基于此,可以作为 policy constraint 来指导 policy 学习尽量往数据集的凸包内部走。所以这里我们可以构建一个非常简单的 Offline RL 的算法。可以基于任意的 off-policy Online RL 的框架,在里面加一个基于 State-conditioned distance function 的 policy constraint。公式里的 G 是一个 threshold,可以进行非参数化的调整,比如可以把数据集里所有的距离都跑一遍,再把距离求均值代进去。
11. DOGE 的理论解释
我们也可以从理论上证明,相比于已有的、基于数据支撑集策略约束的方法有更紧致的性能上限。
这个方法我们在 D4RL 数据集上也做了一系列实验。虽然简单,但效果基本上要比一些主流的 Offline RL 都好。
12. DOGE 的泛化能力
最有意思的一点是它确实可以泛化。比如说前面的扣掉两个区域的迷宫任务,其他方法都跑不起来,但这个方法可以。因为这些点虽然是 OOD 的,但是可以被看作是内插点。所以在这里我们允许它去利用一些深度神经网络的泛化能力来学习,就可以把这个 gap 跳过去,从而找到终点的自由策略和路径。
13. DOGE 带来的灵感
这个工作其实给我们一个想法,做 Offline RL 其实没必要去紧紧盯着那个 OOD 约束。约束得太死,反而对最终的性能影响不太好,对解决一些实际的问题可能也有负面影响。深度神经网络其实有一些非常好的泛化能力,包括我们的数据在空间里的几何特征也有影响。如果把这些都利用好,我们可以建立更强的离线学习。
14. 基于强化学习的方法 VS 基于模仿学习的方法
另外,现在如果去看 Offline RL 的一些前沿研究,就会发现它跟 Offline Imitation Learning(离线模仿学习,Offline IL)走得越来越近了。比如现在有一系列基于监督式学习 Goal-conditions supervised learning 的方法去做 Offline RL 的任务,有一些 IL-Based 的方法也在做这样的任务。
但是目前来看,这两种方法各有优劣。比如 RL-Based 的方法,内部其实在做 Dynamic programming(动态规划),所以它其实有可能做 OOD 的泛化。但是它有一个明显的缺点,它会有非常严重的 Distribution shift(分布漂移)的情况,导致训练不稳定。但模仿学习方法的好处是基本上不会有分布漂移的影响,但是因为是模仿,它其实会过于保守,很难超越这个数据集。
很自然地,我们想提一个问题:就是如何在避免分布漂移的同时又能有一些比较好的 OOD 泛化的性质。所以其实我们可以看一下,就是 Offline RL 里相对比较重要的一个点,就是为什么 Offline RL 在理论上有时候可以超越原始的数据集呢?是因为它可以做数据中的缝补(stitching)。比如,我们的任务是从 A 最快到 C,数据里可能有从 A 到 B 和从 B 到 C 两种轨迹。这个时候我们把它们各自取一半拼在一块儿,就可以找到一个在数据集里不存在、但又更优的策略。
其实大部分现有的 Offline RL 方法里,都是在做 Action-stitching。用这个例子来讲一下,就是这个 GridWorld。它的目标是想从最左下的格子最快走到最右上的格子。在每个地方,A 的下一步都可以往周围八个格子里走。绿线就是这些数据里的 transition。Action-stitching 就是每次决定往哪走的时候,采取数据里的 Action;但是走的时候尽量去选那些可以让我转移到下一个状态(即价值比较高)的那个格子,这就叫 Action-stitching。这样一来,这个任务可以解决,但其实并不是最优解。原因是它本质上在做有偏好的模仿,相对保守。但我们更想做状态上的拼接。就比如在任何一个格子里,我们知道它可以去周围八个格子,那么我们从周边格子中选择一个数据集里出现过的价值最高的格子作为下一时刻的状态,这样就能找到一个更优的模式。这在一定程度允许我们去做 OOD 在行为上的应用。但显然也是有风险的,它需要一些引导,也就是这个任务里,我们知道它是可以去周围八个格子的。
15. 策略指导的离线强化学习
所以如何基于此来构造一个算法呢?目前一般 offline RL 方法基本有两个步骤。第一个 就是 policy evaluation(策略评估),即学习价值函数,一般是最小化 Bellman error,再加上一个 OOD 数据上的约束项;第二步 就是最大化价值函数学 policy π,但也可能会考虑 policy constraints 的约束,保证其在离线情况下能正常工作。这样有好有坏。好处 是我在做 DP,因为有动态规划后,才可能有一些超越数据的性质。但坏处是这里的价值函数和策略是耦合学习的,比如策略没学好,会带坏价值函数;价值函数没学好也会反过来带坏策略函数。这也是 Offline RL 里不稳定的源头。
另外,我们还要去设计各种各样的 OOD 的正则项。这其实非常棘手,设计得不好可能约束不住,设计得太狠可能过于保守,会导致性能下降。所以就有一个问题:我们如何能在保留 DP 的同时也能实现 Q 和 π 的解耦式学习。我们可以换个思路来考虑,可以不学这个 Q,可以学这个状态的价值函数 V。因为在学 V 的时候,我们会发现 V 需要的 state 和 state' 都在数据里,而且基本上也不涉及 OOD Action 的问题。但唯一的问题就是怎么在数据里学习到比数据里的 V 更好的 V。这是第一个问题。第二个是如果学 V 的话,怎么做 DP 呢?我们可以学一个不一样的引导策略g(s'|s)。我们要引导策略只干一件事,就是基用当前的状态 s 来推演出更优的下一个状态 s'。再由它和 V 配合起来做 DP。另外,我们最终还是要一个策略去输出更优的 action。这个时候就可以学习一个与任务无关的执行策略π(a|s,s'),即给定当前的状态和下一个状态,来输出一个 action。类似于 Inverse dynamic model(反动力模型)。
有了这些以后,我们就可以构造一个比较简单的算法,可以完全实现样本内学习。它的主要做法如下:第一,用一个非对称的 expectile regression 去学习比数据里更好的状态价值函数 V,再基于离线数据最大化价值函数去学习引导策略 g。但是因为它是需要一些约束的,所以我们会加一个状态上的 BC(行为克隆)约束。最后执行策略的学习可以采用完全监督式学习的方法,就是从数据里的状态行为和下一个状态用最大似然估计法输出一个执行策略 π,使用的时候就把执行策略学出来的下一时刻的 s' 换成引导策略,就可以去做 Online inference(在线推断)。
这样的方法可以实现完全的 In-sample learning(样本内学习),至少在训练阶段不会因为分布飘移受到非常大的影响,而且可以训练得非常稳,效果上也非常不错。另外,比较有意思的一点是因为执行策略与任务无关,只和当前的状态和下一个时刻的状态有关。这意味我们可以让它去做任务适配,即**不同的任务只需要把引导策略重新学习一下,就可以用同一个执行策略,即可以有效地迁移到不同的任务上。**比如右边 four-rooms 的实验,如果我们什么都不加,agent 从左右两边都可以走;但是这个任务加了一条小河,重新调优引导策略,它就会绕着河走;或者在另一个任务里面,比如要捡个钥匙才能进房间,策略也会很快适配上去。
16. 离线强化学习的实际应用
现在已经有 Offline RL 陆续落地的尝试出现了。这是大概两年前我们做的一个工作。我们把离线强化学习用在了一个非常复杂火力发电机组的控制优化上。虽然现在还是一个开环的控制,但基本上已经落地了六、七个电厂。它其实是一个纯粹的离线强化学习框架。我们从真实的火电机组里面采集长期历史运行数据,从数据里学习离线强化学习策略,经过一些离线策略评估后选出来最好的策略,再做部署和测试。
这个问题相对比较复杂,70%~80% 的工作都集中在建模和约束设计上。这个问题的规模比较大,需要优化的原始控制量有 100 多个,可能涉及到成千上万的处理器、大量的领域知识和安全约束。
17. MORE:基于限制性探索的离线强化学习方法
在这个应用的早期模型版本里,我们采用了 Model-based Offline RL 的框架,去解决一个带约束的 Markov Decision Process 问题,在优化时最大化 Reward critics、最小化 cost Q-Function 来实现这个过程的学习。
我们早期版本里面是用了 Model-based 的框架,后期改进版本换成 Model-free 的模型框架。因为不同电厂的数据质量差异确实太大,一个模型很难保证质量上的均一性。现在的方法其实性能更好。
策略训练好了以后,就可以部署在电厂里接入电厂的实时数据。把实时数据收集上来后,根据策略产生优化过的指导策略,把结果告诉电厂的运行人员,让他们再去做调整。我们在不同的机组运行工况下做了一系列实验,基本能实现锅炉的燃烧效率从 92%-93% 提升大概 0.5%。虽然这个值看起来比较小,但是因为现代化的火电机组整体的燃烧效率已经很高了,煤燃烧得比较充分,提升 0.5% 能帮一个电厂省下大概上千吨的煤炭。
目前我们也看到,现在 Offline RL 已经有很多的研究陆续出来了,例如一些空调节能或者一些医疗场景。未来可能随着离线强化学习的算法越来越鲁棒,对样本的要求越来越低,可能会有更多的落地实践出来。
--
03/离线和在线的混合强化学习
另外一个比较有意思的工作,就是离线和在线的混合强化学习。
1. 在线和离线方法的局限性
很多场景下我们用到的都是不完美的仿真,不完美的仿真会带来各种各样的问题,因为它的动力学关系和真实世界是不一样的,所以才会带来非常大的这种仿真到现实的偏差。但是它的好处是可以无限制的交互,可以很好地解决 coverage gap 的问题。但现有最好的离线强化学习的方法相对还是比较依靠数据的。虽然数据里面有完美的动力学关系,但数据如果覆盖得不好的话,性能就会非常差。
2. H2O: 基于动力学偏差感知的混合离线-在线强化学习
所以我们希望能把这两者结合一下,用真实数据里的动力学关系去修正不完美仿真里的动力学关系,再用不完美仿真里无限制交互带的数据 coverage 去部分弥补数据里面的 coverage gap。所以我们提出了一个新的方法 H2O,核心是 Dynamics-aware policy evaluation。
它的形式跟离线强化学习里的 Conservative Q-Learning(CQL)很相似,主要有以下几项:第一项是 在学习 Q 的时候,最小化动力学偏差比较大的那些 Q 值。但同时,我们又把数据里的 Q 值往上提。这里面我们把 Dynamics gap 的度量定义成仿真里的动力学状态转移概率函数与真实世界里的转移概率函数的偏差程度。这里可以基于贝叶斯估计的方式推成上图中下面的形式。这意味着我可以学两个判别器,其一 Dsas 是基于当前的状态、动作、下一个时刻的状态去判别该数据是来源于仿真环境还是来源于真实数据;同时还需要另外一个判别器 Dsa,就只是根据数据中的 state 和 action 做判别 。然后就可以去估计仿真和真实的状态转移概率的比值(dynamics ratio),由此可以把 Dynamics gap 的偏差估计出来,进而再对价值函数做自适应的加权,就会减少动力学偏差比较大的地方对价值函数学习的影响;另外,这里还有一项修正过的 Bellman error,包含以下两个部分:第一部分是从数据里去做 Bellman error 的最小化,第二部分是从仿真样本里去做 Bellman error 最小化。
但是有一个要注意的点,就是仿真里的动力学关系是不准的,所以从当前 state-action 转移到下一个还是有问题的,是需要修正的。我们可以用 importance sampling weight 去修正。这个值其实就是前面 dynamics ratio 的相反数,正好也算过,可以直接用。这个就是它最终的形式。我们可以通过理论分析证明:这样的价值函数策略评估的方式等价于在奖励上加了一个自适应的调整项,这个调整项既跟 Dynamics gap 有关,也跟数据里的状态分布有关。当 Dynamics gap 较大的时候,它通常是作为惩罚项出现;当 Dynamics gap 比较小,并且这里有数据的时候,它是作为一个鼓励项出现,会鼓励在这个有数据地方多做探索。
这是我们在真实的轮足机器人上做的一系列实验。这个任务是我们想让这个机器人只靠两个轮子就能站立和行走。这里面我们也建了一个仿真环境,在这个仿真环境里,由于地表的摩擦力很难准确检出,机器人上电机有些背隙(backlash)或者磨损也很难建模出来,所以我们在仿真里学出来的 SAC 策略在现实里面根本就不可迁移。有一些 Cross-domain 的 Online RL 方法例如 DARC,它在上面跑得也不好。离线方法 CQL 基本上可以站起来,但是站不稳,一直往前溜,然后就摔了。那我们的方法就是可以稍微往前溜一点,最后可以稳稳地一直站住。
这是另外一个任务。我们希望这个机器人可以以我们设定的 0.2 米/秒的速度匀速前进。这个任务基本上也是 Online 方法基本都无法实现,Offline 的方法中 CQL 可以实现,但基本没有按我们想要的这个模式去走。比如,我们想让他按 0.2 米/秒这种比较慢的速度前进,但是它的速度都非常快,因为走慢了就跌了。只有我们的方法可以完全满足我们的期望。这里有一个意思现象:把我们的策略放到仿真里面去做评价的时候,发现它在仿真里的表现并不好,但在真实评价里基本上表现特别好。但是仿真里跑出来的在线强化的 SAC 策略在仿真里表现很好,反而在现实中特别差。所以这其实也说明,当仿真不太准确的时候,最好不要基于仿真去做策略的评估。
--
04/问答环节
Q1:发电厂里具体控制的是哪个点?是一次决策还是序贯决策?与 PID 相比,性能如何?
A1:我们在这个发电厂里面控制的时候,其实是控制以下几个点:因为一个火电机组里分了几个部分:一个是磨煤,一个燃烧过程中风门挡板的配风,还有水热循环里挡板的开度,也就是调节温度。这里面其实离线强化主要做的是燃烧里面的配风,还有挡板控制问题。
这里有一个配煤的问题,我们没有拿离线强化来解,而是用模仿学习的方法来解。因为一个火电机组里有六、七台磨煤机,这里面涉及组合优化的问题。有多个磨煤机同时工作,可以某几台磨煤机一起开,也可能是只开一台,也可能是很多台一起开。而且每台磨煤机里放的煤种可能还不一样,情况过于复杂。所以基本上我们只是管从煤进入锅炉燃烧,再到水路循环的一部分。这个部分我们可以拿离线强化来做。
PID 的问题是规模做不大,当要控制优化的系统变得特别大了以后就很难做,但是小的环节是可以做的。在电厂里面,现在有了这样的一个控制系统,其实都是基于一大堆的 PID 堆出来的。基本上只能做到单挡板或者单风门的控制,但是很多燃烧环节其实是都是耦合的,就比如可能在一个火电机组里面,它炉膛燃烧环节可能有二三十个这样的挡板,需要一起调节才能实现火焰居中燃烧;这样就确实需要一些比较强的方法,以实现更全局的优化。
其实我们也遇到了这种情况。在一个电厂里,它的火焰一直偏烧,怎么调 PID 都调不好,导致一侧水冷壁过热,另外一侧就没有那么热,所以一直得喷降温水。一般我们希望火焰在锅炉里居中燃烧,且火球燃烧的位置得合适,这样才能更好地发热。通过我们的策略调整以后,发现调整多个风门挡板的开度确实可以解决偏烧的问题。因为牵扯到耦合的地方太多了,因此调整 PID 是很难解决的。但是现在 Offline 情况下,我们不建议电厂用在所有场景下,可以用在正常工况上,因为非正常工况下的数据量过少。这个策略更多的还是帮助人做得更好一些,而非全部结果。
Q2:在您最新的工作中,是如何克服每个火电机组的环境不同而需要重复训练、决策的问题?
A2:我们尽量通过一些业务原理,对该问题的 configuration 和底层优化的算法做解耦。我们基于不同的电厂定了变量的模板,比如虽然有很多不同的机组:四角切圆燃烧的或前后墙对冲燃烧的。但所有的变量基本上可以按逻辑去分组,包括专业领域的知识也可以做标准模板化适配,自动化的去生成非常工程化处理的过程。还有就是一些安全约束条件的设计,这部分我们在每个电厂会做调研,把这些做自动化配置,在后面做模型学习的时候都是用同一套配置后的模型输入。但前期确实有一个定义的问题,需要大量的经验累积和自动化人工的辅助,才能把这个定义搞定。
今天的分享就到这里,谢谢大家。
分享嘉宾
DataFun新媒体矩阵
关于DataFun
专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章900+,百万+阅读,16万+精准粉丝。