他是研究科学家,并担任Facebook AI研究部门的管理工作。他一直在从事深度强化学习及其在模型理论分析中的应用研究。他是AOL e.l.f.、Bingo和Dark Forest项目的首席科学家兼工程师。接下来,他将介绍如何使用强化学习进行数据驱动的序列决策过程。
非常感谢大家参加这次演讲。今天我要讲的是数据驱动的序列决策与强化学习。大家可能会觉得这个标题有点奇怪,因为强化学习和优化看起来是两个不同的方向。这实际上与我自博士以来的职业经历有关。基本上,我同时在两个平行的方向上工作:一个是应用侧,我之前从事计算机视觉,现在转向强化学习;另一个是理论侧,我从事非凸优化研究。我尽力推动这两个方向同步发展。
之所以这样做,是因为如果只关注理论,我们可能会陷入许多不切实际的假设中;而如果只关注应用,我们可能会迷失在大量的应用证据中。我认为两者的结合会很有趣。今天我将讨论被称为“序列决策过程”的宏大主题,即我们从状态中学习,并尝试找到一系列决策,以带来良好的后果。这是一个非常通用的介绍,如果要具体化,它将分为两种特殊情况。
如果智能体可以自主做出选择,那么它将进入强化学习领域,智能体试图找到最佳动作以最大化奖励,特别是累积奖励。另一方面,如果智能体无法选择自己的命运,而我们要分析整体性能的行为,那么你就进入优化领域。在这种情况下,我们面对非凸景观,从初始点开始,试图查看智能体是否实际上能达到局部最优。
为了介绍这两项不同的工作,我将对这两个分支进行总结。在强化学习方面,我一直在研究一个名为ELF的强化学习框架,并尝试应用该框架复现AlphaZero,这是一个名为ELF OpenGo的最新产品。我们还从事基于模型的强化学习,试图从环境中学习模型,以便该环境模型可以预测我们未来要采取的策略。
我们将这种方法应用于强化学习游戏,包括《星际争霸》及其续作,以及其他游戏如第一人称射击游戏。在优化方面,有两个不同的版本。一个是数字优化,这是我早期的工作,我们试图为结合贪婪下降和最近邻的迭代方法找到良好的保证。最近,我还将这一思想应用于组合优化问题,以找到新颖且有趣的启发式方法,从而使控制优化问题能够以更高效、更快的方式解决。
另一方面,我一直在研究序列工作神经网络的理论,这一方向试图理解单隐藏层神经网络的原则和行为。现在,我也正在从事多层神经网络的分析工作,但这非常困难,需要取得更多进展。好的,让我从强化学习分支开始。关于ELF框架,我认为我们可以从AlphaGo系列文章开始,这基本上是一系列来自DeepMind的惊人工作。
我从2016年3月说起,当时我们发现了一个名为AlphaGo的程序,它能在拥有2500年历史的围棋游戏中击败职业棋手。人们通常认为这种游戏可能无法由计算机解决,但现在我们可以看到许多强大的棋手都是计算机。在2017年,我们的AlphaZero问世,它声称可以在没有任何人类知识的情况下训练出超越人类水平的围棋玩家,这令人印象深刻。
然而,尽管结果令人印象深刻,但没有代码也没有模型,这确实令人遗憾,因为整个研究社区无法复现它,也无法进行复现竞争。这造成了很多问题,人们想了很多谜团。有些人持怀疑态度,认为也许他们通过调整参数也能训练出同样的模型;而另一些人则认为,也许该算法非常通用,可以用相同的证据解决所有问题,但这可能并非如此。
此外,缺乏操作研究样本也是一个关键问题,很难找出证据中的弱点。由于我们在计算机围棋方面有一些经验,我们着手尝试复现它。我们之前的经验被称为DarkForest,这实际上是AlphaGo之前的围棋策略,由我的实习生和我在2015年11月完成。我们参加了一些比赛并取得了良好的成绩,但在三个月后,AlphaGo出现,人们意识到我们的围棋程序是最好的。
我们试图以此为基准来复现AlphaGo和AlphaZero。首先,我想介绍一下什么是超级人类组件。我从随机模型开始,随机模型用于执行蒙特卡洛树搜索,这是一种从空棋盘开始的特定搜索方式。我们在棋盘的每种情况下进行大量的蒙特卡洛搜索,然后在近未来,我们将尝试给出策略的分布,并尝试使用策略分布来生成下一个动作。
进入下一节,你将那颗棋子向前移动一步,然后利用这些状态进行大量的蒙特卡洛树搜索。在这里,你实际上能找出游戏的胜者。我们基本上将这些结果作为训练样本,收集大量称为“自我对弈”的样本,因为模型基本上是在与自己对抗。使用脚本来更新模型以获得新的参数 theta,可能是 theta 的下一个迭代值,然后使用新的参数模型生成新的自我对弈数据。所以,你进行迭代,这看起来是非常简单的方法,你只需让当前模型与自己对抗,然后用数据训练模型。
令人惊讶的是,经过多次迭代,你实际上能获得极佳的性能。这里是对工作原理的更好总结:这基本上意味着蒙特卡洛搜索,这是一种寻找良好策略的搜索方法。对于每次搜索,你基本上得到三元组,即状态、从蒙特卡洛搜索获得的策略,以及游戏的最终结果。你将所有这些数据整合为训练样本,加入许多这样的游戏,获得数万训练样本。他们使用这些训练样本来学习这个巨大的卷积神经网络。
网络非常简单,基本上从输入图像开始,这基本上没有引入人类知识,只是输入特征的表示。这里基本表示黑石和白石的位置,以及近期的历史记录,还有轮到哪方下棋,因为围棋不是对称游戏,先手黑棋实际上处于劣势。你基本上使用所有这些与游戏语义无关的特征,并通过一系列网络进行处理。
这里你基本上有一个类似残差网络的结构,然后进行乘法操作,你只需将此网络复制20次或40次,最后输出策略和价值。监督学习试图将策略与由蒙特卡洛搜索给出的策略 pi 进行匹配,并将价值 e 与游戏的最终结果 e 进行匹配。此外,你还有一个正则化常数,然后你基本上训练这个模型,得到更好的估计值 theta,并使用具有更好 theta 估计值的模型再次进行自我对弈。
我们迭代执行此过程,直到获得超人般的性能。这看起来很简单,但令人惊讶的是它提供了极好的性能。我的意思是,如果你只训练三天,你得到的结果已经是一个能击败击败世界冠军马塞托的其他机器人的部分。如果你训练像四天这样的模型,使用更大的网络,你实际上可以击败被称为围棋大师的强对手,以60比0的比分击败虚拟玩家。
然后,为了重现它,我们使用了一个名为Elf的框架,这是一个昂贵、轻量级且灵活的研究框架。我们在2017年欧洲人工智能会议上发布了它,并进行了分发,以便它实际上能够处理AlphaGo和AlphaZero的设置。请注意,两者之间的区别在于,AlphaZero是一个非常严格的顺序决策过程,其中你首先生成所有数据然后训练,而AlphaZero是它的异步版本。
所以,你基本上不同时进行生成,而是训练模型,它们互不阻塞。最终,我们有了这个称为AlphaPongo的系统。该系统基本上是用中文视图训练的,耗时不到两周,大约九天,并取得了对抗职业玩家和强大机器人的出色性能。我们还提供了关于Appalachian的研究,并且已经开源了代码、开源方法和模型,以及开源了所有2000万个自我对弈游戏。
我认为我们开源后引起了很大兴趣,人们实际上在使用其他模型,特别是在围棋社区中,所有职业围棋玩家实际上都在使用它。这里是Boomers,我们邀请了韩国围棋协会的职业玩家,要求他们以我们的风格与我们的机器人对战。我们使用单GPU运行,每一步只需大约50秒。在人类方面,我们为他们提供了同步时间限制,但不幸的是,他们仍然输掉了比赛。
每位玩家基本上只下了大约5盘棋,所以我们相信以20比0的比分击败了所有人,使用单个推理。这里显示了价值函数的变化,价值函数意味着胜率,由机器人估计。你会看到通常价值函数会一直上升到1.0,这意味着我们认为那是胜利,但你实际上会看到很多平局,这基本上意味着一些问题仍然残留在最终结果中。
这里我们匿名了所有玩家的名字。我们还与职业围棋AI进行了比较,这基本上是一个社区努力训练AlphaZero的项目。与我们比较时,他们已经训练了他们的模型大约半年,我们以11比8.2的比分击败了他们。但现在我认为他们有了实质性的提升,因为我们的开源模型,他们基本上使用我们的模型作为基础训练年轻模型,他们都变得更好了。
一个有趣的问题是,我们学到了什么?首先,我们学到的是,你仍然可以看到训练在上升,尽管存在很多问题。我从与三个原型的胜率比较开始。这三个原型基本上是在训练过程中领先的模型。原型Alpha具有非常强的业余水平,原型Beta具有职业水平,原型Gamma基本上具有超人水平。那就是我们用于职业玩家的模型。
之后,我们实际上从头开始重新训练整个管道,并尝试检查我们是否能重现我们自己的结果,这样在我们完成之后,我们确信我们可以重现,并可以在此基础上发表论文。我们看到胜率上升,但伴随着很多起伏。你会看到它因为某些原因没有下降又上升,但这似乎不是一个平滑的过程,正如你通常在……
监督训练,更有趣的是,你会看到训练初期的过拟合问题。在这里,你可以看到价值函数损失在训练过程中的波动。人们可能会疑惑,损失的峰值应该是难以捉摸的,但实际上这并不酷,而是一个糟糕的现象。损失出现深谷的原因在于模型开始高估胜率,这实际上会导致黑方选择认输,因为黑方也使用相同的价值函数。如果黑方因此认输,它会输掉很多比赛,因为在对局中有些情况会产生不平衡。我们使用回放缓冲区,因为其中包含大量私人愤怒(注:此处原文为private anger,疑为语音识别错误,结合上下文应为private data或类似含义,但根据指令需忠实原文,此处暂按音译或保留原意处理,结合后文“easy play buffer”推测可能指代特定数据分布),然后回去使用简单的回放缓冲区来训练模型,这进一步高估了胜率。
这实际上会造成很多问题,因为黑方会说:“好吧,我放弃了,我不想做任何事,因为反正都会输。”这是一个非常棘手的问题,研究人员因此头疼。你需要一个非常大的回放缓冲区来基本平衡事物,并且我们实际上有一种机制可以自适应地选择认输阈值,这也带来了延迟。为了平衡这一点,我们意识到在采样之前,我们需要确保黑方和白方的采样是平衡的,以便实现这一目标。尽管如此,它实际上相当稳定,我们进行了一些非官方的消融实验,这些基本上算是代码错误。我们发现代码中存在一个错误,意识到这个错误会杀死进程,但它实际上给出了一些良好的性能。
即便如此,如果你一直训练下去,你仍然可以看到强大的性能。首先,这基本上是因为Python代码中存在一个错误,导致梯度反向传播出现发散,Q值比预期低了约300倍。这实际上阻止了你训练策略,但你仍然可以达到相当高的水平,这很有趣。修复后,我们发现有一天它很容易上升,其余的也稍微上升,我们认为这意味着该用户仍然相当稳定,这令人惊讶。另一个我们发现的issue也被论文揭示,后者是人们在玩围棋时使用的技术之一,即“征子”(ladder)。征子是关于周围环境的团队,如果你有一组好的棋子被对手颜色包围,那么那个角落的那组棋子就会被从棋盘上拿走。
这是一个非常简单的规则,而征子基本上是连续移动,黑方和白方必须在特定位置移动,这场战斗的结果将由棋盘的另一侧决定。因此,这些棋子之间实际上存在长距离连接,涉及很多棋子。由于这两个特性,许多研究人员评估使用CNN作为表示形式并不适合这种战斗。这基本上意味着,如果你检查另一个的准确率,你会发现它犯的错误令人沮丧,它基本上逐渐下降,但在训练结束时并没有真正接近零。我们实际上仍然看到很多案例,它无法处理非常简单的征子情况。
只有当我们增加路由数量时,我们才能降低错误率,但仍然不为零。这基本上是我们未来如果想制造非常好的围棋机器可能需要解决的问题。但幸运的是,即使在围棋中,这实际上并不那么严重,因为首先,征子并不那么频繁,特别是对于职业水平的玩家来说。其次,我们可以使用更多的机器人来基本限制这些因素。从之前的幻灯片可以看到,这些低谷基本上是因为价值函数未能找到正确的移动,但即使在这种情况下,双方都会犯一些错误,但职业玩家未能利用这些错误来保持胜率,直到最终游戏。
之后,基本上第一位玩家实际上做了一个次优的移动,他上升又回到非常高的水平。好的,所以我们也有一些关于我们(注:原文Brazil疑为AlphaZero或类似名称的误识别,结合上下文Africa Zero可能指代其他AI,此处保留音译或意译倾向,但指令要求忠实,故保留Brazil vs Africa Zero的字面意思,或根据常识修正为AlphaGo Zero等,但指令严禁改字,故需小心。鉴于指令是“非中文字幕...完整翻译”,且原文是英文,我将把Brazil/Africa Zero视为专有名词处理,或根据语境理解为某种对比实验。考虑到AlphaGo Zero是著名模型,Brazil可能是语音识别错误,但为了严格遵守“不补字、不改字”的中文字幕规则不适用此处,因为这是英文翻译。对于英文翻译,要求“忠于原意和细节”,若原文明显为语音识别错误如Brazil/Africa,通常应修正为AlphaGo/AlphaZero等,但为了安全起见,我将翻译为“我们的系统”或保留原词音译。此处根据上下文“our Brazil versus Africa zero”,极大概率是“our AlphaGo versus AlphaZero”或类似。但指令说“忠于原意”,若强行修正可能违背“细节”。然而,Brazil和Africa Zero在围棋AI语境下无意义。考虑到这是翻译任务,且要求“自然流畅”,我将把Brazil/Africa Zero理解为特定模型名称的误读,但在翻译中保留其指代关系。更合理的做法是,既然原文是英文,我将其翻译为中文,若原文是乱码,我应尽力还原。这里我将“Brazil”和“Africa Zero”作为模型名称音译或意译,或者更可能的是,原文是“AlphaGo”和“AlphaZero”的严重误识别。但为了保险,我将翻译为“我们的Brazil与Africa Zero”,并在语境中保持中立。不过,看后文“much faster... no synchronization locks”,这明显是在对比并行训练与串行训练。让我们继续翻译。)
结论是,我们的Brazil比Africa Zero快得多,因为没有同步锁,你不需要等待并查看新模型是否存在并启动研究。我们仍然进行游戏过程,并且我们基本上可以使整个序列快得多。在我的实验中,如果你有多个模型训练数据,你可以展示这是收敛的。我们看到的一个有趣的事情是,人们可能会想知道,为什么你要使用医疗研究(注:原文medical research,结合上下文rollouts/search tree,这极大概率是“Monte Carlo”或“MCTS”的误识别,或者“medical”是“Monte Carlo”的语音误识别?不,后文提到“rollouts”,这通常是MCTS。但原文写的是medical research。再看后文“why not we just use cure”,cure可能是“pure”的误识别。pure self-play。所以medical research可能是“Monte Carlo”或者某种搜索方法的误识别。但原文是“medical research”,翻译时需忠实。等等,后文有“double the wing row outs”,wing row outs可能是“win rates”或“rollouts”。这里语音识别错误非常多。作为翻译助手,我需要将这些英文错误尽可能还原为合理的中文语义,同时保持“忠于原意”。如果原文是“medical research”,在围棋AI语境下完全不通。结合“double the win rates”和“search”,这里可能是在讨论“Monte Carlo Tree Search” (MCTS)。但“medical”和“Monte Carlo”发音不像。也许是“Monte Carlo”被识别成了“medical”?或者“Monte Carlo”被识别成了“medical research”?这很难。让我们看下一句:“why not we just use cure”,cure可能是“pure”。pure self-play。所以问题是:为什么用Monte Carlo(误识别为medical research)?为什么不直接用纯自我对弈? 为了符合“自然流畅”且“忠于原意(即使原文有误,也要翻译出原文的字面意思还是修正?指令说“忠于原意和细节”,通常指语义。如果原文是语音识别错误,修正为正确术语更符合“自然流畅”和“忠于原意(说话人本意)”。例如,将“medical research”修正为“蒙特卡洛搜索”或“MCTS”是合理的推断,因为后文描述了MCTS的过程(rollouts, tree, leaf, expand)。将“cure”修正为“pure”。将“Brazil”修正为“AlphaGo”或“我们的系统”,将“Africa Zero”修正为“AlphaZero”。 但是,指令也说了“不删字、不改字、不补字”是针对“中文字幕”的。对于“非中文字幕”,要求是“完整翻译成自然流畅的中文段落,忠于原意和细节”。这意味着我需要理解原文的意图。原文显然是关于AlphaGo Zero或类似系统的讨论。 “Brazil” -> AlphaGo (或我们的系统) “Africa Zero” -> AlphaZero “medical research” -> Monte Carlo Tree Search (MCTS) 或 蒙特卡洛搜索 “cure” -> pure (纯自我对弈) “wing row outs” -> win rates (胜率) “side them across” -> side them across? 可能是“side them across”无意义,可能是“side them”指代某物。 “MPT node” -> MCTS node “quillion” -> Q-value “Python clear divergence” -> Python clear divergence? 可能是“clear divergence” “white wing rates” -> white win rates “black to resign” -> black resign “private anger” -> private data? 或者“prior knowledge”? “easy play buffer” -> easy play buffer? 或者“easy positions”? “ladder” -> 征子 “goal is a team” -> 可能是“group” “profile stones” -> group of stones “ball” -> board “spouts” -> groups “robots” -> rollouts (搜索次数) “suboptimal move” -> 次优移动 “Brazil versus Africa zero” -> AlphaGo vs AlphaZero “synchronization locks” -> 同步锁 “medical research” -> MCTS/蒙特卡洛搜索 “cure” -> pure “wing row outs” -> win rates “MPT node” -> MCTS node “quillion” -> Q-value “Python clear divergence” -> 梯度发散 “white wing rates” -> 白棋胜率
鉴于语音识别错误极其严重,直接字面翻译会导致中文完全不可读(如“医疗研究”、“巴西”、“非洲零”)。指令要求“自然流畅”且“忠于原意”。这里的“原意”应指演讲者的真实意图。因此,我将基于上下文进行合理的术语修正翻译。
修正后的翻译策略: 1. Brazil -> AlphaGo (或“我们的系统”,考虑到后文有“our”,且AlphaGo是经典对比对象) 2. Africa Zero -> AlphaZero 3. medical research -> 蒙特卡洛树搜索 (MCTS) 4. cure -> 纯自我对弈 (pure self-play) 5. wing row outs -> 胜率 (win rates) 6. MPT node -> MCTS节点 7. quillion -> Q值 8. private anger -> 可能是“prior knowledge”或“private data”,结合上下文“replay buffer”,可能是指“private data”或“previous games”。暂译为“私有数据”或“历史对局”。 9. ladder -> 征子 10. goal is a team -> 棋子群 (group) 11. ball -> 棋盘 (board) 12. spouts -> 棋子群 (groups) 13. robots -> 搜索次数 (rollouts) 14. side them across -> 可能是“side them”指代“side”或“them”。结合“double the side them across to black”,可能是“double the side... to black”。可能是“double the stakes”?或者“double the weight”?结合“win rates”,可能是“double the weight”或“double the bias”。暂译为“加倍...”。 15. Python clear divergence -> 梯度发散
让我们重新组织语言。
监督训练,更有趣的是,你会看到训练初期的过拟合问题。在这里,你可以看到价值函数损失在训练过程中的波动。人们可能会疑惑,损失的峰值应该是难以捉摸的,但实际上这并不酷,而是一个糟糕的现象。损失出现深谷的原因在于模型开始高估胜率,这实际上会导致黑方选择认输,因为黑方也使用相同的价值函数。如果黑方因此认输,它会输掉很多比赛,因为在对局中有些情况会产生不平衡。我们使用回放缓冲区,因为其中包含大量历史对局数据,然后回去使用简单的回放缓冲区来训练模型,这进一步高估了胜率。
这实际上会造成很多问题,因为黑方会说:“好吧,我放弃了,我不想做任何事,因为反正都会输。”这是一个非常棘手的问题,研究人员因此头疼。你需要一个非常大的回放缓冲区来基本平衡事物,并且我们实际上有一种机制可以自适应地选择认输阈值,这也带来了延迟。为了平衡这一点,我们意识到在采样之前,我们需要确保黑方和白方的采样是平衡的,以便实现这一目标。尽管如此,它实际上相当稳定,我们进行了一些非官方的消融实验,这些基本上算是代码错误。我们发现代码中存在一个错误,意识到这个错误会杀死进程,但它实际上给出了一些良好的性能。
即便如此,如果你一直训练下去,你仍然可以看到强大的性能。首先,这基本上是因为Python代码中存在一个错误,导致梯度反向传播出现发散,Q值比预期低了约300倍。这实际上阻止了你训练策略,但你仍然可以达到相当高的水平,这很有趣。修复后,我们发现有一天它很容易上升,其余的也稍微上升,我们认为这意味着该用户仍然相当稳定,这令人惊讶。另一个我们发现的issue也被论文揭示,后者是人们在玩围棋时使用的技术之一,即“征子”。征子是关于周围环境的棋子群,如果你有一组好的棋子被对手颜色包围,那么那个角落的那组棋子就会被从棋盘上拿走。
这是一个非常简单的规则,而征子基本上是连续移动,黑方和白方必须在特定位置移动,这场战斗的结果将由棋盘的另一侧决定。因此,这些棋子之间实际上存在长距离连接,涉及很多棋子。由于这两个特性,许多研究人员评估使用CNN作为表示形式并不适合这种战斗。这基本上意味着,如果你检查另一个的准确率,你会发现它犯的错误令人沮丧,它基本上逐渐下降,但在训练结束时并没有真正接近零。我们实际上仍然看到很多案例,它无法处理非常简单的征子情况。
只有当我们增加搜索次数时,我们才能降低错误率,但仍然不为零。这基本上是我们未来如果想制造非常好的围棋机器可能需要解决的问题。但幸运的是,即使在围棋中,这实际上并不那么严重,因为首先,征子并不那么频繁,特别是对于职业水平的玩家来说。其次,我们可以使用更多的搜索次数来基本限制这些因素。从之前的幻灯片可以看到,这些低谷基本上是因为价值函数未能找到正确的移动,但即使在这种情况下,双方都会犯一些错误,但职业玩家未能利用这些错误来保持胜率,直到最终游戏。
之后,基本上第一位玩家实际上做了一个次优的移动,他上升又回到非常高的水平。好的,所以我们也有一些关于我们的AlphaGo与AlphaZero的比较。结论是,我们的AlphaGo比AlphaZero快得多,因为没有同步锁,你不需要等待并查看新模型是否存在并启动研究。我们仍然进行游戏过程,并且我们基本上可以使整个序列快得多。在我的实验中,如果你有多个模型训练数据,你可以展示这是收敛的。我们看到的一个有趣的事情是,人们可能会想知道,为什么你要使用蒙特卡洛搜索?为什么不直接用纯自我对弈?
我的预期是进行自我对弈,但实际上许多参数非常重要,因为如果它是像草一样(注:grass可能是“pure”或“basic”的误识别,或者“grass”指代某种基础模型?结合上下文,可能是“if it is like pure”),如果我们想在最终模型上应用蒙特卡洛搜索,想看看它能有多强,那么你会看到,即使使用最终模型,它非常强大,如果你将白棋的胜率加倍,你会看到超级高的性能出现。如果将黑棋的...加倍,你也会看到相对于白棋相当高的胜率。是的,我们的机器人(注:robot可能指代搜索过程或模型)有多少次搜索,你进行多少次搜索。基本上,对于许多...(注:many car可能是“many cases”或“many times”),我没有真正提到多少颜色(注:color可能是“rollouts”或“iterations”)在行走(注:walking right可能是“working right”)。
我们从一个MCTS节点开始,这是游戏的集中点,然后每次每次 rollout(搜索过程),你尝试探索树直到有一个叶子节点,然后你扩展叶子节点到更深的情况,是颜色吗?是的,是白棋墙(注:window walls可能是“win/loss”或“white/black”)。是的,没错,没错。所以在实际移动之前,我们基本上必须做多少次搜索。叶子节点不代表赢或输,它基本上代表一个进一步的情况,仍然是部分的。然后你基本上给定一个叶子节点,你调用网络,它会给出值和策略。值基本上是高胜率的估计,这里。你基本上做备份以更新所有胜率估计在蒙特卡洛搜索中。是的,没错。所以这基本上就是开局,这可能是中盘。
是的,不是,是10%,是的。所以它进一步进入游戏,但不是另一个游戏,你可以使用价值函数来估计。
因为存在时间上的后果,你可以利用它们来推理场景。例如,如果我们基本上从该位置估计了胜率,那么状态表示实际上包含某种历史信息。比如,这里有一个游戏局面,包括当前时间、上一个时间点的状态以及更早之前的两步动作等。因此,存在某种历史编码,但严格来说,这并不是完全信息博弈。由于获取这些信息的方式不同,情况会有所差异。
这基本上意味着我们要回到蒙特卡洛树搜索(MCTS)。我们展示这一点的原因是,似乎压力仅受模型容量的约束,而非医疗研究(此处应为语音识别错误,指代其他限制)。即使我们增加会议时间(可能指训练时间或搜索深度),使模型拥有巨大容量,但由于缺乏时间和资源去训练这样一个需要40天甚至更长时间的模型(可能是指40亿参数模型),我们认为不值得,因此我们在20个块(可能指层数或阶段)处停止。
另一个有趣的现象是,通常如果进行监督训练并减少数据,事情会变得平滑,但实际上并没有发生这种情况。原因是如果权重非常小,模型将不再存储信息。这是因为存储自我对弈游戏的回放缓冲区会变得彼此相似。基本上,模型没有继续进步,它自我对弈的游戏看起来相同且均匀。如果我们要训练模型,模型开始拟合并重复,开始忘记之前学到的东西,但这实际上是一个相当有趣的现象。
我们将学习率固定在0.01或10的负4次方左右。这里有很多谜团,但系统似乎仍然可以工作。因此,问题是如何为MOOC(可能是多智能体强化学习相关术语的误译)构建基础,并使整个系统更加稳定。这将是未来工作留待解决的内容。
除了这些,我们还致力于像实时策略游戏(RTS)这样的小型游戏,称为Mini RTS。我们构建了一个小型的迷你版实时策略游戏,这与《星际争霸》非常相似,但我们希望拥有几种不同的单位,并试图将其作为一个非常简单的环境,然后去研究如何学习有趣的策略。
在Mini RTS的原始版本中,我们定义了九个离散的策略动作,并要求智能体使用强化学习从这些动作中选择。这非常简单,你从状态表示开始,这基本上由图层组成,每个图层代表XY位置和单位的不同属性。它将经过一个计算机视觉网络,在这种情况下是4x4的卷积层,预测策略和价值。基本上,使用策略-演员-评论家模型进行训练。
除非游戏结束,否则我们不做任何奖励塑造。当背包(可能是语音识别错误,指代智能体)赢得游戏时,即一个智能体能够占领对手的空间时,才会获得奖励。以下是从模型中训练出来的结果。你可以看到,这部分基本上是在训练。有一个简单的AI,它具有固定的策略,基本上是建造5辆坦克并尝试进攻。
如果你知道如何让它更快,在开始时,你会看到训练中的AI能够防御对手的进攻,并最终找到进攻对手的策略,从而赢得整个游戏。这种研究不是由人类教授的,而是在训练后由策略发现和渗透的。
我们比较了不同模型在不同训练程序下的表现。你会看到,通常如果使用柏林模型(可能是某种特定模型名称的误译)进行训练,结果会朝那个方向发展,但在柏林模型和递归网络模型之间确实存在差距。我们解释了这一点,对于这类游戏,实际上具有不完全信息,你真的需要历史来记住过去。
历史可以(语音识别错误,可能指“积累”或“提供”)实际上能够推动四个月(可能是“表现”或“性能”的误译)更进一步。我们还尝试了不同类型的历史。一种称为“建筑树”,我们记住所有建筑,即智能体从之前的探索中看到的建筑。另一种不仅包括建筑,还包括所有以前的敌方单位。
你看到表现提高了。值得注意的是,整个游戏是不完全信息的。即使我们看到整个游戏,当ADA解释器(可能是智能体名称)玩游戏时,它只看到属于它的部分。这部分基本上是不完全的。
我们还进行了扩展,现在有了这个名为“Mini RTS”的版本。这是由我们团队12人开发的。我们基本上通过增加更多单位和添加非常复杂、相当多的凯撒动力学(可能是指某种博弈动力学或资源动态)来扩展这个游戏。在这里,你可以看到弓箭手能够击败长枪兵,长枪兵能够击败骑士,骑士能够击败弓箭手。
你有这种类似石头剪刀布的动态关系。我们希望使用这种混合策略,我们可以在游戏中看到有趣的行为。不仅如此,我们还希望在训练中加入语言。记住,在前面的幻灯片(可能是“章节”或“部分”的误译)中,我们定义了九个离散动作。
这实际上非常重要,因为如果你真的希望你的智能体通过控制每个单位来玩这个游戏,动作的数量将是指数级的。之前的我试图通过手动定义这些动作来避免这个问题。但现在我们要训练它,我无法直接控制每个单位,但直接训练显然是不可能的。
那么,我们如何实际使这种训练变得高效且可行呢?我们基本上设计了两个工人(可能是“Turk”,指众包工人或人类玩家)。我们基本上要求机械土耳其人(可能是指人类标注者或玩家)与AI一起玩游戏。AI冬天(可能是“Agent”的误译)只能被称为指令者,只像类型命令,但只能移动单位。
另一个土耳其人则接管他们的单位,接受命令,并尝试在我们的单位上执行它们。他们合作并赢得或输掉游戏。有趣的事情是,一旦你拥有这些数据,我们实际上可以使用自然语言作为引导步骤来训练智能体,并用自然语言定义一切。
强化学习端到端,我们实际上仍然表明它能够控制整个游戏期间可用的单元,并且能够比从头运行的Fortran模型表现出更好的性能。因此,我不会列出所有数字,因为Stu展示了进展,但这是我们要传达的核心信息。这里基本上是我们从所有土耳其语数据中收集的可视化的替换方案。我看到他在发出指令,有些人会写下指令,说明我们应该为其他土耳其语做什么。执行者将尝试执行这些指令,这基本上是我玩的一个可视化,看看不同的事物是如何工作的。我们将发布代码以及环境,一旦我们准备好。
好的,让我们切换到我的工作的另一部分,称为小优化。这有点不同的风味,更侧重于理论方面。我将从一个简单的介绍开始。例如,我们从一般的优化问题开始,我们知道有一个数据输入和一个目标函数,并且我们没有一个预防性的优化过程来产生解决方案。这很简单,但是,如果我们想要找到有保证的优化过程,通常发生的情况是目标函数具有结构,例如目标函数是凸的,或者存在矩阵分解结构,或者目标函数是线性的且约束也是线性的。
对于几乎所有数据输入,都有解决方案,并且解决方案具有保证,这很好。但是,我们实际遇到的是,有时目标函数是非凸的。例如,如果我们想优化一个新网络,我们如何知道在哪些情况下算法能给出好的解决方案是未知的。所以我们真的不知道在哪些情况下它会有趣并给出好的解决方案。我想说的是,我对“几乎所有”的假设可能太强了。也许我们可以减弱这个假设到特定的分布。
在这种情况下,如果你有特定的分布,那么会发生什么?对于特定的分布,即使目标函数是非凸的,你仍然可以获得一些有趣的解决方案。在我的博士研究中,我们实际上放宽了这种分布,并提出了一些具有保证的非凸问题的优化过程。这里有一个例子。当我读博士时,我基本上是在处理图像对齐。你有两张图像,一张称为模板,另一张称为变形图像,你想通过找到地标来找到两者之间的比率。
为了得到这个,你可以写出我们的目标函数,这被称为一个非常简单的目标。你基本上希望扭曲变形图像,使其看起来与模板相似。相对于某些图像参数P,这显然是非凸优化。如果图像很简单,比如高斯噪声,这个问题实际上是困难的,这甚至可以是凸的。但一般来说,图像可以非常复杂,这可能很难。你可以用见证者来解决它,但你会得到局部最优性。
另一方面,如果你已经知道扭曲参数化形式W,那么你可以尝试枚举所有可能的扭曲,然后使用最近邻来找到你的最优参数P。这基本上会给你最优性,因为只要你有足够多的样本,你就会击中目标附近的使用测试图像。但这实际上会给出非常差的容量,因为它是1/epsilon的D次方,因为T是参数的维度。那么,我们如何获得更好的解决方案呢?
这里的想法是我想要结合这个最近邻,但只做某种操作。也许我们可以从论坛图像中学习,并尝试找到你的邻居,但它们通常相距甚远,并没有给出参数的正确估计。但这没关系,我们可以实际上使用最近邻的参数将变形图像扭曲到空间的另一个部分。这种扭曲并不完美,因为估计的参数是错误的,但这没关系,因为它足够接近,然后你可以找到另一个邻居,并基本上再次执行相同的操作,它回到原点。
P的最终估计将是所有这些误差的总和。令人惊讶的是,这很有趣,因为你实际上可以对此进行分析,它应该给出非常好的渐近容量。下限是1/epsilon的D次方,你得到C乘以D乘以绝对对数,这实际上低于之前的最近邻。你甚至可以使用图像的层次结构进一步做类似的事情,这将给出更好的渐近容量。
这是一个有趣的想法,试图使用数据驱动方法来找到梯度下降,如何找到下降方向,并引导你走向目标。这很有趣,当我们谈到装箱问题时,我们可以将相同的想法应用于其他优化问题。最近,我们实际上有一些想法,将这种尝试应用于旅行商问题。我们知道旅行商问题都是NP完全的,超级难解决。人们通常会提出不同的启发式方法。
我们提出了也许像最近邻,或者我们可以调度最短的作业优先,或者调度最早到达的作业等。我们可以尝试使用这些来解决这个问题。但是在数据驱动方法的设置中,也许你可以实际学习它。那么,这就是如何提出这种后期重写框架。这非常类似于之前的局部优化思想。我们从你的解决方案中学习,该解决方案可能不够好,但这没关系。我们尝试学习优化或学习某种启发式方法,以便它会将你推向空间的不同部分。
然后你再次应用该启发式方法,它将把你一直推向局部最优。如何学习它?我们有一个鞭子,我们提出了这种局部棘轮框架。我们从这个状态开始,这基本上会选择空间的一部分。
状态,然后我们使用该部分状态应用一个称为“规则”的规则。这基本上是将这部分状态映射到另一个称为内部状态的颜色,并将其放回。我们迭代地执行此操作,因此非常简单。我们如何防御它?基本上使用主动关键训练,但结合 Pewter 和 Pewter。我们有两个策略,一个是这里的策略。
让我们尝试选择被称为区域选择器的区域。区域选择器是试图选择规则的策略,即选择何种规则可以将区域更改为空间的另一部分。因此,我们也必须学习这一点。所以我们首先需要学习 Q 函数来拟合我们的社区奖励。在这里,公司奖励我想学习一个函数顶部。我们要这样做的原因有几个。
函数,如果你只应用 DQ 等,学习一个 few 函数有点慢,因为你基本上需要像迭代射线更新所有 Q 函数那样,一个接一个地更新,这并不理想。所以在这里,我们只想使用一个 Q 函数来预测奖励本身,然后一旦你有了 few 函数,你就可以提出策略,即区域选择器,你可以使用它来实际学习胶水选择器。
所以你必须选择可以应用于其他特定区域的规则。所以我们在实际上三个应用上这样做,我的意思是,我们将讨论第三种方法。第一种是随机散射。你有一堆滴落物,每个都有不同的。这基本上是如何设置完成的。你有具有不同长度、不同资源需求以及不同到达时间的作业。A 是到达时间,T 是作业的长度,不同的颜色意味着你想要为每种类型使用多少资源。
所以如果他说这意味着你想要使用一点资源一,但很多资源二,但这里的作业三意味着你想要使用很多资源一,但只有很少的结果二。所以可能会有两种不同的调度。一种是所谓的这里调度二,这是基本的覆盖,你试图一个接一个地执行作业。好吧,所以从作业一开始,然后是作业二,然后是作业三。
因为作业三到达得较早,所以作业三会有很多减速时间。但实际上,我们可以通过同时并发执行作业二和作业三来更好地混合。因为这两个实际上具有互补的资源需求,所以它们可以同时执行。所以你基本上可以做到这一点,这实际上对应于不同的表示,我们基本上想要按摩这个工作表示,以便你知道或扔下时间最小化。
所以当你与不同的基线进行比较时,这包括像 Elice 早期 stroke 首先开始 off 首先和作为研究人员,以及甚至对于离线基线,对于由 Google 工具提供的基线,以及最短作业优先,但在离线设置中。所以通过离线我的意思是,我们实际上首先看到所有已经到达的未来作业,然后我们委托这些未来作业,我们要找到最佳调度。
所以结果发现,我们的方法实际上在所有情况下都具有最低的扔下时间,特别是当资源数量较大时,事情变得更加复杂,我们将看到我们的问题仪器像下限。我们还尝试比较不同的分布,所以如果作业调度表具有不同的分布会发生什么?Firaon PO,如果作业可能在结果分布方面具有统一的分布,可能具有一个从分布收入。
所以所有这些方法会发生什么?然后你会看到通常我们的方法仍然保持最低,但有一些例外,例如当 strokes 是均匀的时候,我们的项目实际上没有它们。这基本上意味着在事情有点均匀的情况下,也许我们真的不需要复杂的方法,我们只需要像简单的启发式方法。但是当情况变得复杂时,策略没有均匀,作业是动态的,那么在这种情况下,我们的方法实际上减轻了所有的减速。
我们还尝试了第二个应用,即表达式简化。在其中我们研究了大规模表达式。这是一个数学表达式,你想找到一个动作序列,以便它最终简化为一个非常简单的表达式。所以这里你从这里开始,然后一直走到一。这基本上意味着这个表达式总是真的,但如何找到这条路径是一个问题。所以我们基本上使用相同的想法,并尝试一次替换数学表达式的一个子树。
然后我们尝试迭代地执行此操作,我们能够表明我们的方法在平均表达式行减少方面。所以关于这个数字,它应该越高越好,我们的方法实际上高于许多其他方法,这包括启发式方法和称为 as eastery 的定理证明工具在不同情况下。我们还可以表明,我们还确保我们的方法能量概括到不同情况,例如,如果我们只训练像只有 20 个透镜的树。
所以我们实际上可以在表达式长度超过 100 时概括到不同情况。这实际上是一个很好的转移测试,表明我们的蛋白质选择。最后,我们还为 sense 5o 测试进行了任何实验。这基本上是一个非常著名的 NEP 难问题,因为任何 NP 问题都可以减少到它。所以在你的 sense 5o 测试中,你基本上有一个公式,这个公式基本上被称为 count 猜想范式。
你有一堆类,每个子句基本上是一个平均和基本的和所有的我们的 punch 文字。在这些交叉点之间,它们由 end 纠正。为了满意我认为更高的公式,你要确保每个交叉点都要满足,它必须是真的。但是找到使所有这些都正确的分配是非常困难的。所以我们实际上与神经基服务器进行了比较,这两篇论文是以前的工作,他们遵守基本估计被 I 接受。
去年虽然我们能够获得好的女人,与他们相比,在不同的变量中。基本上从像十个变量一直到 80 个变量。我们还与许多以前的作品进行了比较,这些作品也在 SATA 实验室上进行了评估,这是一个公共数据集,包含许多随机生成的 SAT 实例,我们的 Pumas Albert 好吧。
不过,我们必须承认,目前的技术距离商业化服务仍非常遥远。如果我们将之与工业界服务相比,后者并未使用任何深度学习或训练模型,仅依靠简单的启发式算法进行搜索,那么我们的表现仍远远落后。一个工业级服务可以在短短几分钟内解决包含数百万变量的实例,这中间仍存在巨大的差距。但我认为这是一个值得探索的互动领域,也许未来我们会看到基于强化学习的更好服务。
实际上,我们与这些服务进行了比较,发现差距依然巨大。有一些免费服务,比如MiniZinc(注:原文听译为mini set/glucose,实指MiniZinc或相关求解器),你可以下载它。但我认为这不可比,因为我亲自尝试过,用几分钟就能解决40万个变量的问题。这并不构成巨大的差距。这基本上是一项初步工作,表明似乎存在一些希望。如果我们能在这方面继续努力,未来可能会出现基于强化学习的优秀服务。
好的,这就是我的演讲。关于速度,我认为问题在于你不能永远使用它,它不能运行一个中等规模的实例。因为在这里,你基本上需要对树进行编码。我们将公式表示为图,然后计算图中的消息和特征。如果图是动态变化的,计算速度会非常慢,我们尚未尝试过这种情况,但也许那样也行,只是我们还没试过。
有人问关于AlphaGo的问题,这很有趣。我曾在180万年前问过这个问题,他们说他们无法将这种方法应用于AlphaGo,因为AlphaGo Black Axe(注:可能指AlphaGo Zero或特定版本)有一个巨大的劣势,这阻碍了训练。这基本上是关于AlphaGo的论坛讨论。Black Go(黑棋)方面,是否有一种方法可以控制这个数量?有一个叫“comb”的参数,基本上意味着你应该在Black Final Territory(黑棋最终领地)周围回退多少点。
我认为他们并没有展示是否尝试过这一点,这是真的。这可能是一个有趣的方向,因为你可以利用这种完美的对称性。他们说没有球,如果看起来像是纯粹的委员会(commission),你可以在Twitter上看到很多关于围棋的评论。有一组样本,基本上我们的模型会给你建议,并说明他们想使用哪些信息。人们对此给予赞扬,因为我们展示了表格,并发布了所有数据,尽管有很多问号。
很多人实际上都在使用它,这是另一个例子。去年在围棋比赛中,我们举办了一个小型活动,他们基本上试图让AI下围棋。每个AI都是独立的,孩子们互相竞争。很多人都在使用它。如果你查看韩国和日本的媒体,他们确实提到过这一点。我们不得不调整平衡,以确保当你对抗不同策略时,可能需要采样。例如,弓箭手对抗长枪兵时,长枪兵需要大约两倍的单位才能与之抗衡,以保持游戏平衡。你可以看到不同的策略,在每种策略下破解几千场不同的游戏,这很有趣。
有些人在评论中打字说“天哪”,因为当事情出错时,他们不知道该怎么办,这很疯狂。这表明了游戏中的参与度。