在看深度学习的绝对位置编码和相对位置编码部分,知乎上解析文章倒是不少,但是看的云里雾里。
我理解绝对位置编码提出来是为了解决 transformer 不擅长读取顺序的问题,如果不加位置编码的话,那一个元素出现在任意位置,对计算结果的权重都是一样的,所以就加了个位置编码。
绝对位置编码实际操作上就是加个绝对数,比如规定矩阵输入长度为 10 的 1 维数据:
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
然后用三角函数给各个位置单独算个数,比如:
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
然后直接一加得到
[0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
后面的注意力就能捕捉到输入的位置信息了。
如果上面说的没错的话相对位置编码到底是干啥的,看不懂。。。
1
Vanderick 315 天前
"""在 transformer 中,位置信息是去服务于“attention”去区分序列中不同位置 token:即不同 token ij 之间的前后次序以及间距"""
绝对位置编码是能缓解位置信息不足的问题,但是问题也不少啊,以你举的这个绝对位置编码之三角式为例(算是理论较优雅的了,比如一定的外推能力,一定的相对次序表达能力): 1. 这个三角 embedding 过完 attention 后,变成 cos 的形式,无法区分 token 前后次序 2. 而且这个 cos 形式的距离表达,在过 w 、q 的 project 后也会变形冲散,无法很好的区分 token 的间距 3. 这个三角式是预定义的,非可训练参数,不够灵活 |
2
FlyingBackscratc OP @Vanderick 外推性在有时在限制输入长度以后好像也不是那么重要。PE 理论有什么总结性的文章吗,现在业界普遍使用的是基于相对位置编码的技术?还是基于可训练位置编码的技术??
|
3
liangzhh25 315 天前
苏神博客里面 Transformer 升级之路系列里面有好些关于位置编码的文章,推荐看看,我也是刚学的小白。
按我的理解,绝对位置编码是给序列位置相关项,而相对位置编码是在绝对位置编码的推导下使 位置相关项 转化为 相对位置相关项。具体可以看 https://www.kexue.fm/archives/8130 的(3)式和(4)式 |
4
FlyingBackscratc OP @liangzhh25 说实话看不懂,需要一些工程角度的直观解释
|
5
baka009 314 天前 2
对一一个语言模型,假设预训练时最多见过长度为 4 的语句,且包含“三楼你好”和“你好四楼”,那么
使用绝对位置编码时,对于词语“你好”: 楼主你好:这词我认识,“你好”在 3 、4 位置,1 、2 位置是一个对象,意思是在和楼主问好 你好楼主:这词我认识,“你好”在 1 、2 位置,3 、4 位置是一个对象,意思是在和楼主问好 二楼你好:这词我认识,“你好”在 3 、4 位置,1 、2 位置是一个对象,意思是在和二楼问好 xx 楼主你好: 啥玩意?这词我认识,但是“你好”在 5 、6 位置代表什么意思啊? 使用相对位置编码训练后: 二楼你好:这词我认识,“你好”在某个两 token 对象的后面,意思是在和二楼问好 楼主你好: 这词我认识,“你好”在某个两 token 对象的后面,意思是在和楼主问好 今天楼主出门和小红约会,两人在地铁口见面后,小红说:“你好楼主。”:这词我认识,“你好”在某个两 token 对象的前面,意思是在和楼主问好。 如上所述,相对位置指的是 token 与 token 之间的相对位置,模型通过学习相对位置,能更好的捕捉局部的语义。而不会出现,“没见过,这词在这个位置是啥意思?”的情况。同时增强了模型的外推性。只用四长度语句训练后,能外推到更长的情景下。 PS ,这论坛注册完还要等好久才能回复,不然昨天就回复你了。。。 |
6
FlyingBackscratc OP @baka009 感谢,效果很直观,确实有外推性,而且应对输入的鲁棒性更强了。不过具体工程上对数值的操作是怎样的,比如有 1234 ,四个 token 的序列输入,难道是对于所有 attention ,分别生成不同的权重?然后最后还是通过加法的方法加起来?
|
7
baka009 251 天前
|