当前位置: 首页 > 科技观察

终极版AlphaGo,DeepMind的新算法MuZero作者解读

时间:2023-03-21 19:16:56 科技观察

本文转载自雷锋网。如需转载,请到雷锋网官网申请授权。为庆祝Muzero论文在Nature发表,特写此文详细介绍MuZero算法。希望能让大家对算法有个直观的认识。MuZero向前迈出了激动人心的一步,该算法可以自行学习环境模型和规划,而无需依赖对游戏规则或环境动态的了解。即便如此,MuZero仍然能够实现AlphaZero的全部功能——可见其在诸多实际问题中应用的可能性!这只是统计数据MuZero是一种机器学习算法,因此首先了解它如何使用神经网络是很自然的。简单来说,该算法使用了AlphaGo和AlphaZero的策略网络和价值网络:策略和价值的直观含义如下:策略p(s,a)表示状态s下所有可能动作a的分布,基于最佳的优秀行动。类似于人类玩家,此策略相当于快速浏览游戏中可能采取的行动。值v(s)估计当前状态s下获胜的概率,即通过对所有未来可能性取加权平均,确定当前玩家获胜的概率。这两个网络中的任何一个都非常强大:仅依靠政策网络,它可以很容易地预测每一步的动作,最终得到一个好的结果;仅依靠价值网络,总是选择价值最高的行动。然而,将这两个估计结合起来会得到更好的结果。RoadtoWin与AlphaGo和AlphaZero类似,MuZero也使用蒙特卡洛树搜索方法(MCTS)聚合神经网络预测并选择适合当前环境的动作。MCTS是一个迭代的、最佳优先的树搜索过程。最佳优先是指搜索树的扩展依赖于搜索树的价值估计。与广度优先或深度优先等经典方法相比,最佳优先搜索利用启发式估计(如神经网络),这使得即使在非常大的搜索空间中也能找到有效的解决方案。MCTS有三个主要阶段:模拟、扩展和反向传播。通过重复执行这些阶段,MCTS逐渐构建基于节点可能的动作序列的搜索树。在这棵树中,每个节点代表一个未来状态,节点之间的边代表从一个状态到下一个状态的动作。在深入研究之前,先介绍一下搜索树和逆行,包括MuZero做的神经网络预测:圆圈代表树节点,对应环境状态;线条代表从一个状态到下一个状态的动作;根节点是环境的当前状态,即Go面板的状态。在后续章节中,我们将详细介绍预测和动态函数。模拟:从树的根部(图中顶部的浅蓝色圆圈)开始,这是环境或游戏的当前位置。在每个节点(状态s),使用评分函数U(s,a)比较不同的动作a,并选择最佳动作。MuZero中使用的评分函数是将先前的估计p(s,a)与v(s')的值相结合,即其中c是一个缩放因子,随着值估计精度的提高,它会降低先验的影响.每次选择一个动作时,我们都会为UCB比例因子c和后续动作选择增加其关联的访问计数n(s,a)。模拟沿着树向下进行到尚未展开的叶子。此时应用神经网络对节点进行评估,并将评估结果(优先级和价值估计)存储在节点中。扩展:一旦节点达到估计值,它就被标记为“扩展”,这意味着可以将子节点添加到节点以进行更深入的搜索。在MuZero中,扩展阈值为1,即每个节点在第一次评估后立即扩展。在执行更深入的搜索之前,可以使用更高的扩展阈值来收集更可靠的统计数据。反向传播:最后,神经网络的价值估计被传播回搜索树,每个节点都持有其下所有价值估计的运行平均值,这使得UCB公式随着时间的推移做出越来越准确的决策,从而确保MCTS收敛到最佳行动。中间奖励的细心读者可能已经注意到,上图还包括对r的预测。一种情况(例如棋盘游戏)在完全结束后提供反馈(输赢结果),可以通过价值估计对其进行建模。但在其他情况下,会有频繁的反馈,即每次从一种状态切换到另一种状态,都会得到一个奖励r。通过对UCB公式进行简单修改,奖励可以直接通过神经网络预测建模并用于搜索。其中r(s,a)是指在状态s中执行动作a后观察到的奖励,折扣因子γ是指对未来奖励的关注程度。由于整体奖励可以是任意大小,我们将奖励/价值估计归一化到区间[0,1],然后再将其与先验奖励结合:其中q_min和q_max分别是整个搜索树中的最小值和最大值观察值r(s,a)+γ?v(s')估计。流程生成上述MCTS可以通过重复执行以下流程来实现:在当前环境状态下搜索;根据搜索的统计信息π_t选择一个动作a_(t+1);根据动作更新环境,得到新的状态s_(t+1)和奖励u(t+1);重复上述过程。动作的选择可以是贪心的(选择访问次数最多的动作)或探索性的:探索的程度由一定的温度t控制,采样一个与访问次数n(s,a)成正比的动作a:当t=0时,相当于贪心采样;当t=inf时,相当于均匀采样。训练现在我们已经学会了运行MCTS来选择动作并与环境交互以生成过程,现在是训练MuZero模型的时候了。首先从数据集中采样出一条轨迹和一个位置,然后针对该轨迹运行MuZero模型:可以看出,MuZero算法由以下三部分组成:表示函数h映射了一组观察值(棋盘)到神经网络s的隐藏状态;动态函数g根据动作a_(t+1)将状态s_t映射到下一个状态s_(t+1),同时估计过程中的返回r_t,从而使模型可以继续扩展向前;预测函数f基于状态s_t评估策略p_t和值v_t,应用UCB公式并将其馈入MCTS过程。根据轨迹选择网络输入的观察和动作。相应地,策略、价值和奖励的预测目标是在存储的轨迹中生成的。从下图可以看出过程生成(B)和训练(C)的一致性:具体来说,MuZeroestimator的trainingloss为:Policy:MCTS访问统计和预测函数熵的policylogit的交集;value:N个奖励的折扣和+搜索值/目标网络估计值与预测函数值之间的交叉熵或均方误差;奖励:轨迹观察奖励和动态函数估计之间的交叉熵。重分析理解了MuZero的核心思想之后,接下来我们将介绍重分析技术,这将显着提高模型对大量数据的搜索效率。在一般训练期间,通过与环境交互,我们生成许多轨迹并将它们存储在回放缓冲区中以供训练。那么,我们能否从这些数据中获取更多信息呢?难的。由于需要与环境交互,我们无法更改存储数据的状态、动作或奖励。这在《黑客帝国》中是可能的,但在现实世界中是不可能的。幸运的是,我们不需要这个。只需使用带有改进标签的更新的现有输入就足以继续学习。考虑到MuZero模型和MCTS,我们做了以下改进:保持轨迹(观察、动作和奖励)不变,重新运行MCTS,可以生成新的搜索统计数据,为策略和价值预测提供新的目标。我们知道,在与环境直接交互期间,使用改进的网络进行搜索会产生更好的统计数据。同样,在现有轨迹上使用改进的网络重新搜索将产生更好的统计数据,从而允许使用相同的轨迹数据重复改进。再分析适用于MuZero训练。一般的训练周期如下:设置两组异步通信任务:一个learner接收最新的轨迹,将最新的轨迹保存在replaybuffer中,根据这些轨迹进行上述训练;多个actor周期性地从orc那里获取最新的网络检查点,并使用MCTS中的网络选择动作与环境交互生成轨迹。为了实现再分析,引入了两个新任务:再分析缓冲区,它接收参与者生成的所有轨迹并保留最新的轨迹;多个再分析参与者从再分析缓冲区中采样存储的轨迹,使用最新的网络检查点重新运行MCTS,并将生成的轨迹和更新的统计信息发送给学习者。这使得更改新轨迹与重新分析轨迹的比率变得简单,因为学习者无法区分新轨迹和重新分析轨迹。MuZero命名含义MuZero是基于AlphaZero命名的,其中Zero表示不模仿人类数据进行训练,Mu代替Alpha表示使用学习模型进行规划。进一步研究,Mu还有其他丰富的含义:Dream,日文发音为mu,意思是“梦想”,就像MuZero通过学习模型想象未来的情况;希腊字母μ(发音为mu)也可以表示学习模型;Wu,日语发音为mu,意思是“不,不”,强调从头开始学习的概念:它不仅不需要模仿人类数据,甚至不需要提供规则。结束语希望本文对MuZero的介绍能给您带来启发!如果你想了解更多细节,你可以阅读原文,也可以查看我在NeurIPS上的海报和我在ICAPS上关于MuZero的演讲。最后和大家分享一些其他研究人员的文章、博客和GitHub项目:ASimpleAlpha(Go)ZeroTutorialMuZeroGeneralImplementationHowToBuildYourOwnMuZeroAIUsingPythonFor简单来说,MuZero中只使用一个网络进行预测。根据RémiCoulom于2006年发表的EfficientSelectivityandBackupOperatorsinMonte-CarloTreeSearch,MCTS提供了解决围棋问题的可能性。具体来说,MCTS中的“蒙特卡洛”指的是围棋游戏中的随机模拟数,通过计算每一步随机走法的获胜概率来选择合适的位置。MuZero中使用的比例因子是∑bn(s,b)√1+n(s,a)?(c1+log(∑bn(s,b)+c2+1c2)),其中n(s,a)表示从状态s到动作a的访问次数。常数c1和c2分别为1.25和19652,决定了先验对于价值估计的重要性。注意,当c2远大于n时,c2的精确值不再重要,此时对数项为0。此时,公式简化为c1?∑bn(s,b)√1+n(s,a)c1。就像在AlphaGo之前许多围棋程序使用的随机rollout一样,随机评估函数发挥了作用。但如果评估函数是确定性的(如标准神经网络),那么多次评估同一个节点就没有意义。在棋盘游戏中,折扣因子γ为1,TD步数趋于无穷大,因此这仅适用于蒙特卡洛奖励(游戏获胜者)的预测。运行MuZero时,无需单独重新分析演员:因为只有一组演员,所以在每个动作之前都会做出决定是与环境交互以生成新轨迹还是重新分析存储的轨迹。