Transformer模型-Positional Encoding位置编码的简明介绍

本文介绍了Transformer模型中位置编码的重要性,如何通过正弦和余弦函数为每个位置生成独特的向量,以及这种设计如何帮助模型理解和处理自然语言任务中的词序和依赖关系。
摘要由CSDN通过智能技术生成

今天介绍transformer模型的positional encoding 位置编码

背景

位置编码用于为序列中的每个标记或单词提供一个相对位置。在阅读句子时,每个单词都依赖于其周围的单词。例如,有些单词在不同的上下文中具有不同的含义,因此模型应该能够理解这些变化以及每个单词所依赖的上下文。一个例子是单词“trunk”。在一种情况下,它可以用来指大象用鼻子喝水;在另一种情况下,它可能指的是被闪电击中的树干。

由于模型使用长度为d_model的嵌入向量来表示每个单词,因此任何位置编码都必须与之兼容。使用整数来表示位置似乎很自然,比如第一个标记为0,第二个标记为1,以此类推。然而,这个数字很快就会增长,并且不容易添加到嵌入矩阵中。相反,我们为每个位置创建一个位置编码向量,这意味着可以创建一个位置编码矩阵来表示单词可能占据的所有位置。

在“Attention Is All You Need”这篇论文中,为了捕捉这种位置信息,作者提出了一种特殊的位置编码方法,利用正弦和余弦函数为序列中的每个位置生成唯一的向量。这种方法不仅避免了整数位置编码可能导致的问题(如快速增长的数值和难以整合到嵌入矩阵中),而且还为每个位置提供了标准化的、无需额外训练的独特表示。通过这种方式,模型可以更好地理解序列中单词的顺序和相互依赖关系,从而提高其处理自然语言任务的能力。

公式:


举例:

pos 代表位置,i 代表维度。

对于每个位置编码向量,每两个元素为一组,将偶数位置的元素设置为PE(pos, 2i),将奇数位置的元素设置为PE(pos, 2i+1)。然后重复这个过程,直到向量中有d_model个元素为止。

我们选择这个函数是因为我们假设它能让模型更容易地学习到按相对位置进行关注。对于任何固定的偏移量 kPE_{pos+k} 都可以表示为 PE_{pos} 的线性函数。这意味着模型可以通过学习不同位置编码之间的线性关系来理解序列中单词的相对位置。这种方法的好处是,无论序列有多长,模型都可以有效地利用位置信息,因为位置编码是通过正弦和余弦函数连续生成的,而不是依赖于离散的、有限的位置标记。

最后,把位置编码被添加到嵌入向量。

完整的流程如下:

原文链接:

https://medium.com/@hunter-j-phillips/positional-encoding-7a93db4109e6

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ankie(资深技术项目经理)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值