本文提出将强化学习和图嵌入的组合以端到端地自动为图上组合优化问题设计贪心启发式算法,以避免设计传统算法所需要的大量专业知识和试错。学得的贪心策略行为类似增量构造解决方案的元算法,动作由解决方案当前状态上的图嵌入网络确定。作者提出方案学得的启发式算法对多个不同的组合优化问题、图类型和大小都有效。
元算法:meta algorithm,通用框架,可用于解决许多问题。
解决NP-hard图优化问题的方法主要分为三类:
上述三种范式都很少利用现实世界优化问题的一个共同特征:同一类型问题的实例在常规基础上被一次又一次地解决,保持相同的组合结构,但主要在数据上有所不同。为此作者提出,给定一个图优化问题 G G G和分布 D \mathbb{D} D,是否能从 D \mathbb{D} D中学习到更好的启发式方法来推广到未见的实例?
现有基于深度学习方法的不足之处:
基于现状,作者使用强化学习和图嵌入的独特组合来解决图问题的学习算法的挑战。学习到的策略行为类似于增量构造解决方案的元算法,动作由解决方案当前状态上的图嵌入网络确定。作者提出的架构与以往的工作由以下几个方面的不同:
作者提出的框架如下所示:
作者使用有权图上的三个优化问题来说明其框架。令 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:E→R+表示边权重函数, w ( u , v ) w(u, v) w(u,v)表示边 ( u , v ) ∈ E (u, v) \in E (u,v)∈E的权重。
基于此,作者解决的三个优化问题表示如下:
**贪心算法基于最大化某个评估函数 Q Q Q(通过 Q Q Q衡量当前局部解背景下一个节点的质量),在局部解S中依次添加节点来构造一个解。**作者指出上述问题的贪心算法可以用一个共同的公式来表示:
一个给定优化问题的问题实例 G G G是从分布 D \mathbb{D} D中采样的,即实例图 G G G的 V 、 E V、E V、E和 w w w是根据模型或真实世界的数据生成的。
一个部分解决被表示为一个有序的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,…,v∣S∣),vi∈V, 和 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 v∈S, x v = 1 x_v=1 xv=1,否则为0。可以把 x v x_v xv看作是 v v v上的一个标签或额外的特征。
需要一个维护(或辅助)过程 h ( S ) h(S) h(S),其将有序列表 S S S映射到一个满足问题特定约束的组合结构。
部分解决 S S S的质量是由基于 S S S的组合结构 h h h的目标函数 c ( h ( S ) , G ) c(h(S), G) c(h(S),G)给出的。
一个通用的贪婪算法能使评估函数 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∗:=argmaxv∈Sˉ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),三个问题具体设计如下:
在部分解 S S S中添加一个节点所产生的解决方案质量的估计值将由评估函数 Q Q Q决定,该函数将通过使用问题实例的集合来学习。这与传统的贪心算法设计相反,在传统算法中需要手工设计 Q Q Q,并且需要大量针对特定问题的研究和试错。
对于评估函数 Q Q Q,作者希望其考虑到当前部分解 S S S,因为它映射到图上。即对所有节点 v ∈ S v \in S v∈S, 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;Θ)。
给定当前部分解 S S S,structure2vec会为每个节点 v ∈ V v \in V v∈V计算 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 v∈V,在每次迭代中将嵌入同步更新为:
μ 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)}u∈N(v),{w(v,u)}u∈N(v);Θ)
其中 N ( v ) \mathcal{N}(v) N(v)表示节点 v v v的邻居集, F F F表示神经网络或核函数。
基于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+θ2u∈N(v)∑μu(t)+θ3u∈N(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} θ1∈Rp,θ2,θ3∈Rp×p 和 θ 4 ∈ R p \theta_4 \in \mathbb{R}^p θ4∈Rp都是模型的参数, 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)} ∑u∈Vμ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;Θ)=θ5⊤relu([θ6u∈V∑μ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} θ5∈R2p,θ6,θ7∈Rp×p , [ ⋅ , ⋅ ] [\cdot, \cdot] [⋅,⋅]表示拼接操作。作者将 T T T设置的很小(因为会过平滑)。对于训练,作者使用的是强化学习。
作者期望在分布 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 。
作者对强化学习框架中的状态、动作和奖励定义如下:
State:状态 S S S是图 G G G上的一系列动作(节点)。由于已经在嵌入中表示了标记图中的节点,所以状态是 p p p维空间中的一个向量, ∑ v ∈ V μ v \sum_{v \in V} \mu_v ∑v∈Vμv。很容易看出,这种状态的嵌入表示可以跨不同的图使用。终止状态 S ^ \widehat{S} S 取决于手头的问题。
Transition:过渡是确定的,相当于用特征 x v = 1 x_v=1 xv=1来标记被选为最后行动的节点 v ∈ G v \in G v∈G。
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=1∣S ∣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) π(v∣S):=argmaxv′∈Sˉ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学习来习得。
为了对 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, (y−Q (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=γmaxv′Q (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=0n−1r(St+i,vt+i)+γmaxv′Q (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=0n−1r(St+i,at+i)。然后,从 E E E中抽取的随机样本进行随机梯度更新。
Q-learning这样的off-policy强化学习算法可以比其策略梯度对应的算法有更高的样本效率。这主要是由于策略梯度方法需要在函数逼近器的每次参数更新后获得的新策略的策略样本。