Transformer中的位置编码(PE,position)

参考链接
[1]https://blog.csdn.net/qq_34771726/article/details/102918440?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=40f9420b-8d9a-4faa-a5f3-41e4befda63d&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

[2]https://zhuanlan.zhihu.com/p/266311690

昨天看了一下Prof.李宏毅关于transformer模型的讲解,对positional encoding(位置编码)比较在意,思考加查找一些资料,特此记录。

对transformer而言,最大的问题在于平行处理中无法体现数据的有序性,为了保持数据的这种有序性,人为的设计一种序列关系增加在数据上,并进入计算。

一种是硬编码,即直接使用one-hot编码值加到数据上

另一种是采用一种和三角函数相关的函数对位置进行表示,在图像上较为常见,因为研究方向是图像,所有着重关注一下这种方法

计算方法如下
PE编码公式
其中,PE为二维矩阵,大小跟输入embedding的维度一样,行表示词语,列表示词向量;pos 表示词语在句子中的位置;dmodel表示词向量的维度;i表示词向量的位置。因此,上述公式表示在每个词语的词向量的偶数位置添加sin变量,奇数位置添加cos变量,以此来填满整个PE矩阵,然后加到input embedding中去,这样便完成位置编码的引入了。

从图像的角度理解,可以认为pos代表图像的行,i代表当前行对应的列,这样就可以对图像中的每一个像素点进行编码了。

具体实现的代码参考ref[1]https://blog.csdn.net/qq_34771726/article/details/102918440?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=40f9420b-8d9a-4faa-a5f3-41e4befda63d&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值