Learning Combinatorial Optimization Algorithms over Graphs(强化学习+图神经网络)
基于图神经网络和强化学习的文章
Learning Combinatorial Optimization Algorithms over Graphs(部分精读)
背景
精确算法:不适用于大型数据集;
近似算法:无法确保最优解,目标是在多项式时间内尽可能地接近最优值。近似算法可能会受到弱最优性保证或经验影响,甚至是不可近似问题;
启发式算法:具体问题需具体分析,需要算法设计者进行大量针对特定问题的研究和反复试验。
全文所需定义
基本定义
G(V,E,ω)G(V,E,\omega)G(V,E,ω):VVV是vectex(节点)vectex(节点)vectex(节点),EEE是edge(边)edge(边)edge(边),ω\omegaω表示边的权重
μv\mu_vμv:vvv节点的嵌入向量表示
N(v)N(v)N(v):GGG中vvv节点的邻居集
SSS:表示已经得到的可行解,候选解为S‾=V−S\overline{S}=V-SS=V−S
xxx:为二元决策向量,每一个维度xvx_vxv表示,如果vvv节点在SSS中,就是1,否则为0
S^\widehat{S}S :强化学习模块中,表示最终状态,即状态的末态
函数定义
h(S)h(S)h(S):将SSS映射到满足问题的特定约束的组合结构
c(h(S),G)c(h(S),G)c(h(S),G):决定已经得到的可行解质量如何
Q(h(S),v)Q(h(S),v)Q(h(S),v):评价函数,即对SSS,加入一个新的节点vvv,该节点可以让Q(h(S),v)Q(h(S),v)Q(h(S),v)取到最大值,如下:
S:=(S,v∗), where v∗:=argmaxv∈S‾Q(h(S),v) \begin{aligned}S&:=(S,v^*), \mathrm{~where~}v^*:=\text{argmax}_{v\in\overline{S}}Q(h(S),v)\end{aligned} S:=(S,v∗), where v∗:=argmaxv∈SQ(h(S),v)
Q^(h(S),v;Θ)\widehat Q(h(S),v;\Theta)Q (h(S),v;Θ):评价函数,较上面更加一般化,具有一个深度学习参数Θ\ThetaΘ,避免Q(h(S),v)Q(h(S),v)Q(h(S),v)在设计上较难的问题(图上的深度学习架构)
Q∗Q^*Q∗:表示强化学习问题中的最优QQQ函数
图嵌入
Structure2Vec
structure2vec 根据输入图结构 G 递归地定义网络架构,节点特定的标签或特征xvx_vxv根据 G 的图拓扑递归聚合,经过几步递归后,网络将为每个节点生成一个新的嵌入,同时考虑到图特征和这些节点特征之间的远程交互。
每一个节点的初始化embedding为0,对于所有v ∈ V ,在第t次迭代同步更新embedding:
μv(t+1)←F(xv,{μu(t)}u∈N(v),{w(v,u)}u∈N(v);Θ) \mu_{v}^{(t+1)}\leftarrow F\left(x_{v},\{\mu_{u}^{(t)}\}_{u\in\mathcal{N}(v)},\{w(v,u)\}_{u\in\mathcal{N}(v)};\Theta\right) μv(t+1)←F(xv,{μu(t)}u∈N(v),{w(v,u)}u∈N(v);Θ)
只有在前一轮所有节点的嵌入更新完成后,才会开始新一轮的遍历节点的嵌入。 不难看出,更新还定义了一个过程,其中节点特征xvx_vxv通过非线性传播函数 F 传播到其他节点。 此外,执行的更新迭代越多,节点特征将传播得越远,并在远处节点处非线性聚合。 最后,如果一个节点在 T 次迭代后终止,则每个embedding:μv(T)\mu_{v}^{(T)}μv(T)的节点将包含有关其 T -hop邻域的信息,这也是GNN的精髓所在。
大量实验表明,GNN不适合层数过深,因此本文的迭代总次数T设定为4.
Parameterizing:Q^\widehat{Q}Q
针对上面提到的式子,可以将非线性变换F具象出来,变为如下式子:
μv(t+1)←relu(θ1xv+θ2∑u∈N(v)μu(t)+θ3∑u∈N(v)relu(θ4w(v,u))) \mu_{v}^{(t+1)}\leftarrow\mathrm{relu}\big(\theta_{1}x_{v}+\theta_{2}\sum_{u\in\mathcal{N}(v)}\mu_{u}^{(t)}+\theta_{3}\sum_{u\in\mathcal{N}(v)}\mathrm{relu}(\theta_{4}w(v,u))\big) μv(t+1)←relu(θ1xv+θ2u∈N(v)∑μu(t)+θ3u∈N(v)∑relu(θ4w(v,u)))
其中:θ1∈Rp,θ2,θ3∈Rp×p and θ4∈Rp\theta_{1}\in\mathbb{R}^{p},\theta_{2},\theta_{3}\in\mathbb{R}^{p\times p}\mathrm{~and~}\theta_{4}\in\mathbb{R}^{p}θ1∈Rp,θ2,θ3∈Rp×p and θ4∈Rp,这些都是模型参数
针对上面公式:
- 邻居上的求和是聚合邻居信息的一种方式,该邻居信息对邻居上的排列是不变的
- 为了使非线性变换更强大,可以在汇集相邻嵌入μv\mu_vμv之前添加更多的relu层
因此到此处,已经求出来了各个节点对应的嵌入向量表达,接着用这些嵌入向量来进一步表示Q^(h(S),v;Θ)\widehat Q(h(S),v;\Theta)Q
(h(S),v;Θ):
Q^(h(S),v;Θ)=θ5⊤relu([θ6∑u∈Vμu(T),θ7μv(T)]) \widehat Q(h(S),v;\Theta)=\theta_5^\top\operatorname{relu}([\theta_6\sum_{u\in V}\mu_u^{(T)},\theta_7\mu_v^{(T)}]) Q
(h(S),v;Θ)=θ5⊤relu([θ6u∈V∑μu(T),θ7μv(T)])
其中:θ5∈R2p,θ6,θ7∈Rp×p,[⋅,⋅]\theta_{5}\in\mathbb{R}^{2p},\theta_{6},\theta_{7}\in\mathbb{R}^{p\times p},[· , ·]θ5∈R2p,θ6,θ7∈Rp×p,[⋅,⋅]表示连接运算符
分析公式,其本质是:
- 将节点vvv的嵌入μv\mu_vμv作为节点vvv的代替代
- 将整张图的池化嵌入∑u∈Vμu(T)\sum_{u\in V}\mu_u^{(T)}∑u∈Vμu(T)作为h(S)h(S)h(S)的替代
- 由于Q^\widehat QQ 的计算用到了μv\mu_vμv,因此其本质上由7个参数来控制:Θ={θi}i=17\Theta=\{\theta_i\}_{i=1}^7Θ={θi}i=17
图嵌入小结
以前,graph embedding方法需要为每个输入图 GGG 提供一个真实标签,以便训练 Structure2vec 架构。 在那种情况下,嵌入的输出与 softmax 层相关联,因此可以通过最小化交叉熵损失来端到端地训练参数。
由于本例中缺乏训练标签,这种方法不适用于我们的案例。 相反,我们使用强化学习对这些参数进行端到端的训练。
训练:Q-learning
强化学习基本元素构成
-
要训练的函数:Q^\widehat{Q}Q ,也就是强化学习中的状态-价值函数
-
State:一个ppp维的向量,表征图G的一系列节点node,即:∑v∈Vμv\sum_{v\in V}\mu_v∑v∈Vμv
值得注意的是,针对该论文,状态的末态表示为:S^\widehat{S}S
-
Transition:将最新选取的节点,其标签xvx_vxv的值,置为1即可
-
Action:节点的选择,选择一个节点vvv放入SSS中
-
Reward:函数表达为:r(S,v)r(S,v)r(S,v),表示采取动作后到达的新状态和原本状态的“解质量”的差值,具体如下:
r(S,v)=c(h(S′),G)−c(h(S),G) \begin{aligned}r(S,v)&=c(h(S'),G)-c(h(S),G)\end{aligned} r(S,v)=c(h(S′),G)−c(h(S),G)
其中S′:=(S,v)S^{\prime}:=(S,v)S′:=(S,v),此时需要注意的是,对于初态:c(h(∅),G)=0c(h(\emptyset),G)=0c(h(∅),G)=0
通过该初值的限制,就可以实现如下等式:
R(S^)=∑i=1∣S^∣r(Si,vi)=c(h(S^),G) \begin{aligned}R(\widehat{S})=\sum_{i=1}^{|\widehat{S}|}r(S_i,v_i)\end{aligned} =c(h(\widehat{S}),G) R(S
)=i=1∑∣S
∣r(Si,vi)=c(h(S
),G)
- Policy:基于学习到的Q^\widehat{Q}Q
来确定,是一个确定性的贪心策略:
π(v∣S):=argmaxv′∈S‾Q(h(S),v′) \begin{aligned}\pi(v|S)&:=\operatorname{argmax}_{v'\in\overline{S}}Q(h(S),v')\end{aligned} π(v∣S):=argmaxv′∈SQ(h(S),v′)
学习算法
- Loss-function:
(y−Q^(h(St),vt;Θ))2 \begin{aligned}(y-\widehat{Q}(h(S_t),v_t;\Theta))^2\end{aligned} (y−Q (h(St),vt;Θ))2
其中对于非终态的1−step1-step1−step而言,
y=γmaxv′Q^(h(St+1),v′;Θ)+r(St,vt) \begin{aligned}y=\gamma\max_{v'}\widehat{Q}(h(S_{t+1}),v';\Theta)+r(S_{t},v_{t})\end{aligned} y=γv′maxQ (h(St+1),v′;Θ)+r(St,vt)
有意思的是,对于n−stepn-stepn−step更新来说,这种结构更适合延时奖励的获取,即1−step1-step1−step可能过于短视,n−stepn-stepn−step可以对未来奖励的估计更加准确。但是对于n−stepn-stepn−step而言,其和1−step1-step1−step的差异并不体现在loss−functionloss-functionloss−function上,而是体现在目标上,此时yyy的取值变为如下:
y=∑i=0n−1r(St+i,vt+i)+γmaxv′Q^(h(St+n),v′;Θ) y=\sum_{i=0}^{n-1}r(S_{t+i},v_{t+i})+\gamma\operatorname*{max}_{v^{\prime}}\widehat{Q}(h(S_{t+n}),v^{\prime};\Theta) y=i=0∑n−1r(St+i,vt+i)+γv′maxQ
(h(St+n),v′;Θ)
对于学习过程,可以生成一批样本之后再进行批量的学习,即从经验回放池中读取一批数据集EEE来进行Q^\widehat{Q}Q
函数的更新学习,数据集的形式如下:
(St,at,Rt,t+n,St+n)Rt,t+n=∑i=0n−1r(St+i,at+i) (S_t,a_t,R_{t,t+n},S_{t+n}) \\ R_{t,t+n}=\sum_{i=0}^{n-1}r(S_{t+i},a_{t+i}) (St,at,Rt,t+n,St+n)Rt,t+n=i=0∑n−1r(St+i,at+i)
即从经验回放池中,随机抽取EEE,再进行随机梯度更新!
此处的Q- learning(DQN)是一个off-policy方法。众所周知,诸如 Q-learning 之类的强化学习算法比其策略梯度算法的样本效率(sample-efficient)更高。主要是由于策略梯度方法需要在function approximator(函数逼近器)的每次参数更新后获得新策略的策略样本。
伪代码

评估
(没有仔细去总结!)
1:预训练
2:时间因素
3:精度因素
总结
本文提出了一个端到端的机器学习框架,用于为图上的NP-Hard组合优化问题自动设计贪婪启发式算法。 该方法的核心是将deep graph embedding与RL相结合。 通过广泛的实验评估,我们证明了与手动设计的贪心算法相比,所提出的框架在学习贪心启发式算法方面的有效性。 学习启发式算法的出色性能在多个不同的问题、图类型和图大小上是一致的,这表明该框架是一种很有前途的新工具,用于设计图问题的算法。
https://zhuanlan.zhihu.com/p/551714846
https://arxiv.org/abs/1704.01665
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)