V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FlyingBackscratc
V2EX  ›  程序员

有谁能用大白话简单解释一下相对位置编码是什么意思吗?

  •  
  •   FlyingBackscratc · 313 天前 · 1389 次点击
    这是一个创建于 313 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在看深度学习的绝对位置编码和相对位置编码部分,知乎上解析文章倒是不少,但是看的云里雾里。

    我理解绝对位置编码提出来是为了解决 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]
    

    后面的注意力就能捕捉到输入的位置信息了。

    如果上面说的没错的话相对位置编码到底是干啥的,看不懂。。。

    7 条回复    2024-03-21 16:18:29 +08:00
    Vanderick
        1
    Vanderick  
       312 天前
    """在 transformer 中,位置信息是去服务于“attention”去区分序列中不同位置 token:即不同 token ij 之间的前后次序以及间距"""
    绝对位置编码是能缓解位置信息不足的问题,但是问题也不少啊,以你举的这个绝对位置编码之三角式为例(算是理论较优雅的了,比如一定的外推能力,一定的相对次序表达能力):
    1. 这个三角 embedding 过完 attention 后,变成 cos 的形式,无法区分 token 前后次序
    2. 而且这个 cos 形式的距离表达,在过 w 、q 的 project 后也会变形冲散,无法很好的区分 token 的间距
    3. 这个三角式是预定义的,非可训练参数,不够灵活
    FlyingBackscratc
        2
    FlyingBackscratc  
    OP
       312 天前
    @Vanderick 外推性在有时在限制输入长度以后好像也不是那么重要。PE 理论有什么总结性的文章吗,现在业界普遍使用的是基于相对位置编码的技术?还是基于可训练位置编码的技术??
    liangzhh25
        3
    liangzhh25  
       311 天前
    苏神博客里面 Transformer 升级之路系列里面有好些关于位置编码的文章,推荐看看,我也是刚学的小白。
    按我的理解,绝对位置编码是给序列位置相关项,而相对位置编码是在绝对位置编码的推导下使 位置相关项 转化为 相对位置相关项。具体可以看 https://www.kexue.fm/archives/8130 的(3)式和(4)式
    FlyingBackscratc
        4
    FlyingBackscratc  
    OP
       311 天前
    @liangzhh25 说实话看不懂,需要一些工程角度的直观解释
    baka009
        5
    baka009  
       311 天前   ❤️ 2
    对一一个语言模型,假设预训练时最多见过长度为 4 的语句,且包含“三楼你好”和“你好四楼”,那么

    使用绝对位置编码时,对于词语“你好”:
    楼主你好:这词我认识,“你好”在 3 、4 位置,1 、2 位置是一个对象,意思是在和楼主问好
    你好楼主:这词我认识,“你好”在 1 、2 位置,3 、4 位置是一个对象,意思是在和楼主问好
    二楼你好:这词我认识,“你好”在 3 、4 位置,1 、2 位置是一个对象,意思是在和二楼问好
    xx 楼主你好: 啥玩意?这词我认识,但是“你好”在 5 、6 位置代表什么意思啊?

    使用相对位置编码训练后:
    二楼你好:这词我认识,“你好”在某个两 token 对象的后面,意思是在和二楼问好
    楼主你好: 这词我认识,“你好”在某个两 token 对象的后面,意思是在和楼主问好
    今天楼主出门和小红约会,两人在地铁口见面后,小红说:“你好楼主。”:这词我认识,“你好”在某个两 token 对象的前面,意思是在和楼主问好。

    如上所述,相对位置指的是 token 与 token 之间的相对位置,模型通过学习相对位置,能更好的捕捉局部的语义。而不会出现,“没见过,这词在这个位置是啥意思?”的情况。同时增强了模型的外推性。只用四长度语句训练后,能外推到更长的情景下。

    PS ,这论坛注册完还要等好久才能回复,不然昨天就回复你了。。。
    FlyingBackscratc
        6
    FlyingBackscratc  
    OP
       310 天前
    @baka009 感谢,效果很直观,确实有外推性,而且应对输入的鲁棒性更强了。不过具体工程上对数值的操作是怎样的,比如有 1234 ,四个 token 的序列输入,难道是对于所有 attention ,分别生成不同的权重?然后最后还是通过加法的方法加起来?
    baka009
        7
    baka009  
       248 天前
    @FlyingBackscratc 吃到两个月的回复
    可以看看这个文章
    https://www.kexue.fm/archives/8130
    相对编码 RoPE 的作者。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.