基于Transformer的路径规划 第三篇 Attention Is All You Need

上一篇:基于Transformer的路径规划 - 第二篇 合成数据


接上一篇,这几天工作很忙,模型训练好后一直没时间测试,今天抽空全面测试了一下,使用7层Transformer Decoder组成的GPT模型,生成策略采用贪心搜索,随机生成了10000条测试样本,错了94个,成功率只有99.06%左右,这个成功率还是太低了,比我预想的差很多,毕竟场景比较简单。如果简单的场景达不到99.9%以上的成功率,那复杂的场景就不用想了。部分测试结果如下:

图中红色为起始点,蓝色为目标点,绿色为模型生成的路径。第三排第一组不是最优路径。由于合成样本中障碍物的位置过于随机,看起来比较假,可能会导致模型在真实场景中表现不佳。

生成路径失败的原因几乎都是与障碍物发生了碰撞,例如:

“发生碰撞”确实很不应该,因为碰撞与否是最容易学会的规则,我会在接下来的实验中对这个问题进行改进。如何让模型知道宁可绕远路,也绝对绝对不要“发生碰撞”?这个问题其实很有代表性的,不一定是因为模型学习能力不足导致的,可能是因为模型没有意识到“发生碰撞”是不可接受的。

下面说一下模型的设计:

1、词汇表

<PAD>:用于将输入补到固定的长度
<EOS>:表示生成的路径已经结束
<FREE>: 表示无障碍区域
<OBSTACLE>: 表示有障碍区域
<START>:表示起始点
<GOAL>:表示目标点
<PATH>:表示路径区域,仅用于测试
x0~x15:表示生成路径点的x坐标
y0~y15:表示生成路径点的y坐标

2、样本形式

一条训练样本包含16×16+8+128+1=393个token,由以下几部分组成:环境、起始点/目标点坐标、路径坐标。示例如下:

<FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> 
<FREE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> 
<OBSTACLE> <START> <OBSTACLE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> 
<FREE> <FREE> <OBSTACLE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> 
<OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> 
<OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> 
<OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> <FREE> 
<FREE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> 
<FREE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> 
<OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <GOAL> 
<FREE> <FREE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> 
<FREE> <FREE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> 
<OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> 
<FREE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> 
<OBSTACLE> <OBSTACLE> <FREE> <OBSTACLE> <OBSTACLE> <FREE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> 
<OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <FREE> <FREE> <FREE> <FREE> <OBSTACLE> <OBSTACLE> 
x1 y2 x15 y9 <PAD> <PAD> <PAD> <PAD> x1 y3 x1 y4 x1 y5 x1 y6 
x1 y7 x2 y7 x3 y7 x3 y8 x4 y8 x5 y8 x6 y8 x6 y9 
x7 y9 x8 y9 x9 y9 x10 y9 x11 y9 x12 y9 x13 y9 x14 y9 
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> 
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> 
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> 
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> 
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> 
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS>

生成路径的最大长度为128。

3、模型训练

训练过程中,输入前n-1个token,预测后n-1个token。在计算损失时,需要屏蔽掉路径点坐标之外的token。由于模型比较小,使用单GPU训练即可,显存不得低于6G。


这几天在研究过程中,我了解到传统的路径规划算法,例如A*,也是能够获得最优路径的,而且速度也不慢。那基于Transformer的路径规划算法有什么优势呢?这个问题等我以后对路径规划问题有更深的理解之后再来回答吧。由于在研究基于Transformer的路径规划算法之前,我对现有的路径规划算法几乎一无所知,因此文章中难免有错误之处,欢迎读者在评论区指出。


下一篇:基于Transformer的路径规划 - 第四篇 GPT模型优化

原文链接 请勿转载

### 关于Transformer模型中的'Attention is All You Need' 在探讨Transformer架构时,核心理念在于注意力机制的重要性被提升到了前所未有的高度[^1]。传统序列处理依赖循环神经网络(RNN),而Transformer摒弃了RNN结构,完全依靠自注意力(self-attention)机制实现输入到输出的映射。 #### 自注意力机制 自注意力允许模型关注同一序列的不同位置,从而捕捉更丰富的上下文关系。具体来说,在每一层中,对于给定的位置i,计算其与其他所有位置j之间的关联度得分,并据此调整权重分布。这种设计使得远距离依赖能够得到更好的建模[^2]。 #### 编码器-解码器框架下的多头注意力 为了增强表达能力,Transformer采用了多头注意力(multi-head attention)方案。每个头部负责学习不同子空间内的特征表示,最终将多个头部的结果拼接起来作为该层的输出。这样的设置不仅提高了并行化程度,还赋予了模型更强的信息提取能力[^3]。 ```python import torch.nn as nn class MultiHeadedAttention(nn.Module): def __init__(self, h, d_model, dropout=0.1): super(MultiHeadedAttention, self).__init__() assert d_model % h == 0 # We assume d_v always equals d_k self.d_k = d_model // h self.h = h self.linears = clones(nn.Linear(d_model, d_model), 4) self.attn = None self.dropout = nn.Dropout(p=dropout) def forward(self, query, key, value, mask=None): ... ``` #### 前馈神经网络与残差连接 除了独特的注意力模块外,标准的Transformer还包括基于位置的全连接前馈网络(position-wise feed-forward networks)[^5]。这些组件通常会配合跳跃连接(skip connections)一起工作,形成残差网络(residual network),有助于缓解深层网络训练过程中的梯度消失问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值