Transformer之Positional Encoding

文章介绍了Transformer模型如何通过在输入嵌入中添加位置编码来处理序列中的单词顺序,展示了不同编码方式(如Tensor2Tensor实现的交织方法),强调了这种技术对于处理变长序列的重要性。

Representing The Order of The Sequence Using Positional Encoding

正如我们到目前为止所描述的那样,模型中缺少的一件事是解释输入序列中单词顺序的方法。

为了解决这个问题,transformer 在每个输入嵌入中添加一个矢量。这些向量遵循模型学习的特定模式,这有助于它确定每个单词的位置,或序列中不同单词之间的距离。这里的直觉是,将这些值添加到嵌入中,一旦它们投射到Q/K/V矢量中,并在点积 attention 期间,嵌入向量之间会提供有意义的距离。
为了让模型了解单词的顺序,我们添加了位置编码向量
如果我们假设嵌入的维数为4,那么实际的位置编码将是这样的
在这里插入图片描述
这个模式会是什么样子呢?

在下面的图中,每一行对应一个向量的位置编码。所以第一行就是我们对输入序列中第一个单词的嵌入加上的向量。每行包含512个值,每个值在1到-1之间。我们对它们进行了颜色编码,这样图案就可以看到了。
20个单词(行)的位置编码的真实示例,嵌入大小为512(列)。你可以看到它似乎从中心一分为二。这是因为左半部分的值是由一个函数(使用正弦)生成的,右半部分是由另一个函数(使用余弦)生成的。然后将它们连接起来形成每个位置编码向量
本文描述了位置编码的公式(第3.5节)。您可以在 get_timing_signa

Transformer模型中,Embedding和Positional Encoding存在多方面区别。 ### 功能目的 Embedding的主要功能是将离散的输入数据(如单词、字符等)转化为连续的向量表示,让模型能够处理和理解这些数据。比如在自然语言处理里,将每个单词token映射到一个高维向量空间,使语义相近的单词在向量空间中距离较近,以此帮助模型捕捉词汇间的语义关系[^1]。 Positional Encoding则是为了向模型提供序列中元素的位置信息。由于Transformer模型中的Self - Attention机制本身无法感知元素的位置,Positional Encoding能为每个位置生成一个独特的编码,将其与Embedding后的向量相加,从而让模型知晓每个元素在序列中的位置[^1]。 ### 生成方式 Embedding通常是学习得到的。可以随机初始化Embedding矩阵,然后在模型训练过程中,通过反向传播算法不断调整矩阵中的参数,以优化模型性能。例如在PyTorch中,使用`nn.Embedding`类创建Embedding层,在训练时更新其权重参数[^1][^3]。 ```python import torch import torch.nn as nn vocab_size = 1000 embedding_dim = 512 embedding = nn.Embedding(vocab_size, embedding_dim) ``` Positional Encoding有多种生成方式。一种是使用固定的数学公式生成,像Transformer原始论文中使用正弦和余弦函数的组合来生成位置编码: $$ PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\right) \\ PE_{(pos,2i + 1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\right) $$ 其中`pos`是位置,`i`是维度,`d_model`是模型的维度。另一种方式是将位置编码作为可学习的参数,类似于Embedding,在训练过程中进行更新,如BERT模型中的位置编码就是学习出来的,被称为Position Embedding[^2]。 ### 作用对象 Embedding作用于输入序列中的每个元素,不管是单词、字符还是其他离散单元,都会通过Embedding层将其转换为向量。 Positional Encoding作用于Embedding后的向量,在得到Embedding向量后,将Positional Encoding生成的位置编码向量与之相加,得到包含位置信息的向量,供后续的Self - Attention等模块使用。 ### 意义和影响 Embedding有助于模型理解输入元素的语义信息,使得模型能够在向量空间中对语义进行分析和处理,是模型捕捉词汇语义关系的基础。 Positional Encoding则保证了模型在处理序列时能够考虑元素的顺序和位置,对于处理具有顺序依赖的任务(如自然语言处理中的句子理解、机器翻译等)至关重要,能让模型更好地捕捉序列中的长距离依赖关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值