Transformer:Position Embedding解读

Transformer结构因并行计算丢失文本顺序,通过Position Embedding解决。Transformer使用正余弦函数生成固定差值的编码向量,能泛化到任意长度句子,且与Word Embedding相加时不混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在RNN里,句子被分成一个个单词依次送入网络,这样自带句子的输入自带文本顺序。但是Transformer结构将所有位置的单词一起输入网络,这样就会丧失文本的顺序。所以需要Position Embedding 来解决这个问题。

首先会想到的是给不同位置的单词赋予一个[0,1]之间的值。0代表开头的单词,1 代表结尾的单词。但是由于我们无法提前预知下一段话有多少单词,所以相邻单词位置编码数值的差值会随着句子长度的变化而变化。

另外一种想法是线性地为每个位置的单词安排编码值。即第一个单词为1,第二个单词为2,以此类推。这样做的问题有:

  1. 编码值可能会变得很长
  2. 测试集里的句子可能出现训练集里没出现过的长度。

这都会影响网络的泛化性。因此位置编码需要满足以下准则。

  • 每个位置的编码值应该是唯一的。
  • 相邻位置的编码值的差应该是保持不变的,无论句子有多长。
  • 编码方法要能轻松泛化到更长的句子。
  • 编码方式必须是确定的。

Transformer中的编码方法
Transformer中的Position-Embedding,满足上述所有准则。首先每个位置的编码不是一个数而是一个d-维向量,令 t t t表示输入句子里想要编码的位置。 p t → ∈ R d \overrightarrow{p_{t}} \in \mathbb{R}^{d} pt Rd表示该位置的编码向量。 p t → ( i ) = f ( t ) ( i ) : = { sin ⁡ ( ω k ⋅ t ) ,  if  i = 2 k cos ⁡ ( ω k ⋅ t ) ,  if  i = 2 k + 1 \overrightarrow{p_{t}}^{(i)}=f(t)^{(i)}:=\left\{\begin{array}{ll} \sin \left(\omega_{k} \cdot t\right), & \text { if } i=2 k \\ \cos \left(\omega_{k} \cdot t\right), & \text { if } i=2 k+1 \end{array}\right. pt (i)=f(t)(i):={sin(ωkt),cos(ωkt), if i=2k if i=2k+1
i i i为向量的位置编号。 ω k = 1 1000 0 2 k / d \omega_{k}=\frac{1}{10000^{2 k / d}} ωk=100002k/d1
可以看到,正/余弦函数的频率是随着编码向量维度的升高递减的。直观的表示如下 p t → = [ sin ⁡ ( ω 1 ⋅ t ) cos ⁡ ( ω 1 ⋅ t ) sin ⁡ ( ω 2 ⋅ t ) cos ⁡ ( ω 2 ⋅ t ) ⋮ sin ⁡ ( ω d / 2 ⋅ t ) cos ⁡ ( ω d / 2 ⋅ t ) ] d × 1 \overrightarrow{p_{t}}=\left[\begin{array}{c} \sin \left(\omega_{1} \cdot t\right) \\ \cos \left(\omega_{1} \cdot t\right) \\ \sin \left(\omega_{2} \cdot t\right) \\ \cos \left(\omega_{2} \cdot t\right) \\ \\ \vdots \\ \sin \left(\omega_{d / 2} \cdot t\right) \\ \cos \left(\omega_{d / 2} \cdot t\right) \end{array}\right]_{d \times 1} pt = sin(ω1t)cos(ω1t)sin(ω2t)cos(ω2t)sin(ωd/2t)cos(ωd/2t) d×1

解释
你可能会好奇为什么结合正弦和余弦函数就可以表示不同的位置。实际上这种方式十分常见,如下。
在这里插入图片描述
通过一个4维的二进制向量来表示不同的位置值。最低位的值变化是十分快的,而最高位的值变化十分缓慢。但是这种方式在float的世界看来是十分奢侈的,因为其全都是整数。因此我们用正余弦函数来模拟这种变化。
在这里插入图片描述
上图是一个128维的位置编码,编码长度为50的句子的结果图。可以看到最左边的也是编码向量的最低位变化的十分快,而高位的编码值几乎不变。

另外之所以选用这种编码方式是因为它可以让模型轻松地学习到不同位置之间的相关性即
P E pos  + k \mathrm{PE}_{\text {pos }+\mathrm{k}} PEpos +k可以由 P E pos \mathrm{PE}_{\text {pos}} PEpos线性表示。即假设频率为 ω k \omega_{k} ωk,则存在一个线性变化函数 M M M,有 M ⋅ [ sin ⁡ ( ω k ⋅ t ) cos ⁡ ( ω k ⋅ t ) ] = [ sin ⁡ ( ω k ⋅ ( t + ϕ ) ) cos ⁡ ( ω k ⋅ ( t + ϕ ) ) ] M \cdot\left[\begin{array}{l}\sin \left(\omega_{k} \cdot t\right) \\ \cos \left(\omega_{k} \cdot t\right)\end{array}\right]=\left[\begin{array}{c}\sin \left(\omega_{k} \cdot(t+\phi)\right) \\ \cos \left(\omega_{k} \cdot(t+\phi)\right)\end{array}\right] M[sin(ωkt)cos(ωkt)]=[sin(ωk(t+ϕ))cos(ωk(t+ϕ))]

最后一个问题,为什么Word Embedding和Position Embedding相加后不会混淆?
可能是因为,在position embedding中,只有较低位被使用,所以模型就不会再Word Embedding的低位储存语义信息,以避免混淆。

### 回答1: Transformer位置编码是一种用于在Transformer模型中对输入序列中每个位置进行编码的技术。它通过将每个位置映射到一个唯一的向量表示来实现。这些向量表示被添加到输入嵌入中,以便Transformer模型可以更好地理解输入序列中不同位置之间的关系。Transformer位置编码通常使用正弦和余弦函数来生成向量表示,这些函数具有周期性和可重复性,可以帮助模型更好地处理输入序列中的周期性模式。 ### 回答2: Transformer是一种用于处理序列数据的神经网络模型,它在自然语言处理领域的应用非常广泛。Transformers中的位置编码(position encoding)是一个非常重要的概念,它是该模型在处理文本序列时能够保留位置信息的关键。 位置编码是通过一种特殊的方式将每个输入序列中的单词位置信息嵌入到向量空间中。在Transformer中,位置编码是通过一个矩阵生成的,这个矩阵的维度大小为(序列长度 × 向量维度),其中序列长度是输入序列中单词的数量,而向量维度则是每个位置编码向量的维度。这个矩阵中的每一行都代表着一个位置编码向量,在输入序列中,每个单词都对应一个位置编码向量,通过将这个位置编码向量加入到单词向量中,模型可以在处理文本序列时保留单词的位置信息。 通常,位置编码向量是通过计算一个一组三角函数的结果来获得的。这个函数的参数是位置和索引,位置指的是在序列中的位置,而索引则是维度,它可以用来控制位置编码向量的不同特征,例如奇偶性和周期性等等。在计算这个函数的结果时,位置的信息被嵌入到向量中,并且这个位置编码向量会通过加权和的形式被嵌入到输入向量中,从而影响模型的输出。 总之,Transformer中的位置编码是非常重要的一步,它可以帮助模型保存输入序列中的位置信息,从而更好地处理序列数据。位置编码向量是通过一个特殊的函数计算得出的,它是由位置信息和索引信息组成的,通过加入到输入向量中,使得输入的向量不仅包含单词本身的信息,同时也包含了位置信息。 ### 回答3: Transformer 的编码器和解码器在进行自注意力机制计算时,需要为每一个输入或输出单词分配一个位置编码,以便模型在计算注意力时能够准确反映文本中的语序信息。这个位置编码的目的是为了能够让模型能够明确区分不同位置的单词,从而保留这些单词在文本中的相对位置关系。 位置编码是作为输入到模型中的一个向量,其维度和单词的嵌入向量的维度一致。在Transformer中,提出了两种位置编码的方式: 基于正弦函数和基于学习的方式。 基于正弦函数的位置编码,其计算公式如下: $PE_{pos,2i}=sin(\frac{pos}{10000^{2i/d_{model}}})$ $PE_{pos,2i+1}=cos(\frac{pos}{10000^{2i/d_{model}}})$ 其中,$pos$表示单词的位置,$i$和$d_{model}$表示位置向量的对应维度。 基于学习的方式,就是通过训练来学得位置编码,这种方式可以在避免手工编码时引入的误差的同时,也可以更好地适应特定任务的要求。 无论使用哪种方式,位置编码的作用都是为了让模型能够区分不同位置的单词以及它们在文本中的相对位置关系,从而更好地捕捉到文本中的序列信息,提高模型的性能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值