论文地址:https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf

1. 公式描述

P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d m o d e l ) \begin{aligned} P E_{(p o s, 2 i)} & =\sin \left(p o s / 10000^{2 i / d_{\mathrm{model}}}\right) \\ P E_{(p o s, 2 i+1)} & =\cos \left(p o s / 10000^{2 i / d_{\mathrm{model}}}\right) \end{aligned} PE(pos,2i)​PE(pos,2i+1)​​=sin(pos/100002i/dmodel​)=cos(pos/100002i/dmodel​)​
其中: d m o d e l d_{model} dmodel​ 表示向量维度, i i i词向量某个维度的索引, p o s pos pos 词的位置索引。

2.公式转换:

先做一下公式转换
1 1000 0 2 i / d model  = e log ⁡ 1 1000 0 2 i / d model  = e − 2 i / d model  ∗ log ⁡ 10000 = e 2 i ∗ ( − log ⁡ 10000 / d model  ) \frac{1} {10000^{2i / d_{\text {model }}}}=e^{{\log \frac{1} {10000^{ 2 i / d_{\text {model }}}}}}=e^{-2 \mathrm{i} / d_{\text {model }} * \log 10000}=e^{2 i *\left(-\log 10000 / d_{\text {model }}\right)} 100002i/dmodel ​1​=elog100002i/dmodel ​1​=e−2i/dmodel ​∗log10000=e2i∗(−log10000/dmodel ​)

3. 代码实现

# https://pytorch.org/tutorials/beginner/transformer_tutorial.html
class PositionalEncoding(nn.Module):def __init__(self, d_model, dropout=0.1, max_len=5000):super(PositionalEncoding, self).__init__()pe = torch.zeros(max_len, d_model)position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-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).transpose(0, 1)self.register_buffer('pe', pe)def forward(self, x):x = x + self.pe[:x.size(1), :]. squeeze(1)return x

4.个人理解

位置信息是固定值,是不可以学习的

参考资料:
https://pytorch.org/tutorials/beginner/transformer_tutorial.html
https://zhuanlan.zhihu.com/p/106644634

Transfomer位置编码理解相关推荐

  1. transformer中相对位置编码理解

    对于一副图像,位置信息占有非常重要的地位,ViT中用了绝对位置编码,Swin中用到了相对位置编码.看了Swin的源码,参考了https://blog.csdn.net/qq_37541097/arti ...

  2. Transformer正余弦位置编码理解

    在学习Transformer模型过程中不可避免的一个过程便是要对序列进行位置编码,在Transformer中分为固定位置编码与可学习的位置编码,其一般采用固定位置编码中的正余弦位置编码方式. 今天便以 ...

  3. 有关swin transformer相对位置编码的理解:

    有关swin transformer相对位置编码的理解: 假设window_size是7*7 那么窗口中共有49个patch,共有49*49个相对位置,每个相对位置有两个索引对应x和y两个方向,每个索 ...

  4. 【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

    目录 前言 一.注意力机制:Attention 二.自注意力机制:Self-Attention 三.多头注意力机制:Multi-Head Self-Attention 四.位置编码:Positiona ...

  5. 举例理解transformer中的位置编码

    文章目录 1. transformer结构图 2. 位置编码的作用 3. 位置编码的计算 1. transformer结构图 ​ 在transformer的结构图中,由一个"Position ...

  6. Transformer课程:理解语言的 Transformer 模型-位置编码及掩码 (Masking)

    Transformer课程:理解语言的 Transformer 模型-位置编码及掩码 (Masking) 目录 位置编码(Positional encoding) 掩码 (Masking) 参考文献 ...

  7. 5分钟理解transformer模型位置编码

    Bert模型是自然语言处理方面里程碑式的进步,其核心是transformer层, 而transformer采用自注意力编码器摒弃了循环网络,循环网络天生的顺序信息在自注意力编码器中没有了,而语言往往是 ...

  8. 深入理解transformer中的位置编码

    文章目录 总览 问题1 问题2 问题3 问题4 问题5 问题6 总览 我们今天需要讲解transformer中的位置编码,这其实属于进阶内容.既然你会到这里,我默认你已经看过了transformer的 ...

  9. 面经:什么是Transformer位置编码?

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈安东,中央民族大学,Datawhale成员 过去的几年里,Tra ...

最新文章

  1. php session存入redis
  2. kinect c++
  3. Serial.println()和Serial.print() (Arduino编程)
  4. js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
  5. 小米5点位图_最新!地铁5号线、6号线部分车站文化墙设计出炉!你选哪个?
  6. (c语言)输入一个数,将该数按原规律插入到有序数组中
  7. Linux必备命令 - 常用命令集
  8. 高校固定资产折旧使用计算机,高校固定资产管理系统功能介绍
  9. DIY年轻人的第一辆电动滑板车
  10. 2021-07-19支付宝扫码点餐推广怎么做(干货来了)
  11. 区块链开发(五)区块链ICO:互联网进化的驱动力
  12. 网络基础知识 — 设备
  13. [转载]内存管理与TLB
  14. Ubuntu中Python无法显示图片
  15. Win10自动修复失败,无法正常启动
  16. Qt中添加背景图片的方法
  17. 编程计算下面的分段函数: y=e​√​x​​​​​−1 (0<x<1) y=|x|+2 (3≤x≤4) y=sin(x​2​​) (当x取其他值时)
  18. (Stockx)爬虫Requests 403(Please verify you are a human)解决方法
  19. vue css变量实现多主题皮肤切换
  20. 2022年全球与中国无人机软件行业发展趋势及投资战略分析报告

热门文章

  1. SaltStack介绍及安装
  2. 【数学建模】层次分析(MatlabPython代码实现)
  3. AOSP EXTENDED 4.7 红米Note 4X 非官方 17/10/2017 最后 牛轧糖自由版本 发布
  4. limit 与offset的用法
  5. NodeJs01 文件浏览器
  6. Latex公式编辑器的使用说明
  7. 智能眼镜产业现状及开发者的新机遇
  8. 详解usbmon抓取的log各字段的含义
  9. 论文中著名会议和期刊的一些介绍(持续更新中)
  10. 五金件视觉检测_五金配件视觉检测_五金冲压件视觉检测