经典论文回顾——Pointer Networks

​​Pointer Networks

简言​​

Pointer Network 于2015年由Oriol Vinyals, Meire Fortunato, Navdeep Jaitly 三人提出,目前Google Scholar引用量3.5k+。

本文将RNN应用于三类组合优化问题:

  • Convex Hull
  • Delaunay Triangulation
  • Travelling Salesman Problem (TSP)

因此对于使用机器学习/深度学习解决组合优化问题具有开创意义。

引文

Motivation?
本文的前置工作为Recurrent Neural Networks(RNN),但是由于其输入与输出大小 固定,即使改进后仍需先验地固定输出字典大小,不能直接应用于组合问题 (输出字典大小依赖于输入序列长度),因此需要提出新的方法。

可以解决什么问题?
组合优化问题,本文中重点解决了计算平面凸包Delaunay三角剖分平面旅行商问题。

模型

Seq2Seq Model

Sequence-to-Sequence Model的简单介绍?
Sequence-to-Sequence Model又称 Encoder-Decoder Model,是一种重要的RNN模型。

Seq2Seq模型的整体输入输出是什么?
输入:由 nnn 个向量组成的 向量序列 P={P1,…,Pn}\mathcal{P}=\{P_{1},\ldots,P_{n}\}P={P1,,Pn}
输出:由 m(P)m(\mathcal{P})m(P) 个向量组成的 索引序列 CP={C1,…,Cm(P)}\mathcal{C}^\mathcal{P}=\{C_{1},\ldots,C_{m(\mathcal{P})}\}CP={C1,,Cm(P)},每一项 1≤Ci≤n1\leq C_i \leq n1Cin 表示 P\mathcal{P}P 中某向量的索引。

举例: 在凸包问题中的一个示例是,输入点集P={P1,⋯ ,P10}\mathcal{P}=\{P_1,\cdots, P_{10}\}P={P1,,P10},输出序列CP={⇒,2,4,3,5,6,7,2,⇐}\mathcal{C}^\mathcal{P}=\{\Rightarrow, 2, 4, 3, 5, 6, 7, 2, \Leftarrow\}CP={,2,4,3,5,6,7,2,}表示其凸包。

Seq2Seq模型训练目标是什么?
在训练集(P,CP)(\mathcal{P},\mathcal{C}^\mathcal{P})(P,CP)最大化输出正确序列的条件概率p(CP∣P;θ)p(\mathcal{C}^\mathcal{P}|\mathcal{P};\theta)p(CPP;θ)
p(CP∣P;θ)=∏i=1m(P)p(Ci∣C1,…,Ci−1,P;θ). p(\mathcal{C}^\mathcal{P}|\mathcal{P};\theta)=\prod_{i=1}^{m(\mathcal{P})}p(C_i|C_1,\ldots,C_{i-1},\mathcal{P};\theta). p(CPP;θ)=i=1m(P)p(CiC1,,Ci1,P;θ).
从而得到最优训练参数θ∗\theta^*θ
θ∗=arg⁡max⁡θ∑P,CPlog⁡p(CP∣P;θ), \theta^*=\arg\max_\theta\sum_{\mathcal{P},\mathcal{C}^\mathcal{P}}\log p(\mathcal{C}^\mathcal{P}|\mathcal{P};\theta), θ=argθmaxP,CPlogp(CPP;θ),

Seq2Seq模型的结构
结构:Encoder(为RNN)⟶\longrightarrowDecoder(为RNN,又称generative RNN)

流程:Encoder中第iii时间步输入PiP_iPi直至输入序列结束,此时输入特殊信号"⇒""\Rightarrow""",进入Decoder,
直至遇到特殊信号"⇐""\Leftarrow"""表明输出序列结束。

值得注意的点

  1. 无统计独立性假设
    不假设输入与输出间存在独立性,而是通过RNN捕捉输入输出间的关联性。
  2. 束流搜索
    由于搜索空间维数是 输入空间的组合数级别}而难以找到最优序列 C^P\hat{\mathcal{C}}^\mathcal{P}C^P,因此采样 beamer search,
    即给定束流大小情况下进行搜索。
  3. 输出空间固定
    由于输出从输入 P\mathcal{P}P中选择,因此输出字典大小为∣P∣=n|\mathcal{P}|=nP=n
    注意这里并不意味着输出维度固定,而是指每一个 1≤Ci≤n1\leq C_i\leq n1Cin

Seq2Seq Model的缺陷
由于输出字典大小与输入空间维度对应,因此对于每一个n=∣P∣n=|\mathcal{P}|n=P,训练的模型记为 Fn\mathcal{F}_nFn
其实际为维输入空间 MnM^nMn 到其组合数级别空间 NnN^{n}Nn 的映射,依赖于 nnn。因此对于不同的nnn都需要单独训练。

Content Based Input Attention

原本的Seq2Seq模型有什么问题?/注意力机制的motivation?
Seq2Seq模型的输出字典大小固定,故限制了Decoder可处理的信息量和计算量。

Content Based Input Attention的基本思想?
记encoder和decoder的隐藏状态分别为(e1,⋯ ,en)(e_1,\cdots,e_n)(e1,,en)(d1,⋯ ,dm(P))(d_1,\cdots,d_{m(\mathcal{P})})(d1,,dm(P))。\

  1. 在decoder中的第iii时间步,计算注意力向量:
    第j个输入的注意力权重: uji=vTtanh⁡(W1ej+W2di)j=1,…,n归一化后的注意力权重: aji=softmax(uji)j=1,…,n=exp⁡(uji)∑k=1nexp⁡(uki)第i个输出中的加权注意力: di′=∑j=1najiej \begin{aligned} \text{第$j$个输入的注意力权重}:\ &u_{j}^{i}&=&\quad {v}^T\tanh({W_1}e_j+\textcolor{mint}{W_2}d_i)\quad j=1,\ldots,n\\ \text{归一化后的注意力权重}:\ &a_{j}^{i}&=&\quad\mathrm{softmax}(u_j^i)\quad j=1,\ldots,n=\quad\frac{\exp(u_j^i)}{\sum_{k=1}^n\exp(u_k^i)}\\ \text{第$i$个输出中的加权注意力}:\ &d_{i}^{\prime}&=&\quad\sum_{j=1}^na_j^ie_j \end{aligned} j个输入的注意力权重: 归一化后的注意力权重: i个输出中的加权注意力: ujiajidi===vTtanh(W1ej+W2di)j=1,,nsoftmax(uji)j=1,,n=k=1nexp(uki)exp(uji)j=1najiej
    其中 v,W1,W2{v}, {W_1}, {W_2}v,W1,W2 为可训练参数,若encoder与decoder隐藏维数相同(例如本文均为512),则 vvv 为向量,W1,W2W_1, W_2W1,W2 为方阵。

  2. di′d_i^{\prime}didid_idi串联拼接作为decoder隐藏状态,依此预测并反馈至递归模型的下一时间步。

注意到此时Content Based Input Attention对于每一输出时间步都要计算 nnn 次,故计算复杂度为 O(n)O(n)O(n)

在convex hull problem中,其表现大幅高于Seq2Seq模型,但仍然不能解决输出维度依赖于输入维度问题。

Ptr-Net

Ptr-Net模型的motivation?
在Seq2Seq模型中 p(Ci∣C1,…,Ci−1,P)p(C_i|C_1,\ldots,C_{i-1},\mathcal{P})p(CiC1,,Ci1,P) 直接使用softmax计算,无法解决输出字典依赖于输入维度的问题。

Ptr-Net的基本思想/改进点?
使用注意力机制计算条件概率:
uji=vTtanh⁡(W1ej+W2di)j=1,…,np(Ci∣C1,…,Ci−1,P)=softmax(ui) \begin{aligned} &u_j^i= v^T\tanh(W_1e_j+W_2d_i)\quad j=1,\ldots,n\\ &p(C_i|C_1,\ldots,C_{i-1},\mathcal{P})=\mathrm{softmax}(u^i) \end{aligned} uji=vTtanh(W1ej+W2di)j=1,,np(CiC1,,Ci1,P)=softmax(ui)
在decoder中不融合eje_jej以提供额外信息而直接解码得到输出,
而是将 ujiu_j^iuji 作为时间ttt时对输入的指针,指向某个输入。
注意为实现条件概率,此处直接复制 PCi−1P_{C_{i-1}}PCi1 作为Decoder下一步的输入。

注意Ptr-Net模型针对输出是离散且与输入相对应的问题,并且模型生成的输出并不严格遵循将输出映射回输入的约束,因此长序列预测会模糊。

数据集结构

训练数据
输入:平面点集 P={P1,…,Pn}\mathcal{P}=\{P_{1},\ldots,P_{n}\}P={P1,,Pn},其中Pj=(xj,yj)P_j=(x_j,y_j)Pj=(xj,yj) 是点的笛卡尔坐标。
本文采取在 [0,1]×[0,1][0,1]\times[0,1][0,1]×[0,1]中均匀采样。
输出CP={C1,…,Cm(P)}\mathcal{C}^{\mathcal{P}}=\{C_1,\ldots,C_{m(\mathcal{P})}\}CP={C1,,Cm(P)},是包含起始/结束特殊标记的与 P\mathcal{P}P 相关的解(指针)序列。

Convex Hull

介绍
Convex Hull 问题为本文测试的baseline,该问题是指寻找有限点的凸包,其计算复杂度为 O(nlog⁡n)O(n\log n)O(nlogn)

举例说明Ptr-Net解决Convex Hull问题的过程?
输入 P={P1,…,P10}\mathcal{P}=\{P_1,\ldots,P_{10}\}P={P1,,P10}代表点
输出 CP={⇒,2,4,3,5,6,7,2,⇐}\mathcal{C}^{\mathcal{P}}=\{\Rightarrow,2,4,3,5,6,7,2,\Leftarrow\}CP={,2,4,3,5,6,7,2,}

Delaunay Triangulation

介绍
Delaunay Triangulation 是指平面三角剖分问题:对平面上的点集进行剖分,使得每个三角形的外接圆内部不包含任何点。其计算复杂度为 O(nlog⁡n)O(n\log n)O(nlogn),其中 nnn 为平面中点的个数。

举例说明Ptr-Net解决Delaunay Triangulation问题的过程?
输入 P={P1,…,P5}\mathcal{P}=\{P_1,\ldots,P_{5}\}P={P1,,P5}
输出 CP={⇒,(1,2,4),(1,4,5),(1,3,5),(1,2,3),⇐}\mathcal{C}^{\mathcal{P}}=\{\Rightarrow,(1,2,4),(1,4,5),(1,3,5),(1,2,3),\Leftarrow\}CP={,(1,2,4),(1,4,5),(1,3,5),(1,2,3),},输出表示三角形的三个顶点的指针。

由于三角形指针对内部实际上并无顺序可言,但是实际结构表明未排序(如此处由小至大)训练效果不佳。

Travelling Salesman Problem (TSP)

介绍
此处针对平面对称TSP问题
给定一个城市列表,希望找到一条最短的可能路线能够恰好访问每个城市一次并返回起点。此外假设两城市间往返距离相同。

这是一个NP-hard问题。传统求解算法有Held-Karp算法(O(2nn2)\mathcal{O}(2^nn^2)O(2nn2)),Christofides算法(O(n2∼n3)\mathcal{O}(n^2\sim n^3)O(n2n3))等。本文最高的 nnn 使用的是 n=20n=20n=20,同时对比了上述方法与Ptr-Net。

举例说明Ptr-Net解决TSP问题的过程?
输入 P={P1,…,P20}\mathcal{P}=\{P_1,\ldots,P_{20}\}P={P1,,P20} 代表城市
输出 CP={⇒,1,4,⋯ ,20,⇐}\mathcal{C}^{\mathcal{P}}=\{\Rightarrow,1,4,\cdots,20,\Leftarrow\}CP={,1,4,,20,} 代表访问顺序。

本文最高的 nnn 使用的是 n=20n=20n=20,同时对比了上述方法与Ptr-Net。

### Pointer Graph Networks 模型架构 Pointer Graph Networks(PGN)是一种专门用于解决组合优化问题的深度学习模型,特别是在处理图结构数据时表现出色。PGN 结合了图神经网络(GNN)和指针网络(Pointer Network)的优点,通过图嵌入层和注意力机制来捕捉节点之间的复杂关系,并生成最优解。 #### 模型架构 1. **图嵌入层**:PGN 使用图嵌入层来编码输入图的结构信息。该层将每个节点的特征向量映射到一个低维空间中,使得节点之间的相似性在新的空间中得以保留。这一过程可以通过图卷积网络(GCN)或其他图嵌入技术实现。 2. **注意力机制**:PGN 引入了注意力机制来动态地选择下一个要访问的节点。具体来说,模型会根据当前节点的状态和其他节点的特征计算出一个概率分布,表示各个节点被选中的可能性。这个概率分布是通过对节点特征进行加权求和得到的,权重由注意力机制决定。 3. **递归更新**:PGN 采用递归的方式逐步构建解决方案。每一步中,模型会选择一个节点加入当前的路径,并更新所有节点的状态以反映最新的路径信息。这种递归更新机制允许模型在每一步都考虑全局信息,从而生成更优的解。 4. **损失函数**:PGN 的训练通常使用强化学习框架,其中奖励函数定义为解的质量(例如旅行商问题中的总路径长度)。模型的目标是最小化期望损失,即最大化平均奖励。 #### 相关论文 - **Combinatorial Optimization by Graph Pointer Networks and Hierarchical Reinforcement Learning**:这篇论文提出了图指针网络(GPN)框架,该框架通过使用图嵌入层有效地解决了大规模TSP问题。此外,训练分层RL模型可以使方法进一步解决受约束的组合优化问题,如带有时间窗的TSP [^3]。 #### 实现方法 以下是一个简单的 PGN 实现示例,主要展示了如何使用 PyTorch 和图嵌入技术来构建模型: ```python import torch import torch.nn as nn import torch.nn.functional as F class GraphEmbeddingLayer(nn.Module): def __init__(self, input_dim, hidden_dim): super(GraphEmbeddingLayer, self).__init__() self.linear = nn.Linear(input_dim, hidden_dim) def forward(self, features, adj): # 图卷积操作 support = self.linear(features) output = torch.spmm(adj, support) return output class AttentionMechanism(nn.Module): def __init__(self, hidden_dim): super(AttentionMechanism, self).__init__() self.query = nn.Linear(hidden_dim, hidden_dim) self.key = nn.Linear(hidden_dim, hidden_dim) self.value = nn.Linear(hidden_dim, hidden_dim) def forward(self, node_features): Q = self.query(node_features) K = self.key(node_features) V = self.value(node_features) attn_weights = F.softmax(torch.matmul(Q, K.transpose(-2, -1)) / (K.size(-1) ** 0.5), dim=-1) output = torch.matmul(attn_weights, V) return output class PointerGraphNetwork(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(PointerGraphNetwork, self).__init__() self.graph_embedding = GraphEmbeddingLayer(input_dim, hidden_dim) self.attention = AttentionMechanism(hidden_dim) self.output_layer = nn.Linear(hidden_dim, output_dim) def forward(self, features, adj): embedded_features = F.relu(self.graph_embedding(features, adj)) attended_features = self.attention(embedded_features) logits = self.output_layer(attended_features) return logits ``` #### 示例应用 - **旅行商问题(TSP)**:PGN 在 TSP 问题上表现尤为出色,能够有效处理大规模实例并生成接近最优的路径。 - **带时间窗的TSP**:通过引入分层强化学习框架,PGN 还可以扩展到带时间窗的 TSP 问题,解决更具挑战性的组合优化任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值