V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LeeReamond
V2EX  ›  Python

Transformer 是不是缺乏跨维度关系捕捉能力?

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

    如题,用别人开源的模型做 NLP 任务有几年了,第一次认真看了下 Transformer 的公式,感觉这东西是不是除了 NLP 其他领域迁移能力差,因为本身夸维度捕捉能力就差。

    假设有三个中文输入:“你好”,每个字被编码为一个三维的向量,那么也许可以写成这样一个 3x2 矩阵:

    input = [
      [a1, b1],
      [a2, b2],
      [a3, b3],
    ]
    

    我仔细看了一下 attention 的公式,所以注意力结果应该是

    z = Softmax(Q·K/sqrt(x))·V
    

    其中 QKV 是三个矩阵乘出来的

    那么整个运算过程中从单个变量的三个维度出发的话,在上文的 2 字例子中,Q 的第一维只会和 K 的第一维发生关系,似乎并不会参与其他维度运算,这是否导致跨维度捕捉能力的缺失?

    所以只有 NLP 做得好,因为 NLP 的多维度量基是人为构建的,而且尽量使其分布平均。一到涉及现实世界的任务就拉了胯了,VIT 近视眼,其他现实建模量基不同的全都寄

    flyv2x
        1
    flyv2x  
       82 天前
    词嵌入向量:向量旨在捕捉词汇的语义特征,每个维度代表不同的潜在语义属性。
    词嵌入向量->转换到 Q 、K 、V 过程是通过权重矩阵相乘来实现。在 Transformer 中,Q (查询)、K (键)和 V (值)向量的每个维度都是原始词嵌入向量所有维度的加权结果。
    zhusimaji
        2
    zhusimaji  
       82 天前
    从实践来看,Attention 在推荐里用的也不少啊,MHA 用的挺广泛的
    Yuhyeong
        3
    Yuhyeong  
       82 天前
    transformer 都杀疯了,基本所有领域都霸榜了。要不是硬件成本太高,大家 backbone 恨不得全换成 transformer 。
    Yuhyeong
        4
    Yuhyeong  
       82 天前
    @zhusimaji transformer 就是用的 attention
    Yuhyeong
        5
    Yuhyeong  
       82 天前
    @Yuhyeong paperwithcode 搜搜 Vit ,看看在几个 benchmark 上是 top3
    zhusimaji
        6
    zhusimaji  
       82 天前
    还好吧,现在都有专门的优化了,比如 Attention 有 flash attention 最近看 openai 新一代注意力机制 Lightning Attention-2:无限序列长度、恒定算力开销、更高建模精度。
    think9999
        7
    think9999  
       82 天前
    我认为:Transformer 不缺乏跨维度关系捕捉能力。甚至,它比 CNN 可以捕捉等多的维度关系。
    之前有个图像识别的例子用 Transformer 来做,从结果可以验证。
    其实,Transformer 里面用了很多 attention ,不是只有 1 个,是很多个,越大的基于 Transformer 的模型,里面的 attention 数量越大(非线性增长)。 而每 1 个 attention 就是去找一个关系, 那么多 attention 它其实就是在遍历找关系。
    我认为它就类似于 Faster R-CNN 检测一个目标,几乎就是在用算力去框一个对象,只要算力足够,那么目标就一定能被检测出来。
    icetea12138
        8
    icetea12138  
       82 天前   ❤️ 1
    我还以为你说变形金刚呢
    Morriaty
        9
    Morriaty  
       82 天前
    目前主流的大模型都是高维度 embedding ,维度之间本身就是默认正交的,简单理解,假设有个低维 128 维度的 embedding ,我可以手动组合 d1d2 组合维度作为 d129 维,再手动组合 d1d3 组合作为 d130 维,这是交叉特征 FM 的思想。只不过在深度神经网络时代( bert )之后,手动组合特征变成了直接设置为高维度 embedding ,让网络自己去学习这种“特征组合”。


    @zhusimaji 另外请问下,MHA 全称是啥,挺感兴趣的,但我没查到
    neopenx
        10
    neopenx  
       82 天前
    你可能不熟悉矩阵乘法把。Q·K 的注意力矩阵乘法是[2,3]@[3, 2], 也就是做了 2x2 四次向量点积,每个点积都用到了全部三维。这是单头注意力情况。维度更高需要用多头减少每组点积向量的维度,避免参与的维度过多导致注意力不 diverse
    pipapa
        11
    pipapa  
       82 天前
    @Morriaty multi-head-attention
    Morriaty
        12
    Morriaty  
       82 天前
    @pipapa 哦哦我还以为是专门用于推荐设计的算法,类似于 DIN 之类的,难怪我查不到🤣
    LeeReamond
        13
    LeeReamond  
    OP
       82 天前
    @flyv2x 所以 transformer 的维度关系捕捉能力可以认为是 W(QKV)的这一个(三个)全连接层的关系?

    @neopenx 你要不要重新看看你都写的啥
    zhusimaji
        14
    zhusimaji  
       82 天前 via iPhone
    @Morriaty 有人回答了
    neopenx
        15
    neopenx  
       82 天前
    @LeeReamond 并没有啥问题啊。你的维度困惑在于把 Q·K 理解成逐元素向量乘法了..上面一堆回答都歪了..
    zhangyichent
        16
    zhangyichent  
       82 天前
    @neopenx 我也觉得你说的对头
    lrigi
        17
    lrigi  
       82 天前 via iPhone
    楼主后面不是还有个*V 吗,attention 本身关注的就是不同词之间的关系
    liangzhh25
        18
    liangzhh25  
       82 天前
    @neopenx 我理解 op 的问题也是你说的那样 hhh
    liangzhh25
        19
    liangzhh25  
       82 天前
    发现说的有点不对,transformer 的注意力确实是两个词的 q 和 k 在各自的维度相乘,求和计算得到的,这个注意力本身就有点类似 cv 的空间注意力。也能理解,要是维度之间还要计算相关的话,attention 计算量就要爆炸了。以上是个人理解。
    liangzhh25
        20
    liangzhh25  
       82 天前
    再补充一点,一般注意力结构后面都会再接个 mlp 或者 ffn ,这里会有通道维度上的全连接,通过多个 attn-mlp 结构,应该是能实现 op 说的跨维度信息捕捉的能力。
    lrigi
        21
    lrigi  
       82 天前 via iPhone
    Yuhyeong
        22
    Yuhyeong  
       82 天前
    @lrigi 啊?我意思就是 vit 大部分 sota 啊,op 说 vit 在 nlp 之外不行,我在举反例啊。
    Yuhyeong
        23
    Yuhyeong  
       82 天前
    @lrigi 哥们,不说反问句就看不到了吗😂
    lrigi
        24
    lrigi  
       82 天前 via iPhone
    @Yuhyeong 哦 抱歉我理解错了🙏讲道理楼主真的做了几年 nlp 吗这也太外行了
    sujin190
        25
    sujin190  
       82 天前
    怎么记得 QK 好像是矩阵乘法,也就是点乘,哪里来的 Q 第一维度只和 K 的第一维度产生作用,就不符合点乘规则吧,和后面 V 才是普通乘法才有你说的这个问题吧,你从哪找的这个公式都看不出是点乘还是普通乘法了
    flyv2x
        26
    flyv2x  
       82 天前
    @LeeReamond transformer 不只是生成查询( Q )、键( K )和值( V )的一个全连接层,还有多头注意力机制,FFNN 都有用到。
    简要流程:
    1.每个词通过词嵌入模型被转换为一个固定长度的向量(词嵌入向量),这个过程是自然语言处理( NLP )中的常规步骤。(词嵌入向量每个维度代表不同的潜在语义属性)
    2.在自注意力机制中将每个词的嵌入向量与三个不同的权重矩阵相乘,分别得到 Q (查询)、K (键)和 V (值)向量。这里用到的三个权重矩阵 WQ,WK,WV 是模型通过训练学习到的参数。
    3.Softmax(Q·K/sqrt(x))->求出注意力分数,注意力分数会对值向量 V 进行加权求和,以生成每个位置的输出向量。这样,*每个输出向量就是输入序列中所有位置的信息的加权组合*,其中的权重反映了每个输入位置对当前输出位置的重要性。

    实际 Transformer 模型中,会使用“多头注意力”机制(multi-head-attention),即并行地进行多次上述 2,3 注意力计算,每次使用不同的 Q 、K 、V 权重矩阵。这允许模型在不同的表示子空间中捕获信息。然后,所有头的输出会被拼接起来,并通过另一个线性层进行变换,以生成最终的多头注意力层的输出。
    summerzhen
        27
    summerzhen  
       82 天前
    时间预测领域的近几年的几个 sota:Informer ,FEDformer ,Autoformer ,PatchTST ,都是魔改 Transformer
    LeeReamond
        28
    LeeReamond  
    OP
       81 天前
    @lrigi 工作不做这个,用 NLP 属于业余在做,不值一提。

    @flyv2x 是我想错了,不过按照这个说法,先是 W(...)到 Q,K ,然后 Q·K 这步会消融原有的维度和空间关系,因为他们之间没有经过非线性激活,所以还是可以认为是经过了一个线性层,然后后面 FFN 外加 1.5 个线性层这样。我现在不是很确定,比如输入就是一楼里写的[1, 3, 2]这个形状,忽略编码部分以后,看数学公式似乎它的 3 维度和 2 维度两个方向上似乎在关系捕捉上没有什么区别?

    @Yuhyeong 榜都看过,不傻的都知道行,只不过行不行是相对而言。以前在跟做 CV 方向的朋友聊天中谈过,相对 NLP 领域 Transformer 是完全成为新 baseline ,CV 这边 ViT 的很多方法只是看起来不错,具体需要 argue 的地方也很多,并没有成为行业新标准,同样不能秒杀 CNN 。效率问题只是一方面,另一方面是 patch+全局感受域带来的近视眼问题,ImageNet 这样脱离实际应用场景的低分场景下跑分性能不错。
    Yuhyeong
        29
    Yuhyeong  
       81 天前
    @LeeReamond 没完全替代 cnn 是因为 cv 领域本身更偏向边缘设备落地,比 nlp 有更高的实用需求,落地边缘设备的话谁会选择性能难以优化的 Transformer 呢,杀鸡也没必要上牛刀,不像 NLP ,有几个出名的 NLP 项目是不依赖于高性能工作站的? Transformer 可不是仅仅看起来不错而已。
    > Q 的第一维只会和 K 的第一维发生关系
    你主要还是没学习基本原理,做这么久 NLP 实在不应该,QKV 矩阵怎么算的你都不清楚。QKV 是完全依赖全局序列关系得到的,完全考虑了每个分段的语义信息和相关性,根本不存在你说的只会和当前状态有关系。他替代 RNN 类时序模型,最大的原因就是 transfomer 能捕捉更多更完整的上下文信息,而且 QKV 矩阵本身就已经从高纬度语义空间上获取了更多的信息。近视眼是因为 attention 本身就会专注于人类视角中认为更关键的的信息,从 attention 的名字你应该就能注意到了。你不能期望一个小小的 backbone 去解决所有问题,照你这个逻辑,你可以说 cnn 远视眼,所以不好用呢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2482 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 187ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.