简言
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模型的整体输入输出是什么?
输入:由
n
n
n 个向量组成的 向量序列
P
=
{
P
1
,
…
,
P
n
}
\mathcal{P}=\{P_{1},\ldots,P_{n}\}
P={P1,…,Pn}
输出:由
m
(
P
)
m(\mathcal{P})
m(P) 个向量组成的 索引序列
C
P
=
{
C
1
,
…
,
C
m
(
P
)
}
\mathcal{C}^\mathcal{P}=\{C_{1},\ldots,C_{m(\mathcal{P})}\}
CP={C1,…,Cm(P)},每一项
1
≤
C
i
≤
n
1\leq C_i \leq n
1≤Ci≤n 表示
P
\mathcal{P}
P 中某向量的索引。
举例:
在凸包问题中的一个示例是,输入点集
P
=
{
P
1
,
⋯
,
P
10
}
\mathcal{P}=\{P_1,\cdots, P_{10}\}
P={P1,⋯,P10},输出序列
C
P
=
{
⇒
,
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
,
C
P
)
(\mathcal{P},\mathcal{C}^\mathcal{P})
(P,CP)中最大化输出正确序列的条件概率
p
(
C
P
∣
P
;
θ
)
p(\mathcal{C}^\mathcal{P}|\mathcal{P};\theta)
p(CP∣P;θ):
p
(
C
P
∣
P
;
θ
)
=
∏
i
=
1
m
(
P
)
p
(
C
i
∣
C
1
,
…
,
C
i
−
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(CP∣P;θ)=i=1∏m(P)p(Ci∣C1,…,Ci−1,P;θ).
从而得到最优训练参数
θ
∗
\theta^*
θ∗:
θ
∗
=
arg
max
θ
∑
P
,
C
P
log
p
(
C
P
∣
P
;
θ
)
,
\theta^*=\arg\max_\theta\sum_{\mathcal{P},\mathcal{C}^\mathcal{P}}\log p(\mathcal{C}^\mathcal{P}|\mathcal{P};\theta),
θ∗=argθmaxP,CP∑logp(CP∣P;θ),
Seq2Seq模型的结构
结构:Encoder(为RNN)
⟶
\longrightarrow
⟶Decoder(为RNN,又称generative RNN)
流程:Encoder中第
i
i
i时间步输入
P
i
P_i
Pi直至输入序列结束,此时输入特殊信号
"
⇒
"
"\Rightarrow"
"⇒",进入Decoder,
直至遇到特殊信号
"
⇐
"
"\Leftarrow"
"⇐"表明输出序列结束。
值得注意的点
- 无统计独立性假设:
不假设输入与输出间存在独立性,而是通过RNN
捕捉输入输出间的关联性。 - 束流搜索:
由于搜索空间维数是 输入空间的组合数级别}而难以找到最优序列 C ^ P \hat{\mathcal{C}}^\mathcal{P} C^P,因此采样 beamer search,
即给定束流大小情况下进行搜索。 - 输出空间固定:
由于输出从输入 P \mathcal{P} P中选择,因此输出字典大小为 ∣ P ∣ = n |\mathcal{P}|=n ∣P∣=n。
注意这里并不意味着输出维度固定,而是指每一个 1 ≤ C i ≤ n 1\leq C_i\leq n 1≤Ci≤n。
Seq2Seq Model的缺陷
由于输出字典大小与输入空间维度对应,因此对于每一个
n
=
∣
P
∣
n=|\mathcal{P}|
n=∣P∣,训练的模型记为
F
n
\mathcal{F}_n
Fn,
其实际为维输入空间
M
n
M^n
Mn 到其组合数级别空间
N
n
N^{n}
Nn 的映射,依赖于
n
n
n。因此对于不同的
n
n
n都需要单独训练。
Content Based Input Attention
原本的Seq2Seq模型有什么问题?/注意力机制的motivation?
Seq2Seq模型的输出字典大小固定,故限制了Decoder可处理的信息量和计算量。
Content Based Input Attention的基本思想?
记encoder和decoder的隐藏状态分别为
(
e
1
,
⋯
,
e
n
)
(e_1,\cdots,e_n)
(e1,⋯,en)和
(
d
1
,
⋯
,
d
m
(
P
)
)
(d_1,\cdots,d_{m(\mathcal{P})})
(d1,⋯,dm(P))。\
-
在decoder中的第 i i i时间步,计算注意力向量:
第 j 个输入的注意力权重 : u j i = v T tanh ( W 1 e j + W 2 d i ) j = 1 , … , n 归一化后的注意力权重 : a j i = s o f t m a x ( u j i ) j = 1 , … , n = exp ( u j i ) ∑ k = 1 n exp ( u k i ) 第 i 个输出中的加权注意力 : d i ′ = ∑ j = 1 n a j i e j \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=1∑najiej
其中 v , W 1 , W 2 {v}, {W_1}, {W_2} v,W1,W2 为可训练参数,若encoder与decoder隐藏维数相同(例如本文均为512),则 v v v 为向量, W 1 , W 2 W_1, W_2 W1,W2 为方阵。 -
将 d i ′ d_i^{\prime} di′与 d i d_i di串联拼接作为decoder隐藏状态,依此预测并反馈至递归模型的下一时间步。
注意到此时Content Based Input Attention对于每一输出时间步都要计算 n n n 次,故计算复杂度为 O ( n ) O(n) O(n)。
在convex hull problem中,其表现大幅高于Seq2Seq模型,但仍然不能解决输出维度依赖于输入维度问题。
Ptr-Net
Ptr-Net模型的motivation?
在Seq2Seq模型中
p
(
C
i
∣
C
1
,
…
,
C
i
−
1
,
P
)
p(C_i|C_1,\ldots,C_{i-1},\mathcal{P})
p(Ci∣C1,…,Ci−1,P) 直接使用softmax计算,无法解决输出字典依赖于输入维度的问题。
Ptr-Net的基本思想/改进点?
使用注意力机制计算条件概率:
u
j
i
=
v
T
tanh
(
W
1
e
j
+
W
2
d
i
)
j
=
1
,
…
,
n
p
(
C
i
∣
C
1
,
…
,
C
i
−
1
,
P
)
=
s
o
f
t
m
a
x
(
u
i
)
\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(Ci∣C1,…,Ci−1,P)=softmax(ui)
在decoder中不融合
e
j
e_j
ej以提供额外信息而直接解码得到输出,
而是将
u
j
i
u_j^i
uji 作为时间
t
t
t时对输入的指针,指向某个输入。
注意为实现条件概率,此处直接复制
P
C
i
−
1
P_{C_{i-1}}
PCi−1 作为Decoder下一步的输入。
注意Ptr-Net模型针对输出是离散且与输入相对应的问题,并且模型生成的输出并不严格遵循将输出映射回输入的约束,因此长序列预测会模糊。
数据集结构
训练数据
输入:平面点集
P
=
{
P
1
,
…
,
P
n
}
\mathcal{P}=\{P_{1},\ldots,P_{n}\}
P={P1,…,Pn},其中
P
j
=
(
x
j
,
y
j
)
P_j=(x_j,y_j)
Pj=(xj,yj) 是点的笛卡尔坐标。
本文采取在
[
0
,
1
]
×
[
0
,
1
]
[0,1]\times[0,1]
[0,1]×[0,1]中均匀采样。
输出:
C
P
=
{
C
1
,
…
,
C
m
(
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
(
n
log
n
)
O(n\log n)
O(nlogn)。
举例说明Ptr-Net解决Convex Hull问题的过程?
输入
P
=
{
P
1
,
…
,
P
10
}
\mathcal{P}=\{P_1,\ldots,P_{10}\}
P={P1,…,P10}代表点
输出
C
P
=
{
⇒
,
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
(
n
log
n
)
O(n\log n)
O(nlogn),其中
n
n
n 为平面中点的个数。
举例说明Ptr-Net解决Delaunay Triangulation问题的过程?
输入
P
=
{
P
1
,
…
,
P
5
}
\mathcal{P}=\{P_1,\ldots,P_{5}\}
P={P1,…,P5}
输出
C
P
=
{
⇒
,
(
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 ( 2 n n 2 ) \mathcal{O}(2^nn^2) O(2nn2)),Christofides算法( O ( n 2 ∼ n 3 ) \mathcal{O}(n^2\sim n^3) O(n2∼n3))等。本文最高的 n n n 使用的是 n = 20 n=20 n=20,同时对比了上述方法与Ptr-Net。
举例说明Ptr-Net解决TSP问题的过程?
输入
P
=
{
P
1
,
…
,
P
20
}
\mathcal{P}=\{P_1,\ldots,P_{20}\}
P={P1,…,P20} 代表城市
输出
C
P
=
{
⇒
,
1
,
4
,
⋯
,
20
,
⇐
}
\mathcal{C}^{\mathcal{P}}=\{\Rightarrow,1,4,\cdots,20,\Leftarrow\}
CP={⇒,1,4,⋯,20,⇐} 代表访问顺序。
本文最高的 n n n 使用的是 n = 20 n=20 n=20,同时对比了上述方法与Ptr-Net。