【ML4CO基础】Attention, learn to solve routing problems(Wouter Kool, 2018)

Attention, learn to solve routing problems!

Paper: Kool W, Van Hoof H, Welling M. Attention, learn to solve routing problems![J]. arXiv preprint arXiv:1803.08475, 2018.
Google Scholar被引次数 : 538 (截止到2022年7月12日)
链接Attention, learn to solve routing problems!
(Published as a conference paper at ICLR 2019)
ICLR: International Conference on Learning Representations

本文工作

由于可以节省昂贵的开发费用,最近提出的一种学习启发式方法来解决组合优化问题的方法受到了研究者们的广泛关注。 然而,要推动这一想法走向实际的工作,我们需要更好的模型和更好的训练方式。 本文在两个方向上做出了贡献:

  • 提出了一个基于注意力层的模型,它比指针网络(【MOCO基础】Pointer Networks原理及代码实现分析(Oriol Vinyals, 2015))表现更好,本文展现了如何使用REINFORCE(基于deterministic greedy rollout的easy baseline)来训练此模型,我们发现这方法比使用value function更有效。
  • 对于旅行商问题(TSP),本文对最近学习的启发式算法进行了显著的改进,对于多达100个节点的问题,我们得到了接近最优的结果。 在相同的超参数下,本文为车辆路径问题(VRP)的两个变体,分别是定向问题(Orienteering Problem, OP)以及(一个随机变量)奖励收集TSP(Prize Collecting TSP, PCTSP)学习了强大的启发式方法,其结果超过了大部分baseline,得到了接近高度优化和专门算法的结果。


1. Introduction

如上图所示,想象自己去参加一个科学会议,该领域很受欢迎,您当然不想错过任何东西。你选择了几张你想参观的海报,自然要回到你现在所在的地方:咖啡角。您应该按什么顺序访问海报,以尽量减少您四处走动的时间?这就是旅行科学家问题(TSP),该问题等同于旅行推销员问题(缩写也是 TSP),这问题是一个典型的NP-Hard问题。

我们当然希望训练能够做出决策以解决实际问题的模型,这些模型必须学会从大量组合的潜在解决方案中为问题选择好的解决方案。组合优化问题的解决方法可以分为精确方法(保证找到最佳解决方案)以及启发式方法(权衡计算成本的最优性)。尽管精确方法可以在其内部使用启发式优化方法,反之亦然。启发式通常以规则的形式表达,可以解释为制定决策的策略。

那么为什么这些策略不可以使用 DNN 进行参数化呢?答案是可以的

为了推动“机器学习解决组合优化问题”的 想法实施,肯定需要更好的模型和更好的训练方式。因此,本文使用基于Attention的模型,并建议使用带有简单但有效的greedy rollout baseline的强化学习方式来训练该模型

论文的方法并不以优于非学习的、专门的 TSP 算法为目的,相反,我们通过一组超参数展示了我们的方法在合理大小的多个(路由)问题上的灵活性,其目的是通过学习强大的启发式方法,以便来解决广泛的不同实际问题的情况

2. Attention Model

基于之前讲过的Pointer Networks模型,研究者们又做了大量的尝试,比如将Ptr-Nets与强化学习相结合(论文传送门:Neural combinatorial optimization with reinforcement learning),还有研究者利用图神经网络的方式给出可行解等等。

首先从构建输入来说:对一每一个问题实例s来说,s内包括n个结点(nodes,第i个结点的特征 x i x_{i} xi,对于TSP,是坐标,然后 x i x_{i} xi之间是全连通的。这一个实例s就可以当做一个图形(Graph)作为输入。也就是如下面这样,直接把这幅图当做输入,只不过这10个结点的信息是以坐标为特征的。

在这里插入图片描述

将图形作为输入比将节点作为序列输入更好,因为它消除了对输入中给出城市的顺序的依赖性,只要它们的图形坐标位置不变。也就是说,无论我们如何对节点进行排列,只要给定的图不变,那么输出就不会变,这是与序列方法相比的优势所在。

本文主要以Transformer中的Self-Attention为框架基础搭建了一种新的模型框架,从而实现对TSP等优化问题的可行解输出。对于TSP,本文定义 x i x_{i} xi为节点 i i i的二维坐标。基于Encoder- Decoder框架,本文定义了一个随机策略 p ( π ∣ s ) p(\pi |s) p(πs),以便在给定问题实例s的情况下选择解决方案 π \pi π

  • 编码器产生所有输入节点的embedding;
  • 解码器产生输入节点的序列 π \pi π,一次一个节点,将编码器Embedding和特定问题的掩码mask和上下文作为输入。

对于 TSP,当一个部分tour已经构建完成时,它不能被改变,剩下的问题就是找到一条从已构建的最后一个节点,通过所有未访问的节点,并到第一个节点(回路)的路径。为了知道第一个和最后一个节点,解码器上下文包括(在graph embedding旁边)第一个和最后一个节点的Embedding。解码器观察Mask以便了解哪些节点已被访问过,从而在接下来的输出过程中过滤掉。

2.1 Encoder

在这里插入图片描述
在这里插入图片描述

和Transformer所不同的是,本文并没有采用位置编码,输入节点并无次序之分

Encoder中的Embeddings 使用N个Attention层更新,每个Attention层由两个子层组成:多头注意力(multi-head attention, MHA)和节点前馈(Feed Forward, FF)子层组成。

从输入 x i x_{i} xi维数为 d x d_{x} dx,特别地,在TSP中, d x d_{x} dx=2, d h d_{h} dh维度(=128)的node embedding通过一个已学习的linear projection(线性投影)得到:
h i ( 0 ) = W x x i + b x h_{i}^{(0)}=W^{x}x_{i}+b^{x} hi(0)=Wxxi+bx

我们用 h i ( ℓ ) h_{i}^{(\ell) } hi()表示 ℓ ∈ { 1 , . . , n } \ell \in \{1,..,n\} {1,..,n}产生的node embeddings。 编码器计算输入图的聚合嵌入 h ˉ ( N ) \bar{h}^{(N)} hˉ(N)作为最终的node embedding, h ˉ ( N ) \bar{h}^{(N)} hˉ(N) h i ( N ) h_{i}^{(N) } hi(N)的平均值

节点嵌入 h i ( N ) h_{i}^{(N) } hi(N)和图嵌入(graph embedding) h ˉ ( N ) \bar{h}^{(N)} hˉ(N)都用作Decoder的输入。

每一个子层(MHA以及FF)都添加了一个残差连接以及batch normalization(BN),MHA继续采用8个头,并且每个维数为128/8=16,FF也采用ReLu激活函数以及512维的隐藏层,这和Transformer结构并没有什么不同,在此不多介绍。

2.2 Decoder

解码过程Decoding是按顺序进行的,在时间步t∈{1,…n},根据来自Encoder的 embeddings,Decoder输出方案 π t \pi_{t} πt,并且在 t ′ < t t'<t t<t处生成输出解决方案 π t ′ \pi_{t'} πt

在解码过程中,我们用一个特殊的上下文节点( C C C)来表示解码上下文(Decoding context)。 Decoder在Encoder的顶部计算一个Attention(子)层,在解码过程的每一步中,计算所有节点之间的N×N的注意力是十分不划算的,因此,为了提升其效率,只将message发送到上下文节点(context node)解码器上下文包括(在graph embedding旁边)第一个和最后一个节点的Embedding。最终的概率使用单头注意力机制(single-head attention mechanism)计算最终概率。与编码器中每个节点都与其他所有节点进行信息交互不同的是,每一步解码只将编码器中计算得到的各节点嵌入信息发送到综合当前已有信息的Context node embedding中

在这里插入图片描述

对于TSP问题, 解码器将图嵌入 h ˉ ( N ) \bar{h}^{(N)} hˉ(N)(图中表示为 h ( g ) ( N ) {h}_{(g)}^{(N)} h(g)(N))和节点嵌入 h i ( N ) h_{i}^{(N) } hi(N)作为输入。

在每一个时间步 t t t中,Context node embedding h ( c ) N h_{(c)}^{N} h(c)N(左上角那三个节点)包括图嵌入和已得到tour的第一个和最后一个(先前输出的)节点的嵌入,如果t=1,则使用学习到的占位符。 已经被访问的节点被masked。

以上图为例,输出结果为 π \pi π=(3,1,2,4):

Context node embedding:第一次的Decoder输出 h 3 N h_{3}^{N} h3N会从第二次开始一直被放入其中,特别地,在第二次, h 3 N h_{3}^{N} h3N被放入两次(因为第一个和已有的最后一个都是 h 3 N h_{3}^{N} h3N),t=1时,本文采用可学习的维度为 d h d_{h} dh v l v^{l} vl以及 v f v^{f} vf。需要注意的是, q c q_{c} qc我们只计算context node—— h ( c ) N h_{(c)}^{N} h(c)N的单个查询。
在这里插入图片描述
概率计算公式:
在这里插入图片描述
然后对上面公式进行softmax计算,以及计算输出向量 h i ′ h_{i}^{'} hi,也就是后来的 h ( c ) N + 1 h_{(c)}^{N+1} h(c)N+1 :
在这里插入图片描述
在这里插入图片描述

注意:

  • q ( c ) q_{(c)} q(c)为共享参数,且单个解码输出过程不变化,只计算一次。
  • h ( c ) ( N ) h_{(c)}^{(N)} h(c)(N)为每一个Decoder初始的context node embedding,包含三部分,分别是graph embedding、已得到tour的第一个和最后一个(先前输出的)节点的嵌入,而 h ( c ) ( N + 1 ) h_{(c)}^{(N+1)} h(c)(N+1)是一个通过MHA得到的(batch_size,1,embedding_dim)的网络层。
  • Decoder中不使用残差、BN以及前馈计算(This mechanism is similar to our encoder, but does not use skip-connections, batch normalization or the feed-forward sublayer for maximal efficiency.)。

城市节点概率计算:

为了计算公式1中的输出概率 p θ ( π t ∣ s , π 1 : t − 1 ) p_θ(π_t|s, π_{1:t-1}) pθ(πts,π1:t1),我们添加一个具有单个注意头(single-head attention mechanism)的最后解码器层,头数M=1,所以 d k d_k dk= d h d_h dh=128。
在这里插入图片描述
添加tanh,是为了让结果在[-C,C]之间。然后再通过Softmax函数计算输出概率:
在这里插入图片描述

3. Reinforce with greedy rollout baseline

通过Attention Model,即给定一个实例S,定义了一个概率分布 p θ ( π ∣ s ) p_θ(π|s) pθ(πs),从这个概率分布中取样,我们可以得到一个解(tour) π ∣ s π|s πs。 为了训练我们的模型,我们定义了损失函数,也就是所花费成本L(π)(TSP的行程长度)的期望:
在这里插入图片描述
我们通过梯度下降来优化此公式,基线为 b ( s ) b(s) b(s),所以损失函数就是现在网络生成的策略的总路程长(在TSP问题里是总路程)L(π)和b(s)的里程差值,可以理解为当前策略和基线策略的差距:

在这里插入图片描述
由于传统的采样方法为随机采样,可能会导致其方差变大,不利于梯度更新,baseline b ( s ) b(s) b(s)可以减少梯度的方差,从而提高学习速度。

类似于自我批评训练的方式使用一个rollout baseline,但定期更新baseline policy。在本文中, b ( s ) b(s) b(s)是由开始执行到需优化时的最好模型的deterministic greedy rollout (deterministic greedy rollout of the policy defined by the best model so far)的解决方案的所花费成本。

L ( π ) L(\pi) L(π)用来评估模型 π \pi π的好坏。实例s的难度可以(平均)通过应用于它的算法性能来估计。 这是基于一个假设:(平均而言)实例越难,算法成本越高

因此,我们通过模型在训练过程中使用的算法(rolling out)来构建baseline。为了减小方差,我们通过贪婪算法,选择概率最大的操作来迫使其结果是确定性(deterministic)的

因为模型在训练中会发生变化,为稳定baseline,本文效仿了DQN中的Q- network,每个epoch结束后,当前策略会与baseline策略比较,通过在10000个独立的评估实例s上的表现,只有提升显著(if the improvement is significant according to a paired t-test (α = 5%))才会替换baseline参数,并且如果baseline更新了,那么将采样新的评估实例,以防止过拟合
在这里插入图片描述
如上图所示,如果采样解π优于greedy rollout,则函数 L ( π ) − b ( s ) < 0 L(π)-b(s)<0 L(π)b(s)<0,从而导致该操作得到加强,反之亦然。 通过这种方式,模型一直在和当前最优模型做比较,通过训练提升自己的表现,算法如下:

在这里插入图片描述

  • SampleRollout表示对该模型使用按节点选择的概率采样的策略得到解的神经网络(Encoder-Decoder);
  • GreedyRollout表示对该模型使用选取概率最大的的节点操作策略得到解的神经网络(每一个batch_size的最佳操作);
  • OneSidedPairedTTest表示对当前SampleRollout和GreedyRollout的解做单侧配对t检验(α=5%),如果当前SampleRollout的解效果在该t检验中要显著好于GreedyRollout的解效果,那么就将GreedyRollout的网络参数更新为当前SampleRollout的网络参数。

本模型分别在以下问题中进行实验:
在这里插入图片描述

  • TSP;
  • VRP(CVRP装箱限制、SDVRP货物可分批运送);
  • Orienteering Problem(OP):每个节点都有一个相关联的奖品,目标是构建一个单一的游览(从仓库开始和结束),在短于最大(给定)长度的情况下最大化访问节点的奖品总和;
  • Prize Collecting TSP (PCTSP):每个节点不仅有一个相关的奖品,而且有一个相关的惩罚。 目标是收集至少一个最小的总奖品,同时最小化总游览长度加上未参观节点的罚款总和;
  • Stochastic PCTSP (SPCTSP): 在SPCTSP中,预期的节点奖品是预先知道的,但真正收集的奖品只有在访问时才知道。由于模型一次只构造一个节点,所以我们只需要使用真实的奖品来计算剩余的奖品约束。 相比之下,任何选择固定旅游的算法都可能无法满足奖品约束,因此算法必须是自适应的。

至于实验的参数设定以及流程,我在这就不在讲了,本文的源码已经公开,GitHub地址:https://github.com/wouterkool/attention-learn-to-route

篇幅有限,在下一篇文章中,我将会对源码做一个详细的分析。

4. Attention model vs. Ptr-Nets & different baselines

在这里插入图片描述
上图比较了在TSP20中,注意力模型(AM)和我们的指针网络(PN)在训练期间的性能。 我们使用大小为10000的贪婪解码验证集,并与使用exponential(β=0.8)和critic baseline进行比较。

这清楚地说明了我们所获得的改进是如何由AM和Rollout基线共同作用的结果:AM在使用任何基线时都优于PN,而Rollout baseline改善了AM和PN的质量和收敛速度。

以CVRP为例,结果对比如下表:
在这里插入图片描述

该实验将所有点的欧式空间坐标都归一化到区间(0,1)之间,表中的n表示样例中节点的总数目(分别对20、50以及100个节点的情况做了对比实验),obj.表示得到解的平均路径总长度,Gap表示其与最优解的差距百分比,Time表示生成解的平均时间。

表中的Gurobi和LKH3是目前求解路径规划问题的公认较好的最优解和次优解的求解器,RL是论文"Reinforcement learning for solving the vehicle routing problem"中提出的改进指针网络的方法,OR Tools是论文"Neural combinatorial optimization with reinforcement learning"的实验中用到求解工具。


总结

与以往的工作相比,本文采用Attention代替RNN(LSTMs),引入节点输入顺序的不变性,提高了学习效率。 此外,为提高计算效率,使得并行化成为可能,MHA可以被看作是一种消息传递算法,它允许节点在不同的信道上传递相关信息,使得来自编码器的节点嵌入可以学习在图的上下文中包括关于节点的有价值的信息。 在决策与图中的节点直接相关的设置中,这些信息非常重要。 作为一种基于图的方法,我们的模型增加了scaling的潜力(与LSTMs相比),因为它可以应用在稀疏图上并在局部操作。

可以看出,这种完全端到端求解的深度强化学习方法相比LKH3启发式搜索方法最大的优势在于端到端神经网络的求解速度快(尤其在使用greedy策略时);而相比同类型的完全端到端深度强化学习方法,本文使用的基于transformer的多头Attention模型具有更好地传递VRP中节点与节点之间信息的作用,它相比非多头注意力的embedding结合LSTM的RL模型具有提升求解质量的效果。现如今AM已经成为组合优化问题中一个常用的baseline,作为其改进程度的量化。

参考

  1. https://cloud.tencent.com/developer/article/1621109
  2. https://blog.csdn.net/ldy8665/article/details/93360588
  3. https://zhuanlan.zhihu.com/p/64957207
  4. https://blog.csdn.net/ldy8665/article/details/93652881?spm=1001.2014.3001.5502
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

striving长亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值