首页 > 其他分享 >注意力机制【6】-transformer 和 Positional Encoding

注意力机制【6】-transformer 和 Positional Encoding

时间:2022-10-18 13:45:24浏览次数:35  
标签:transformer Encoding self torch Positional pe 句子

transformer 是最新的处理 序列到序列 问题的架构,单纯由 self-attention 组成,其优良的可并行性以及可观的表现提升,让它在NLP领域大受欢迎,并引入到cv领域。

transformer vs CNN RNN

cnn 利用的是卷积,与 transformer 比较的话,卷积可理解为 局部注意力;

rnn 也是处理序列问题的,把 rnn 的循环结构换成 self-attention 就变成 transformer 了;

下图是 transformer 的网络结构图

Position Encoding

为什么需要 Position Encoding

在任何语言中,词语的位置和顺序对句子的意思都至关重要;

在 RNN 中,以序列的模式逐个处理句子中的词语,这种网络结构天然保存了词语的顺序信息;

但在 词嵌入 中,单词并不是以 词在 句子中的顺序进行 embedding 的,而是很随意的把所有词进行 embedding,而不考虑词的顺序;

transformer 的输入其实就是 词向量,而词向量已经丧失了词的位置和顺序关系,故需加入该信息,就是 Position Encoding;

一句话概括,Positional Encoding就是句子中词语相对位置的编码,让Transformer保留词语的位置信息。

 

怎么做 Position Encoding

要加入 词语 在 句子 中的 位置信息,有几种思路:

1. 给每个词语添加一个线性增长的时间戳:即每个词一个下标,如 从0开始,第一个词0,第二个词1,依次...,第N个词N,

----但是 每个句子长度不一,如果句子很长,N会很大,Position Encoding 和 Word Embedding 合并后,模型可能更多关注 Position Encoding(大),这肯定是有问题的;

2. 归一化的时间戳:既然长句子N很大,那归一化处理,把 encoding 限制在 [0 1]之间呢?

----这会造成不同长度的句子,相邻词之间的步长不一致,使得 encoding 无法正确描述 词与词 之间的关系;

故理想 position encoding 应具备以下条件

对于每个位置(时间节点)的词语,都具备独一无二的编码

编码有一定的值域范围,避免比 word embedding 大很多,使得模型倾向于 position

需要体现一定的相对次序关系,并且在一定范围内的编码差异不应该依赖于文本长度,具有一定translation invariant平移不变性

 

论文公式

Pt 最终是一个 值域在 [-1,1] 之间的高维矩阵(向量)

 

代码实现

只是实现了上面的公式,参考一下就行了

class PositionalEncoding(nn.Module):

    def __init__(self, d_model, 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)
        #pe.requires_grad = False
        self.register_buffer('pe', pe)

    def forward(self, x):
        return x + self.pe[:x.size(0), :]

 

论文为什么这么做?

第二篇参考资料简单解释了一下,我觉得没有证明为什么,只是形象比喻了一下,仅供参考吧

               128维位置编码2D示意图

 

 

 

 

参考资料:

https://blog.csdn.net/qq_40744423/article/details/121930739  详解Transformer中的Positional Encoding

https://zhuanlan.zhihu.com/p/338592312  一文教你彻底理解Transformer中Positional Encoding

https://www.jianshu.com/p/251a0530bc0e  Transformer中的positional encoding

标签:transformer,Encoding,self,torch,Positional,pe,句子
From: https://www.cnblogs.com/yanshw/p/16740972.html

相关文章

  • 面经:什么是Transformer位置编码?
     Datawhale干货 作者:陈安东,中央民族大学,Datawhale成员过去的几年里,Transformer大放异彩,在各个领域疯狂上分。它究竟是做什么,面试常考的Transformer位置编码暗藏什么玄机?本......
  • useUnicode=true&characterEncoding=UTF-8 的作用
    我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8,但是问什么要添加呢?添加的作用是:指定字符的编码、解码格式。例如:mysql数......
  • 【753】Transformer模型
    参考:李宏毅-Transformer【动画细致,有助于理解Self-Attention】参考:TheIllustratedTransformer【详细到一些参数,动画也很好】参考:Transformer论文逐段精读【论文精读】......
  • 【自然语言处理(NLP)】基于Transformer的英文自动文摘
    【自然语言处理(NLP)】基于Transformer的英文自动文摘作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产......
  • 【自然语言处理(NLP)】基于Transformer的英文自动文摘
    【自然语言处理(NLP)】基于Transformer的英文自动文摘作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产......
  • Vicinity Vision Transformer概述
    0.前言相关资料:arxivgithub论文解读论文基本信息:发表时间:arxiv2022(2022.6.21)1.针对的问题视觉transformer计算复杂度和内存占用都是二次......
  • 【自然语言处理(NLP)】基于Transformer的中-英机器翻译
    【自然语言处理(NLP)】基于Transformer的中-英机器翻译作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与......
  • Vision Transformer 的学习与实现
     VisionTransformer的学习与实现Transformer最初被用于自然语言处理领率,具体可见论文AttentionIsAllYouNeed。后来被用于计算机视觉领域,也取得了十分惊艳的结果(A......
  • CVPR2022论文速递(2022.4.20)!共13篇!Transformer+Person ReID
    整理:AI算法与图像处理CVPR2022论文和代码整理:https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo欢迎关注公众号AI算法与图像处理,获取更多干货:​大家好,  最近正......
  • CVPR2022论文速递(2022.4.13)!共17篇!GAN/transformer/多模态等
    整理:AI算法与图像处理CVPR2022论文和代码整理:https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo欢迎关注:​大家好,  最近正在优化每周分享的CVPR论文,目前考虑......