《Learning Combinatorial Optimization Algorithms over Graphs》阅读笔记

news/2024/5/18 22:27:30 标签: 强化学习, GNN, 组合优化问题

一.文章概述

本文提出将强化学习和图嵌入的组合以端到端地自动为图上组合优化问题设计贪心启发式算法,以避免设计传统算法所需要的大量专业知识和试错。学得的贪心策略行为类似增量构造解决方案的元算法,动作由解决方案当前状态上的图嵌入网络确定。作者提出方案学得的启发式算法对多个不同的组合优化问题、图类型和大小都有效。

元算法:meta algorithm,通用框架,可用于解决许多问题。

二.背景介绍

解决NP-hard图优化问题的方法主要分为三类:

  • 精确算法:基于枚举或带整数规划形式的分支限界,对大型实例不适用。
  • 近似算法:多项式逼近算法是可取的,但可能会受到弱最优性保证或经验性能的影响,或者对于不可逼近的问题甚至可能不存在。
  • 启发式算法:通常是快速有效的算法,但缺乏理论保证,并且可能还需要算法设计者进行大量针对特定问题的研究和试错。

上述三种范式都很少利用现实世界优化问题的一个共同特征:同一类型问题的实例在常规基础上被一次又一次地解决,保持相同的组合结构,但主要在数据上有所不同。为此作者提出,给定一个图优化问题 G G G和分布 D \mathbb{D} D,是否能从 D \mathbb{D} D中学习到更好的启发式方法来推广到未见的实例?

现有基于深度学习方法的不足之处:

  • 使用的深度架构是通用的,不能有效地反映图问题的组合结构。
  • 需要大量的实例来提升方法的泛化性能。
  • 现有工作通常基于策略梯度进行训练,这种方法并不是特别有效的样本。
  • 需要繁琐的人工特征工程。

基于现状,作者使用强化学习和图嵌入的独特组合来解决图问题的学习算法的挑战。学习到的策略行为类似于增量构造解决方案的元算法,动作由解决方案当前状态上的图嵌入网络确定。作者提出的架构与以往的工作由以下几个方面的不同:

  • 算法设计模型:采用贪心元算法设计,根据图的结构,通过节点的连续添加构造可行解,并保持可行解满足问题的图约束。
  • 算法表示:使用structure2vec的图嵌入网络来表示贪心算法中的策略,该网络能捕获节点在其图邻域上下文中的属性。这允许策略根据节点的有用性来区分它们,并推广到不同大小的问题实例。
  • 算法训练:使用拟合Q-learning来学习一个由图嵌入网络参数化的贪心策略。策略的目标是直接优化原始问题实例的目标函数。该方法的主要优点是可以以数据高效的方式处理延迟奖励(贪心算法获取的目标函数值的剩余增量);在贪心算法的每一步中,根据部分解更新图嵌入,以反映每个节点对最终目标值的效益的新知识。相比之下,策略梯度只对整个解决方案更新一次模型参数。

作者提出的框架如下所示:

在这里插入图片描述

三.图上贪心算法通用范式

作者使用有权图上的三个优化问题来说明其框架。令 G ( V , E , w ) G(V, E, w) G(V,E,w)表示有权图,其中 V V V表示节点集, E E E表示边集, w : E → R + w: E \rightarrow \mathbb{R}^{+} w:ER+表示边权重函数, w ( u , v ) w(u, v) w(u,v)表示边 ( u , v ) ∈ E (u, v) \in E (u,v)E的权重。

基于此,作者解决的三个优化问题表示如下:

  • Minimum Vertex Cover (MVC):给定图 G G G,寻找节点子集 S ⊆ V S \subseteq V SV,使得任意边都有端点在 S S S中。
  • Maximum Cut (MAXCUT):给定图 G G G,寻找节点子集 S ⊆ V S \subseteq V SV,使得cut-set的权重之和 ∑ ( u , v ) ∈ C w ( u , v ) \sum_{(u, v) \in C} w(u, v) (u,v)Cw(u,v)最大,其中cut-set C ⊆ E C \subseteq E CE中每条边的一段在 S S S中,另一端在 V \ S V \backslash S V\S中。
  • Traveling Salesman Problem (TSP):给定二维空间的点集,以每个点为图节点,点间的距离作为点间边的权重,该问题旨在寻找一个总权值最小的tour,tour指访问图中每个顶点仅一次的环。

**贪心算法基于最大化某个评估函数 Q Q Q(通过 Q Q Q衡量当前局部解背景下一个节点的质量),在局部解S中依次添加节点来构造一个解。**作者指出上述问题的贪心算法可以用一个共同的公式来表示:

  1. 一个给定优化问题的问题实例 G G G是从分布 D \mathbb{D} D中采样的,即实例图 G G G V 、 E V、E VE w w w是根据模型或真实世界的数据生成的。

  2. 一个部分解决被表示为一个有序的list S = ( v 1 , v 2 , … , v ∣ S ∣ ) , v i ∈ V S=\left(v_1, v_2, \ldots, v_{|S|}\right), v_i\in V S=(v1,v2,,vS),viV, 和 S ˉ = V \ S \bar{S}=V\backslash S Sˉ=V\S 待添加的候选节点集。作者使用一个二元决策变量的向量 x x x,每个维度 x v x_v xv对应于 V V V中的一个节点 v v v,如果 v ∈ S v\in S vS x v = 1 x_v=1 xv=1,否则为0。可以把 x v x_v xv看作是 v v v上的一个标签或额外的特征

  3. 需要一个维护(或辅助)过程 h ( S ) h(S) h(S),其将有序列表 S S S映射到一个满足问题特定约束的组合结构。

  4. 部分解决 S S S的质量是由基于 S S S的组合结构 h h h的目标函数 c ( h ( S ) , G ) c(h(S), G) c(h(S),G)给出的。

  5. 一个通用的贪婪算法能使评估函数 Q ( h ( S ) , v ) ∈ R Q(h(S), v) \in \mathbb{R} Q(h(S),v)R最大化的节点 v v v作为下一个添加到部分解 S S S中的节点,这取决于当前部分解决方案的组合结构 h ( S ) h(S) h(S),即部分解可以扩展为:
    S : = ( S , v ∗ ) , where  v ∗ : = argmax ⁡ v ∈ S ˉ Q ( h ( S ) , v ) S:=\left(S, v^*\right) \text {, where } v^*:=\operatorname{argmax}_{v \in \bar{S}} Q(h(S), v) S:=(S,v), where v:=argmaxvSˉQ(h(S),v)
    其中 ( S , v ∗ ) (S, v^*) (S,v)表示在list S S S尾端添加节点 v ∗ v^* v。该步骤会重复直到满足终止条件 t ( h ( S ) ) t(h(S)) t(h(S))

对于以上抽象模型(分布 D \mathbb{D} D、辅助函数 h h h、终止准则 t t t和代价函数 c c c),三个问题具体设计如下:

  • MVC:辅助函数 h h h不需要做任何工作, c ( h ( S ) , G ) = − ∣ S ∣ c(h(S), G)=-|S| c(h(S),G)=S。终止条件是检查是否所有边都被覆盖。
  • MAXCUT:辅助函数将 V V V划分为两个子集 S S S和其补集 S ˉ = V \ S \bar{S}=V \backslash S Sˉ=V\S并维持cut-set C = { ( u , v ) ∣ ( u , v ) ∈ E , u ∈ S , v ∈ S ˉ } C=\{(u, v) \mid(u, v) \in E, u \in S, v \in \bar{S}\} C={(u,v)(u,v)E,uS,vSˉ}。代价函数是 c ( h ( S ) , G ) = ∑ ( u , v ) ∈ C w ( u , v ) c(h(S), G)=\sum_{(u, v) \in C} w(u, v) c(h(S),G)=(u,v)Cw(u,v),无终止条件。
  • TSP:辅助函数根据 S S S中的节点顺序维护一个tour。最简单的方法是按照 S S S的顺序将节点追加到部分旅游的末尾。代价函数为 c ( h ( S ) , G ) = − ∑ i = 1 ∣ S ∣ − 1 w ( S ( i ) , S ( i + 1 ) ) − w ( S ( ∣ S ∣ ) , S ( 1 ) ) c(h(S), G)=-\sum_{i=1}^{|S|-1} w(S(i), S(i+1))-w(S(|S|), S(1)) c(h(S),G)=i=1S1w(S(i),S(i+1))w(S(S),S(1)),终止条件是 S = V S=V S=V。根据经验,在部分tour中插入一个节点 u u u,使tour长度增加最少的位置是一个更好的选择。作者以此作为TSP的辅助函数。

在部分解 S S S中添加一个节点所产生的解决方案质量的估计值将由评估函数 Q Q Q决定,该函数将通过使用问题实例的集合来学习。这与传统的贪心算法设计相反,在传统算法中需要手工设计 Q Q Q,并且需要大量针对特定问题的研究和试错。

四.图嵌入表示

对于评估函数 Q Q Q,作者希望其考虑到当前部分解 S S S,因为它映射到图上。即对所有节点 v ∈ S v \in S vS x v = 1 x_v=1 xv=1,节点按照图结构进行连接。直观地说, Q ^ \widehat{Q} Q 应该总结"有标签的 "图 G G G的状态,如果要在该图背景下添加新节点,就应该算出它的价值。在这里,图的状态和节点 v v v的上下文都可能非常复杂,难以用封闭形式描述,而且可能取决于复杂的统计数据,如全局/局部度分布、三角形计数、与标记节点的距离。为了在组合结构上表示如此复杂的现象,作者在图上利用深度学习架构,即structure2vec来参数化 Q ^ ( h ( S ) , v ; Θ ) \widehat{Q}(h(S), v ; \Theta) Q (h(S),v;Θ)

4.1 Structure2Vec

给定当前部分解 S S S,structure2vec会为每个节点 v ∈ V v \in V vV计算 p p p维的特征嵌入 μ v \mu_v μv。更具体地说,structure2vec根据输入图结构 G G G递归地定义网络架构,structure2vec的计算图受到图模型推断算法的启发,其中节点特定的标签或特征 x v x_v xv根据 G G G的图拓扑递归地聚合。经过多次迭代,网络将为每个节点产生一个新的嵌入,同时考虑到图特征和这些节点特征之间的远程交互。structure2vec的一个变体是将嵌入 μ v ( 0 ) \mu_v^{(0)} μv(0)初始化为0,对所有 v ∈ V v \in V vV,在每次迭代中将嵌入同步更新为:
μ v ( t + 1 ) ← F ( x v , { μ u ( t ) } u ∈ N ( v ) , { w ( v , u ) } u ∈ N ( v ) ; Θ ) \mu_v^{(t+1)} \leftarrow F\left(x_v,\left\{\mu_u^{(t)}\right\}_{u \in \mathcal{N}(v)},\{w(v, u)\}_{u \in \mathcal{N}(v)} ; \Theta\right) μv(t+1)F(xv,{μu(t)}uN(v),{w(v,u)}uN(v);Θ)
其中 N ( v ) \mathcal{N}(v) N(v)表示节点 v v v的邻居集, F F F表示神经网络或核函数。

4.2 Parameterizing Q ^ \widehat{Q} Q

基于structure2vec,作者定义的嵌入更新方式为:
μ v ( t + 1 ) ← relu ⁡ ( θ 1 x v + θ 2 ∑ u ∈ N ( v ) μ u ( t ) + θ 3 ∑ u ∈ N ( v ) relu ⁡ ( θ 4 w ( v , u ) ) ) \mu_v^{(t+1)} \leftarrow \operatorname{relu}\left(\theta_1 x_v+\theta_2 \sum_{u \in \mathcal{N}(v)} \mu_u^{(t)}+\theta_3 \sum_{u \in \mathcal{N}(v)} \operatorname{relu}\left(\theta_4 w(v, u)\right)\right) μv(t+1)relu θ1xv+θ2uN(v)μu(t)+θ3uN(v)relu(θ4w(v,u))
θ 1 ∈ R p , θ 2 , θ 3 ∈ R p × p \theta_1 \in \mathbb{R}^p, \theta_2, \theta_3 \in \mathbb{R}^{p \times p} θ1Rp,θ2,θ3Rp×p θ 4 ∈ R p \theta_4 \in \mathbb{R}^p θ4Rp都是模型的参数, relu \text{relu} relu表示非线性激活。经过 T T T轮迭代,作者使用这些嵌入来定义 Q ^ ( h ( S ) , v ; Θ ) \widehat{Q}(h(S), v ; \Theta) Q (h(S),v;Θ)。即作者使用每个节点 v v v的嵌入和整个图上的池化嵌入 ∑ u ∈ V μ u ( T ) \sum_{u \in V} \mu_u^{(T)} uVμu(T),作为 v v v h ( S ) h(S) h(S)的代用品,即:
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}\left(\left[\theta_6 \sum_{u \in V} \mu_u^{(T)}, \theta_7 \mu_v^{(T)}\right]\right) Q (h(S),v;Θ)=θ5relu([θ6uVμu(T),θ7μv(T)])
其中 θ 5 ∈ R 2 p , θ 6 , θ 7 ∈ R p × p \theta_5 \in \mathbb{R}^{2 p}, \theta_6, \theta_7 \in \mathbb{R}^{p \times p} θ5R2p,θ6,θ7Rp×p [ ⋅ , ⋅ ] [\cdot, \cdot] [,]表示拼接操作。作者将 T T T设置的很小(因为会过平滑)。对于训练,作者使用的是强化学习

五.训练:Q Learning

作者期望在分布 D \mathbb{D} D上的 m m m个图组成的图集 D = { G i } i = 1 m \mathcal{D}=\left\{G_i\right\}_{i=1}^m D={Gi}i=1m上学得函数 Q ^ \widehat{Q} Q

5.1 强化学习公式

作者对强化学习框架中的状态、动作和奖励定义如下:

  • State:状态 S S S是图 G G G上的一系列动作(节点)。由于已经在嵌入中表示了标记图中的节点,所以状态是 p p p维空间中的一个向量, ∑ v ∈ V μ v \sum_{v \in V} \mu_v vVμv。很容易看出,这种状态的嵌入表示可以跨不同的图使用。终止状态 S ^ \widehat{S} S 取决于手头的问题。

  • Transition:过渡是确定的,相当于用特征 x v = 1 x_v=1 xv=1来标记被选为最后行动的节点 v ∈ G v \in G vG

  • Actions:动作 v v v G G G中的一个节点,不属于当前状态 S S S。同样,作者将把行动表示为其相应的 p p p维节点嵌入 μ v \mu_v μv,这样的定义适用于各种规模的图。

  • Rewards:状态 S S S的奖励函数 r ( S , v ) r(S, v) r(S,v)被定义为采用行动 v v v,转移到新状态 S ′ : = ( S , v ) S^{\prime}:=(S, v) S:=(S,v)后,代价函数的变化,即:
    r ( S , v ) = c ( h ( S ′ ) , G ) − c ( h ( S ) , G ) r(S, v)=c\left(h\left(S^{\prime}\right), G\right)-c(h(S), G) r(S,v)=c(h(S),G)c(h(S),G)
    其中 c ( h ( ∅ ) , G ) = 0 c(h(\emptyset), G)=0 c(h(),G)=0。因此,终止状态 S ^ \widehat{S} S 的累积奖励 R R R S ^ \widehat{S} S 的目标函数值完全重合,即 R ( S ^ ) = ∑ i = 1 ∣ S ^ ∣ r ( S i , v i ) R(\widehat{S})=\sum_{i=1}^{|\widehat{S}|} r\left(S_i, v_i\right) R(S )=i=1S r(Si,vi)等于 c ( h ( S ^ ) , G ) c(h(\widehat{S}), G) c(h(S ),G)

  • Policy:基于 Q ^ \widehat{Q} Q ,确定性贪心策略 π ( v ∣ S ) : = argmax ⁡ v ′ ∈ S ˉ Q ^ ( h ( S ) , v ′ ) \pi(v \mid S):=\operatorname{argmax}_{v^{\prime} \in \bar{S}} \widehat{Q}\left(h(S), v^{\prime}\right) π(vS):=argmaxvSˉQ (h(S),v)被使用,选择行动 v v v对应于向当前部分解中添加一个 G G G的节点,这会导致收集奖励 r ( S , v ) r(S,v) r(S,v)

表1展示了本文的三个优化问题的强化学习框架实例:

在这里插入图片描述

作者用 Q ∗ Q^* Q表示每个RL问题的最优 Q Q Q函数,作者用 Q ^ ( h ( S ) , v ; Θ ) \widehat{Q}(h(S), v ; \Theta) Q (h(S),v;Θ)来近似它,这通过 n n n Q Q Q学习来习得。

5.2 学习算法

为了对 Q ^ ( h ( S ) , v ; Θ ) \widehat{Q}(h(S), v ; \Theta) Q (h(S),v;Θ)的参数进行端到端的学习,作者使用 n n n Q Q Q学习和拟合 Q Q Q迭代的组合,具体详见算法1:

在这里插入图片描述

作者使用术语episode来表示从一个空解开始,直到终止的一个完整的节点添加序列,episode中的一个step表示一个单独的操作(节点添加)。

标准(1步) Q Q Q学习通过执行gradient step来最小化平方损失函数,在episode的每个step中更新函数近似器的参数:
( y − Q ^ ( h ( S t ) , v t ; Θ ) ) 2 , \left(y-\widehat{Q}\left(h\left(S_t\right), v_t ; \Theta\right)\right)^2, (yQ (h(St),vt;Θ))2,
其中 y = γ max ⁡ v ′ Q ^ ( h ( S t + 1 ) , v ′ ; Θ ) + r ( S t , v t ) y=\gamma \max _{v^{\prime}} \widehat{Q}\left(h\left(S_{t+1}\right), v^{\prime} ; \Theta\right)+r\left(S_t, v_t\right) y=γmaxvQ (h(St+1),v;Θ)+r(St,vt) 表示状态 S t S_t St的非终止状态。 n n n Q Q Q学习有助于处理延迟奖励的问题,在这种情况下,agent感兴趣的最终奖励只能在某一episode的未来才能收到。在作者的设置中,解决方案的最终目标值只有在添加许多节点之后才会显示出来。因此,一步更新可能太短视了,其自然扩展是等待 n n n步,然后更新近似器的参数,以便收集对未来奖励的更准确的估计。形式上更新仍然是在相同的损失平方上,但是目标不同, y = ∑ i = 0 n − 1 r ( S t + i , v t + i ) + γ max ⁡ v ′ Q ^ ( h ( S t + n ) , v ′ ; Θ ) y=\sum_{i=0}^{n-1} r\left(S_{t+i}, v_{t+i}\right)+\gamma \max _{v^{\prime}} \widehat{Q}\left(h\left(S_{t+n}\right), v^{\prime} ; \Theta\right) y=i=0n1r(St+i,vt+i)+γmaxvQ (h(St+n),v;Θ)

当使用神经网络作为函数逼近器时,拟合 Q Q Q迭代法已被证明可以导致更快的学习收敛,这一属性也适用于本文的设置。与逐个样本更新 Q Q Q函数不同,拟合 Q Q Q迭代方法使用experience replay来更新函数逼近器,使用来自数据集 E E E的一批样本,而不是当前经历的单个样本。数据集 E E E在之前的episode中被填充,这样在step t + n t+n t+n,元组 ( S t , a t , R t , t + n , S t + n ) \left(S_t, a_t, R_{t, t+n}, S_{t+n}\right) (St,at,Rt,t+n,St+n)被添加到 E E E,其中 R t , t + n = ∑ j = 0 n − 1 r ( S t + i , a t + i ) R_{t, t+n}=\sum_{j=0}^{n-1} r\left(S_{t+i}, a_{t+i}\right) Rt,t+n=j=0n1r(St+i,at+i)。然后,从 E E E中抽取的随机样本进行随机梯度更新。

Q-learning这样的off-policy强化学习算法可以比其策略梯度对应的算法有更高的样本效率。这主要是由于策略梯度方法需要在函数逼近器的每次参数更新后获得的新策略的策略样本。


http://www.niftyadmin.cn/n/4941812.html

相关文章

Python数学函数、字符串和对象

学习目标: 使用math模块中的函数解决数学问题表示和处理字符串和字符使用ASCII和Unicode对字符编码使用ord函数获取一个字符的数值编码以及使用chr函数将一个数值编码转换成一个字符使用转义序列表示特殊字符调用带参数end的print函数使用str函数将数字转换成字符串…

((*(volatile unsigned long *) (reg)))

#define LONGREG(reg) ((*(volatile unsigned long *) (reg)))1.(unsigned long *)(reg) 代表“reg”是1个unsigned long类型的指针; volatile是一个修饰符,告诉编译器此段代码不要优化,确保本条指令不会因C 编译器的优化而被省…

首起针对国内金融企业的开源组件投毒攻击事件

简述 2023年8月9日,墨菲监控到用户名为 snugglejack_org (邮件地址:SnuggleBearrxxhotmail.com)的用户发布到 NPM 仓库中的 ws-paso-jssdk 组件包具有发向 https://ql.rustdesk[.]net 的可疑流量,经过确认该组件包携带远控脚本&a…

Android免打包多渠道统计如何实现

摘要: 实际上只要完成1-2步即可实现多渠道打包,这也意味着,只要每次更新App时给出一个原始包,运营人员就能在后台自己进行操作管理,简单快捷到全程无需开发人员参与。 我们都知道,Android 市场被分割成几十…

国产32位单片机XL32F001,带1 路 12bit ADC,I2C、SPI、USART 等外设

XL32F001 系列单片机采用高性能的 32 位 ARM Cortex-M0内核,宽电压工作范围的 MCU。嵌入 24KbytesFlash 和 3Kbytes SRAM 存储器,最高工作频率 24MHz。包含多种不同封装类型多款产品。芯片集成 I2C、SPI、USART 等通讯外设,1 路 12bit ADC&am…

excel中定位条件,excel中有哪些数据类型、excel常见错误值、查找与替换

一、如何定位条件 操作步骤:开始 - 查找和选择 - 定位条件(ctrl G 或 F5) 注:如果F5不可用,可能是这个快捷键被占用了 案例:使用定位条件选择取余中空单元格,填入100,按组合键ct…

leetcode做题笔记81搜索旋转排序数组 II

已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], n…

spring框架相关面试题

巩固基础&#xff0c;砥砺前行 。 只有不断重复&#xff0c;才能做到超越自己。 能坚持把简单的事情做到极致&#xff0c;也是不容易的。 spring是什么? 轻量级的开源的2EE框架。它是一个容器框架&#xff0c;用来装javabean (java对象&#xff09;&#xff0c;中间层框架&a…