transformer学习笔记:Positional Encoding(位置编码)

这篇具有很好参考价值的文章主要介绍了transformer学习笔记:Positional Encoding(位置编码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于任何一门语言,单词在句子中的位置以及排列顺序是非常重要的,它们不仅是一个句子的语法结构的组成部分,更是表达语义的重要概念。一个单词在句子的位置或排列顺序不同,可能整个句子的意思就发生了偏差。举个例子来说:
do not like the story of the movie, but I do like the cast.
do like the story of the movie, but I do not like the cast.

上面这两句话所使用的的单词完全一样,但是所表达的句意却截然相反。那么,引入词序信息有助于区别这两句话的意思。

什么是位置编码

transformer学习笔记:Positional Encoding(位置编码)

 在transformer的encoder和decoder的输入层中,使用了Positional Encoding,使得最终的输入满足:

input = input_embedding + positional_embedding

在transformer模型中,输入的是一排排的句子,对于人类来说可以很容易的看出句子中每个单词的顺序,即位置信息,例如:

(1)绝对位置信息。a1是第一个token,a2是第二个token......
(2)相对位置信息。a2在a1的后面一位,a4在a2的后面两位......
(3)不同位置间的距离。a1和a3差两个位置,a1和a4差三个位置....

但是这对于机器来说却是一件很困难的事情,transformer中的self-attention能够学习到句子中每个单词之间的相关性,关注其中重要的信息,但是却无法学习到每个单词的位置信息,所以说我们需要在模型中另外添加token的位置信息。

Transformer模型抛弃了RNN、CNN作为序列学习的基本模型。我们知道,循环神经网络本身就是一种顺序结构,天生就包含了词在序列中的位置信息。当抛弃循环神经网络结构,完全采用Attention取而代之,这些词序信息就会丢失,模型就没有办法知道每个词在句子中的相对和绝对的位置信息。因此,有必要把词序信号加到词向量上帮助模型学习这些信息,位置编码(Positional Encoding)就是用来解决这种问题的方法。

位置编码(Positional Encoding)是一种用词的位置信息对序列中的每个词进行二次表示的方法,让输入数据携带位置信息,是模型能够找出位置特点。正如前文所述,Transformer模型本身不具备像RNN那样的学习词序信息的能力,需要主动将词序信息喂给模型。那么,模型原先的输入是不含词序信息的词向量,位置编码需要将词序信息和词向量结合起来形成一种新的表示输入给模型,这样模型就具备了学习词序信息的能力。

位置编码的计算

在transformer文章中,位置编码采用的是正余弦编码:

transformer学习笔记:Positional Encoding(位置编码)

其中,PE表示位置编码,指当前字符在句子中的位置(如:“你好啊”,这句话里面“你”的),指的是word embedding的长度(比如说:查表得到“民主”这个词的word embedding为,则),的取值范围是:。当的值为偶数是使用上面那条公式,当的值为奇数时使用下面那条公式。

从图像的角度理解,可以认为pos代表图像的行,i代表当前行对应的列,这样就可以对图像中的每一个像素点进行编码了。

 选用三角函数作为位置编码计算公示的原因

在说明为何选取三角函数的形式来计算Positional Encoding之前,不妨先来选取一个简单的Positional Encoding表达方法。给定一个长为的文本,最简单的位置编码就是计数,即使用作为文本中每个字的位置编码(例如第2个字的Positional Encoding=[1,1,...,1])。但是这种编码有两个缺点:1. 如果一个句子的字数较多,则后面的字比第一个字的Positional Encoding大太多,和word embedding合并以后难免会出现特征在数值上的倾斜;2. 这种位置编码的数值比一般的word embedding的数值要大,对模型可能有一定的干扰。
为了解决上述问题,加入归一化操作,最简单的操作就是将所有值同时初以一个常数T,就像这样:(例如第2个字的Positional Encoding=[1/T,1/T,...,1/T])。这样固然使得所有位置编码都落入区间,但是问题也是显著的:不同长度文本的位置编码步长是不同的,在较短的文本中紧紧相邻的两个字的位置编码差异,会和长文本中相邻数个字的两个字的位置编码差异一致,如下图所示。

transformer学习笔记:Positional Encoding(位置编码)

 从上图中可以看到第一句的第2个字pos=0.5,第二句中的第5个字pos=0.5,虽然两者的pos值是一样的,但是很明显两者之间位置差异是很大的。

由于上面两种方法都行不通,于是谷歌的科学家们就想到了另外一种方法——使用三角函数。

优点是:

1、可以使PE分布在区间。

2、不同语句相同位置的字符PE值一样(如:当pos=0时,PE=0)。

缺点是:

三角函数具有周期性,可能出现pos值不同但是PE值相同的情况。

于是我们可以在原始PE的基础上再增加一个维度:,虽然还是可能出现pos值不同但是PE值相同的情况,但是整个PE的周期是不是明显变长了。那如果我们把PE的长度加长到和word embedding一样长呢?就像,PE的周期就可以看成是无限长的了,换句话说不论pos有多大都不会出现PE值相同的情况。然后谷歌的科学家们为了让PE值的周期更长,还交替使用sin/cos来计算PE的值,于是就得到了开头的那个计算公式:

transformer学习笔记:Positional Encoding(位置编码)

 

参考文献
Transformer学习笔记一:Positional Encoding(位置编码)

一文读懂Transformer模型的位置编码

Transformer论文解读一(Transformer)文章来源地址https://www.toymoban.com/news/detail-405242.html

到了这里,关于transformer学习笔记:Positional Encoding(位置编码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Transformer架构:位置编码

    2017年,Google的Vaswani 等人提出了一种新颖的纯注意力序列到序列架构,闻名学术界与工业界的 Transformer 架构横空出世。它的可并行化训练能力和优越的性能使其成为自然语言处理领域(Natural Language Processing,NLP)以及计算机视觉领域(Computer Vision,CV)研究人员的热门选择。

    2023年04月27日
    浏览(32)
  • Transformer 位置编码

    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 Attention Is All You Need 是 Google 于 2017 年发表的

    2024年01月16日
    浏览(25)
  • 【NLP】transformers的位置编码

            本文是“实现的变压器”系列的第二篇。它从头开始引入位置编码。然后,它

    2024年02月16日
    浏览(28)
  • Transformer正余弦位置编码理解

    在学习Transformer模型过程中不可避免的一个过程便是要对序列进行位置编码,在Transformer中分为固定位置编码与可学习的位置编码,其一般采用固定位置编码中的正余弦位置编码方式。 今天便以DETR模型为例,介绍正余弦编码的原理与实现过程。 首先给出其公式: 其中i指的是

    2024年02月07日
    浏览(28)
  • Swin Transformer之相对位置编码详解

    目录 一、概要 二、具体解析 1. 相对位置索引计算第一步  2. 相对位置索引计算第二步 3. 相对位置索引计算第三步      在 Swin Transformer 采用了 相对位置编码 的概念。       那么相对位置编码的作用是什么呢?           解释: 在解释相对位置编码之前,我们需要先了解

    2023年04月16日
    浏览(28)
  • Transformer的PE(position embedding),即位置编码理解

    最近要搞理论学习了,先前搞了大半年的工程,又要捡起一些理论原理,现在还是从transformer熟悉理解一下,争取吃透。 关于transformer的经典介绍和资料也一大堆,我就不展开来讲了,碰到了一些一时没太想明白的问题,就记一下,也当是重新理解一遍。 transformer的输入要么

    2024年02月16日
    浏览(54)
  • 【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式

    简单来说,稀疏编码就是把输入向量(信号)/ 矩阵(图像)表示为稀疏的系数向量和一组超完备基向量(字典)的线性组合。 因此,稀疏编码通过上述方式以后, 就可以将输入数据重构为稀疏的向量 :即向量内部元素满足只有很少的几个非零元素或只有很少的几个远大于

    2024年02月12日
    浏览(68)
  • 【动手深度学习-笔记】注意力机制(四)自注意力、交叉注意力和位置编码

    紧接上回:【动手深度学习-笔记】注意力机制(三)多头注意力 在注意力机制下,我们将词元序列输入注意力汇聚中,以便同一组词元同时充当查询、键和值。 具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。 像这样的,查询、键和值来自同一组输入的

    2024年01月16日
    浏览(34)
  • 【人工智能】Transformer 模型数学公式:自注意力机制、多头自注意力、QKV 矩阵计算实例、位置编码、编码器和解码器、常见的激活函数等

    Transformer模型由多个编码器和解码器层组成,其中包含自注意力机制、线性层和层归一化等关键构造模块。虽然无法将整个模型完美地表示为单个数学公式,但我们可以提供一些重要构造模块的数学表示。以下是使用LaTeX格式渲染的部分Transformer关键组件的数学公式: 自注意力

    2024年02月14日
    浏览(41)
  • 深入理解Transformer,兼谈MHSA(多头自注意力)、Cross-Attention(交叉注意力)、LayerNorm、FFN、位置编码

    Transformer其实不是完全的Self-Attention(SA,自注意力)结构,还带有Cross-Attention(CA,交叉注意力)、残差连接、LayerNorm、类似1维卷积的Position-wise Feed-Forward Networks(FFN)、MLP和Positional Encoding(位置编码)等 本文涵盖Transformer所采用的MHSA(多头自注意力)、LayerNorm、FFN、位置编

    2024年04月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包