Transfomer位置编码理解
论文地址: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位置编码理解相关推荐
- transformer中相对位置编码理解
对于一副图像,位置信息占有非常重要的地位,ViT中用了绝对位置编码,Swin中用到了相对位置编码.看了Swin的源码,参考了https://blog.csdn.net/qq_37541097/arti ...
- Transformer正余弦位置编码理解
在学习Transformer模型过程中不可避免的一个过程便是要对序列进行位置编码,在Transformer中分为固定位置编码与可学习的位置编码,其一般采用固定位置编码中的正余弦位置编码方式. 今天便以 ...
- 有关swin transformer相对位置编码的理解:
有关swin transformer相对位置编码的理解: 假设window_size是7*7 那么窗口中共有49个patch,共有49*49个相对位置,每个相对位置有两个索引对应x和y两个方向,每个索 ...
- 【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码
目录 前言 一.注意力机制:Attention 二.自注意力机制:Self-Attention 三.多头注意力机制:Multi-Head Self-Attention 四.位置编码:Positiona ...
- 举例理解transformer中的位置编码
文章目录 1. transformer结构图 2. 位置编码的作用 3. 位置编码的计算 1. transformer结构图 在transformer的结构图中,由一个"Position ...
- Transformer课程:理解语言的 Transformer 模型-位置编码及掩码 (Masking)
Transformer课程:理解语言的 Transformer 模型-位置编码及掩码 (Masking) 目录 位置编码(Positional encoding) 掩码 (Masking) 参考文献 ...
- 5分钟理解transformer模型位置编码
Bert模型是自然语言处理方面里程碑式的进步,其核心是transformer层, 而transformer采用自注意力编码器摒弃了循环网络,循环网络天生的顺序信息在自注意力编码器中没有了,而语言往往是 ...
- 深入理解transformer中的位置编码
文章目录 总览 问题1 问题2 问题3 问题4 问题5 问题6 总览 我们今天需要讲解transformer中的位置编码,这其实属于进阶内容.既然你会到这里,我默认你已经看过了transformer的 ...
- 面经:什么是Transformer位置编码?
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈安东,中央民族大学,Datawhale成员 过去的几年里,Tra ...
最新文章
- php session存入redis
- kinect c++
- Serial.println()和Serial.print() (Arduino编程)
- js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
- 小米5点位图_最新!地铁5号线、6号线部分车站文化墙设计出炉!你选哪个?
- (c语言)输入一个数,将该数按原规律插入到有序数组中
- Linux必备命令 - 常用命令集
- 高校固定资产折旧使用计算机,高校固定资产管理系统功能介绍
- DIY年轻人的第一辆电动滑板车
- 2021-07-19支付宝扫码点餐推广怎么做(干货来了)
- 区块链开发(五)区块链ICO:互联网进化的驱动力
- 网络基础知识 — 设备
- [转载]内存管理与TLB
- Ubuntu中Python无法显示图片
- Win10自动修复失败,无法正常启动
- Qt中添加背景图片的方法
- 编程计算下面的分段函数: y=e​√​x​​​​​−1 (0<x<1) y=|x|+2 (3≤x≤4) y=sin(x​2​​) (当x取其他值时)
- (Stockx)爬虫Requests 403(Please verify you are a human)解决方法
- vue css变量实现多主题皮肤切换
- 2022年全球与中国无人机软件行业发展趋势及投资战略分析报告