ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS! 使用强化学习解决tsp问题(一)Seq2Seq的前生今世

本文介绍了使用强化学习解决旅行商问题(TSP)的思路,涉及ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS! 文章中的Transformer架构和greedy rollout baseline。同时,深入探讨了seq2seq模型,特别是Dzmitry Bahdanau的注意力机制,用于解决长语句输入问题。此外,还提到了Oriol Vinyals的Pointer Networks,它解决了输出序列长度固定的限制。下篇将介绍强化学习的基础知识。" 8991125,1378954,循环链表详解:特点与环判断,"['C++', '链表', '数据结构', '指针']

实习的时候,接触到了使用强化学习去解决tsp的问题,开始先读了ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS! 这篇文章,文章里更改了Transformer Architecture,并搭载了强化学习中的greedy rollout baseline去解决tsp的问题。无奈背景知识太少,也没有接触过强化学习相关的知识,读起来很费劲。经过请教公司的前辈,制定了下面的学习策略。

  • 前期准备工作

  • Dzmitry Bahdanau的NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

  • 这一篇文献介绍了传统的seq2seq的问题无法解决长语句输入的问题,作者提出了一个叫“align and translate jointly”的解决方案,其实就是一个注意力机制,简单来说就是在预测一个目标词汇的时候,可以查到源语言序列中的哪一部分与它相对应,在后续查找生词中可以直接复制相对应的源语言。
  • 这篇csdn博文把注意力机制的作用解释的很清楚https://blog.youkuaiyun.com/weixin_40240670/article/details/86483896。借用文章中的原句解释,“Attention Mechanism的作用就是将encoder的隐状态按照一定权重加和之后拼接(或者直接加和)到decoder的隐状态上,以此作为额外信息,起到所谓“软对齐”的作用,并且提高了整个模型的预测准确度。简单举个例子,在机器翻译中一直存在对齐的问题,也就是说源语言的某个单词应该和目标语言的哪个单词对应,如“Who are you”对应“你是谁”,如果我们简单地按照顺序进行匹配的话会发现单词的语义并不对应,显然“who”不能被翻译为“你”。而Attention Mechanism非常好地解决了这个问题。如前所述,Attention Mechanism会给输入序列的每一个元素分配一个权重,如在预测“你”这个字的时候输入序列中的“you”这个词的权重最大,这样模型就知道“你”是和“you”对应的,从而实现了软对齐”。
  • 文中的encoder和decoder结构和seq2seq类似,不同的是encoder里的RNN是双向的,有一个前向的RNN和一个后向的RNN。前向RNN通过正向读取输入序列来计算前向隐藏层状态h->;后向RNN通过反向读取输入序列来计算反向隐藏层状态h<-。然后在j时刻的输入xj的前向隐藏层状态hj->和反向隐藏层状态hj<-组成了xj的注解(annotation)。  
  • Decode里有一个上下文向量Ci,上下文向量的计算由一系列注解(h1,...hT)加权求和计算出来。如下图,最后计算出得分函数eij以及注意力向量a。

  • Oriol Vinyals∗​​​​​​的Pointer Networks

  • 这一篇文献首先提出了Bahdanau的缺陷,缺陷就是“still require the size of the output dictionary to be fixed a priori”,我理解的就是需要预先定义知道输出字典的长度,即输出序列的长度无法自适应输入序列的长度。Vinyals提出了一个架构叫pointer networks解决了这一问题,原理就是在每次预测一个元素的时候找到输入序列中权重最大的那个元素,然后把权重最大的元素输出,这样就可以解决输出序列长度必须固定的问题了。

下一篇还是前期准备工作,会介绍一些强化学习的背景知识。

在路径规划问题中,注意力机制被广泛应用于提高算法的效率和适应性。路径规划通常涉及从起点到终点选择最优路径,尤其是在复杂环境中(如交通网络、机器人导航等),需要动态调整策略以应对变化的环境条件。 ### 路径规划中的注意力机制应用 1. **上下文感知路径选择** 注意力机制可以用于计算不同节点或边的重要性权重,从而帮助模型关注与当前任务最相关的部分。例如,在图神经网络(GNN)中结合注意力机制,可以通过计算每个相邻节点对当前节点的影响权重,实现更精确的路径预测。这种基于注意力的权重分配方式能够有效处理大规模图结构数据,并提升模型对复杂环境的适应能力 [^3]。 2. **Pointer 网络与解码器设计** 在序列生成任务中,如路径规划,Pointer 网络是种常用的注意力机制。它通过计算当前解码状态与编码器输出之间的注意力得分,决定下个要访问的节点。具体来说,在解码时间步 $t$,模型会根据 GRU 的隐状态 $z_t$ 和图嵌入信息 $f(S, u; \theta_e)$ 计算每个节点的注意力得分,并通过 softmax 归化为概率分布,最终选择概率最高的节点作为下步路径的部分 [^3]。 3. **多头注意力与 Transformer 架构** Transformer 中的多头注意力机制也被引入路径规划研究中。通过并行计算多个注意力头,模型可以从不同角度捕捉图结构的全局信息。例如,在城市交通路径规划中,Transformer 可以同时考虑道路拥堵情况、历史通行时间等多种因素,从而生成更优路径 [^2]。 4. **混合注意力机制** 为了进步提升模型性能,研究人员尝试将通道注意力机制与空间注意力机制结合使用。通道注意力机制关注特征维度上的重要性,而空间注意力机制则聚焦于图结构中节点的空间关系。这种混合注意力机制可以在路径规划中更好地捕捉局部细节与全局趋势 [^1]。 5. **强化学习与注意力机制结合** 强化学习(RL)框架中也常使用注意力机制来优化路径决策过程。智能体在每步决策时,通过注意力机制评估周围环境的状态价值,并选择最优动作。这种方法尤其适用于动态环境下的路径规划,如自动驾驶车辆的实时路径调整 。 ### 示例代码:基于注意力机制的路径规划简化实现 以下是个简化的注意力机制在路径规划中的 Python 实现示例,假设我们有个图结构,并希望基于注意力机制选择路径: ```python import torch import torch.nn.functional as F # 假设图结构有 5 个节点,每个节点的 embedding 维度为 64 num_nodes = 5 embedding_dim = 64 # 随机生成节点 embedding node_embeddings = torch.randn(num_nodes, embedding_dim) # 假设当前解码状态 z_t z_t = torch.randn(1, embedding_dim) # 计算注意力得分(点积方式) scores = torch.matmul(z_t, node_embeddings.T) # (1, num_nodes) # 归化得分 scores = scores / torch.sqrt(torch.tensor(embedding_dim)) # 应用 softmax 得到概率分布 attention_weights = F.softmax(scores, dim=-1) # 根据注意力权重选择下个节点 next_node = torch.argmax(attention_weights).item() print(f"Attention weights: {attention_weights}") print(f"Next node to visit: {next_node}") ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值