【深度学习】transformer之 Positional Encoding
·
1、为什么要使用位置编码?
首先我们来讲一下attention。
优点:
- 解决了长序列依赖问题
- 可以并行操作
缺点: - 开销变大了
- 位置编码问题,既然可以并行,也就是说,词语之间不存在顺序关系(打乱一句话,这句话里的每个词的词向量依然不会变)。
注意:
- 与RNN相比,RNN是一个字一个字的输入,自然每个字的循序关系信息就会保留下来,在Encoder中,一句子的每一个字(词)是并行计算的(下一节解释),所以我们在输入的时候需要提前引入位置信息。
- 随着token长度的增加,越靠后的权重越强,越靠前的权重越弱,
2、位置编码的做法
这样通过与位置编码(positional encoding)相加,则让输入向量x具有了位置信息。
具体做法
做法1:
i为偶数:
PE(pos,2i)=sin(pos100002idmodel)PE_{(pos, 2i)} = sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}})PE(pos,2i)=sin(10000dmodel2ipos)
i为奇数:
PE(pos,2i+1)=cos(pos100002idmodel)PE_{(pos, 2i+1)} = cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})PE(pos,2i+1)=cos(10000dmodel2ipos)

奇数的位置是cos, 偶数的位置是sin
i是维度下标,d是总维度


魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)