Encoding 详解Transformer中位置编码Positional

  • 电脑网络维修
  • 2024-11-14

提到 Transformer,大家就会联想到位置编码、留意力机制、编码器-解码器结构,本系列教程将探求 Transformer 的不同模块在缺点诊断等信号分类义务中表演什么样角色,究竟哪些模块起作用?

前言

本期基于凯斯西储大学(CWRU)轴承数据,启动 Transformer 中位置编码 (Positional Encoding)的详细引见,同时探求位置编码对缺点分类义务的影响力。

1位置编码相关引见

1.1 数据中的顺序消息

在任何一门言语中,词语的位置和顺序对句子意思表白都是至关关键的。传统的循环神经网络(RNN)中,模型是逐词解决输入序列的,每个时辰的输入依赖于前一个时辰的输入。这种逐序解决的模式使得RNN天生适宜解决序列数据,由于它能够隐式地保管序列中词语的顺序消息。

由于Transformer模型没有RNN(循环神经网络)或CNN(卷积神经网络)结构,句子中的词语都是同时进入网络启动解决,所以没有明白的关于单词在源句子中位置的相对或相对的消息。为了让模型了解序列中每个单词的位置(顺序),Transformer论文中提出了经常使用一种叫做 Positional Encoding(位置编码) 的技术。这种技术经过为每个单词参与一个额外的编码来示意它在序列中的位置,这样模型就能够了解单词在序列中的相对位置。

1.2 位置编码的概念

RNN作为特色提取器,是自带词的前后顺序消息的;而Attention机制并没有思考先后顺序消息,但前后顺序消息对语义影响很大,因此须要经过Positional Embedding这种模式把前后位置消息加在输入的Embedding上。

一句话概括,Positional Encoding就是将位置消息参与(嵌入)到Embedding词向量中,让Transformer保管词向量的位置消息,可以提高模型对序列的了解才干。

1.3 位置编码分类

关于transformer模型的positional encoding有两种干流模式:

(1)相对位置编码:

Learned Positional Embedding方法是最广泛的相对位置编码方法,该方法间接对不同的位置随机初始化一个 postion embedding,加到 word embedding 上输入模型,作为参数启动训练。

(2)相对位置编码

经常使用相对位置编码,不同位置对应的 positional embedding 诚然不同,然而位置1和位置2的距离比位置3和位置10的距离更近,位置1和位置2、位置3和位置4都只相差1,这些表现了相对位置编码。

罕用的相对位置编码方法有Sinusoidal Positional Encoding 和 Learned Positional Encoding。其中,Sinusoidal Positional Encoding 是经过将正弦和余弦函数的不同频率运行于输入序列的位置来计算位置编码;Learned Positional Encoding 是经过学习一组可学习参数来计算位置编码。

(3)复杂编码-Complex embedding

在《Attention is all you need》里提到,Learned Positional Embedding和Sinusoidal Position Encoding两种模式的成果没有显著的差异。在论文 《Encoding Word Oder In Complex Embeddings》,试验结果标明经常使用Complex embedding相较前两种方法有较显著的优化。

1.4 位置向量与词向量

普通来说,可以经常使用向量拼接或许相加的模式,将位置向量和词向量相联合。相当于做了输入数据和位置消息数据的矩阵叠加!

这里,input_embedding 是经过惯例Embedding层,将每一个token的向量维度,也就是输入维度,从数据自身的维度映射到 d_model。由于是相加相关,则 positional_encoding 也是一个 d_model 维度的向量。(原论文中,d_model=512)

关于这个 d_model:

在深度学习和Transformer模型的高低文中,d_model中的“d”通常代表“dimension”,即“维度”的简写。因此,d_model指的是模型中向量的维度大小,这是一个关键的参数,d_model 定义了每层的大小、嵌入层的大小、自留意力机制的大小、前馈网络的输入和输入大小。

选用适宜的d_model对模型的功能有严重影响。假设d_model太小,模型或许不可捕捉到足够的消息;而假设d_model太大,则会参与计算老本和过拟合的危险。因此,在设计模型时须要细心考量d_model的大小。

2位置编码原理

2.1 原了解析

Transformer论文中,经常使用正余弦函数示意相对位置,经过两者乘积获取相对位置。由于正余弦函数具备周期性,可以很好地示意序列中单词的相对位置。咱们以Sinusoidal Positional Encoding为例,启动解说。

首先解释下论文中的公式,并给出对应代码,Positional Encoding 的公式如下:

对应代码成功如下:

class PositionalEncoding(nn.Module):"Implement the PE function."def __init__(self, d_model, dropout, max_len=5000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(p=dropout)# Compute the positional encodings once in log space.pe = torch.zeros(max_len, d_model)position = torch.arange(0, max_len).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2) *-(math.log(10000.0) / d_model))pe[:, 0::2] = torch.sin(position * div_term)pe[:, 1::2] = torch.cos(position * div_term)pe = pe.unsqueeze(0)self.register_buffer('pe', pe)def forward(self, x):x = x + Variable(self.pe[:, :x.size(1)],requires_grad=False)return self.dropout(x)

从公式中可以看出,一个词语的位置编码是由不同频率的余弦函数组成的,这样设计的好处是:pos+k 位置的 positional encoding 可以被 pos 线性示意,表现其相对位置相关。只管Sinusoidal Position Encoding看起来很复杂,然而证实pos+k 可以被 pos 线性示意,只有要用到高中的正弦余弦公式:

关于 pos+k 的 positional encoding:

可以看出,关于 pos+k 位置的位置向量某一维 2

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/5448.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号