强化学习应用于组合优化问题
将算法设计为自动化,可以为解决困难的COP问题可以节省大量的金钱和时间,也许可以产生比人类设计的方法更好的解决方案,正如我们在AlphaGo的成就中看到的那样,这些成就击败了数千年的人类经验。
为什么优化很重要?
从数百万年前的人类开始,每一项技术创新和每一项改善我们生活的发明以及我们在地球上生存和繁荣的能力,都是由聪明人的狡猾思想设计出来的。从火到车轮,从电力到量子力学,我们对世界的理解和我们周围事物的复杂性已经增加到我们经常难以直观地掌握它们的程度。
如今,飞机,汽车,船舶,卫星,复杂结构等许多其他设施的设计者在很大程度上依赖于算法使其具有更好的能力,通常是人类根本无法实现的微妙方式。除了设计之外,优化在日常事务中起着至关重要的作用,例如网络路由(互联网和移动),物流,广告,社交网络甚至医学。在未来,随着我们的技术不断改进和复杂化,解决巨大规模的难题的能力可能会有更高的需求,并且需要在优化算法方面取得突破。
组合优化问题
从广义上讲,组合优化问题是涉及从有限的一组对象中找到'最佳'对象的问题。在这种情况下,'最佳'是通过给定的评估函数来测量的,该函数将对象映射到某个分数或成本,目标是找到值得最低成本的对象。
最实际有趣的组合优化问题也非常困难,因为由于问题大小的微小增加,集合中的对象数量增加得非常快,使得穷举搜索变得不切实际。
为了使事情更清楚,我们将专注于一个特定的问题,即着名的旅行商问题(TSP)。在这个问题上我们有N个城市,我们的销售员必须全部访问它们。然而,在城市之间旅行会产生一些费用,我们必须找到一个旅行,在旅行到所有城市并返回起始城市时最大限度地减少总累积成本。例如,下图显示了美国所有州所在城市的最佳旅游:
这个问题自然会出现在许多重要的应用中,例如计划,交付服务,制造,DNA测序和许多其他应用。寻找更好的旅行团队有时会产生严重的财务影响,促使科学界和企业投入大量精力来解决这些问题。
在为K城市建立TSP实例之旅的同时,我们在旅游建设过程的每个阶段都消除了一个城市,直到不再有城市为止。在第一阶段,我们有K个城市可以选择开始巡演,在第二阶段我们有K-1选项,然后是K-2选项等等。我们可以构建的可能的游览数量是我们在每个阶段的选项数量的乘积,因此这个问题的复杂性就像O(K!)。
对于小数字,这似乎并不那么糟糕。假设我们有5个城市问题,可能的旅行次数是5!= 120。但是对于7个城市,它增加到5040,对于10个城市已经是3628800,对于100个城市来说,它是高达9.332622e + 157,这比宇宙中的原子数多出许多个数量级。
在现实世界中出现的TSP的实际实例通常具有数千个城市,并且需要在大量文献中已经开发了数十年的高度复杂的搜索算法和启发式算法,以便在合理的时间内解决(可能是数小时)。
遗憾的是,在现实世界的应用程序中出现的许多COP(组合优化问题)具有独特的细微差别和约束,使我们无法仅使用最先进的解决方案解决TSP等已知问题,并要求我们开发针对该问题的方法和启发式方法。这个过程可能是漫长而艰巨的,并且可能需要领域专家的工作来检测特定问题的组合搜索空间中的某些结构。
由于近年来深度学习在许多领域取得了巨大成功,让机器学会如何自己解决问题的可能性听起来非常有希望。将算法设计为自动化,可以为解决困难的COP问题可以节省大量的金钱和时间,也许可以产生比人类设计的方法更好的解决方案,正如我们在AlphaGo的成就中看到的那样,这些成就击败了数千年的人类经验。
学习图形表示
在这个问题的一个早期尝试,是在2016年的一篇论文《学习基于图的组合优化算法》,作者训练了一种图形神经网络,称为structure2vec,以贪婪地构建几个硬COP的解决方案,并获得非常好的近似比率(生产成本与最优成本之间的比率) 。
基本思想是这样的:问题的状态可以表示为图形,神经网络构建解决方案。在解决方案构建过程的每次迭代中,我们的网络观察当前图形,并选择要添加到解决方案的节点,之后根据该选择更新图形,并且重复该过程直到获得完整的解决方案。
作者使用DQN算法训练他们的神经网络,并证明了学习模型能够推广到比训练更大的问题实例。他们的模型甚至可以很好地推广到1200个节点的实例,同时在大约100个节点的实例上进行训练,并且可以在12秒内生成解决方案,这些解决方案有时比商业解算器在1小时内找到的更好。他们的方法的一大缺点是他们使用'辅助'功能,以帮助神经网络找到更好的解决方案。这个辅助函数是人为设计的,并且特定于问题,这是我们想要避免的。
使用基于图形的状态表示非常有意义,因为许多COP可以通过这种方式非常自然地表达,如TSP图的示例中所示:
节点代表城市,边缘包含城市间距离。可以在没有边缘属性的情况下构建非常相似的图形(如果由于某种原因我们不假设距离的知识)。近年来,在图形上运行的神经网络模型的普及程度令人惊讶地增加,最显著的是在自然语言处理领域,Transformer风格模型已成为许多现状任务。
有许多优秀的文章详细解释了Transformer体系结构,因此我不会深入研究它,而是给出一个非常简短的概述。谷歌研究人员在一篇名为《Attention Is All You Need》的著名论文中引入了变换器(transformer)架构,并用于解决NLP中出现的序列问题。不同之处在于,与LSTM等递归神经网络不同,后者明确地输入一系列输入向量,变换器作为一组对象被输入,并且必须采取特殊手段来帮助它看到'序列'。变换器使用多个层,这些层由多头自注意子层和完全连接的子层组成。
与图形的关系在注意层中变得明显,注意层实际上是输入'节点'之间的一种消息传递机制。每个节点都观察其他节点并参与那些看起来更'有意义'的节点。这与中发生的过程非常相似,事实上,如果我们使用掩码来阻止节点将消息传递给不相邻的节点,我们将获得一个等效的过程。
学会解决没有人类知识的问题
在他们的论文《注意力机制学习解决路由问题》,作者解决了几个涉及在图表由代理的组合优化问题,包括我们现在熟悉的旅行商问题。他们将输入视为图形并将其提供给嵌入图形节点的修改后的Transformer体系结构,然后依次选择要添加到巡视的节点,直到构建完整的巡视。将输入作为图形处理是比给它一系列节点更'正确'的方法,因为它消除了对输入中给出城市的顺序的依赖性,只要它们的坐标不变。这意味着无论我们如何对城市进行置换,给定图形神经网络的输出都将保持不变,这与序列方法不同。
在本文提出的体系结构中,图形由变换器样式编码器嵌入,该编码器为所有节点生成嵌入,并为整个图形生成单个嵌入向量。
为了产生解决方案,单独的解码器网络每次赋予特殊上下文向量,即由图嵌入和那些最后和第一城市,和未访问城市的嵌入的,并且它在未访问的输出概率分布城市,其被抽样以产生下一个要访问的城市。
解码器顺序产生城市直到游览完成,然后根据游览的长度给出奖励。
作者使用称为REINFORCE的强化学习算法训练他们的模型,该算法是基于策略梯度的算法。其版本的伪代码可以在这里看到:
他们使用转出网络确定性地评估实例的难度,并使用策略网络的参数定期更新转出网络。使用这种方法,作者在几个问题上取得了优异的成果,超越了我在前面几节中提到的其他方法。但是,他们仍然在小型实例上训练和评估他们的方法,最多有100个节点。虽然这些结果很有希望,但与现实世界相比,这种情况微不足道。
扩展到非常大的问题
最近《通过深度强化学习进行大图的启发式学习》(《Learning Heuristics Over Large Graphs Via Deep Reinforcement Learning》)一文,朝着真实世界大小的问题迈出了重要的一步。在本文中,作者训练了一个图形卷积网络来解决大型问题,如最小顶点覆盖(MVC)和最大覆盖问题(MCP)。他们使用流行的贪婪算法来训练神经网络嵌入图形并预测下一个节点在每个阶段进行选择,然后使用DQN算法进一步训练它。
他们在具有数百万个节点的图表上评估了他们的方法,并且获得了比当前标准算法更好和更快的结果。虽然他们确实利用手工的启发式方法来帮助训练他们的模型,但未来的工作可能会消除这种限制。
总的来说,我认为在大量搜索空间问题中寻找结构的探索是强化学习的一个重要而实用的研究方向。强化学习的许多批评者声称,到目前为止,它只用于解决游戏和简单的控制问题,并且将其转移到现实世界的问题仍然很遥远。虽然这些说法可能是正确的,但我认为我在本文中概述的方法代表了非常真实的用途,可以在近期内为强化学习的应用带来好处。