如题,用别人开源的模型做 NLP 任务有几年了,第一次认真看了下 Transformer 的公式,感觉这东西是不是除了 NLP 其他领域迁移能力差,因为本身夸维度捕捉能力就差。
假设有三个中文输入:“你好”,每个字被编码为一个三维的向量,那么也许可以写成这样一个 3x2 矩阵:
input = [ [a1, b1], [a2, b2], [a3, b3], ]
我仔细看了一下 attention 的公式,所以注意力结果应该是
z = Softmax(QK/sqrt(x))V
其中 QKV 是三个矩阵乘出来的
那么整个运算过程中从单个变量的三个维度出发的话,在上文的 2 字例子中,Q 的第一维只会和 K 的第一维发生关系,似乎并不会参与其他维度运算,这是否导致跨维度捕捉能力的缺失?
所以只有 NLP 做得好,因为 NLP 的多维度量基是人为构建的,而且尽量使其分布平均。一到涉及现实世界的任务就拉了胯了,VIT 近视眼,其他现实建模量基不同的全都寄
1 flyv2x 2024-01-26 09:47:30 +08:00 词嵌入向量:向量旨在捕捉词汇的语义特征,每个维度代表不同的潜在语义属性。 词嵌入向量->转换到 Q 、K 、V 过程是通过权重矩阵相乘来实现。在 Transformer 中,Q (查询)、K (键)和 V (值)向量的每个维度都是原始词嵌入向量所有维度的加权结果。 |
![]() | 2 zhusimaji 2024-01-26 10:02:57 +08:00 从实践来看,Attention 在推荐里用的也不少啊,MHA 用的挺广泛的 |
3 Yuhyeong 2024-01-26 10:04:32 +08:00 transformer 都杀疯了,基本所有领域都霸榜了。要不是硬件成本太高,大家 backbone 恨不得全换成 transformer 。 |
![]() | 6 zhusimaji 2024-01-26 10:14:10 +08:00 还好吧,现在都有专门的优化了,比如 Attention 有 flash attention 最近看 openai 新一代注意力机制 Lightning Attention-2:无限序列长度、恒定算力开销、更高建模精度。 |
![]() | 7 think9999 2024-01-26 10:19:57 +08:00 我认为:Transformer 不缺乏跨维度关系捕捉能力。甚至,它比 CNN 可以捕捉等多的维度关系。 之前有个图像识别的例子用 Transformer 来做,从结果可以验证。 其实,Transformer 里面用了很多 attention ,不是只有 1 个,是很多个,越大的基于 Transformer 的模型,里面的 attention 数量越大(非线性增长)。 而每 1 个 attention 就是去找一个关系, 那么多 attention 它其实就是在遍历找关系。 我认为它就类似于 Faster R-CNN 检测一个目标,几乎就是在用算力去框一个对象,只要算力足够,那么目标就一定能被检测出来。 |
8 icetea12138 2024-01-26 10:26:54 +08:00 ![]() 我还以为你说变形金刚呢 |
![]() | 9 Morriaty 2024-01-26 10:29:19 +08:00 目前主流的大模型都是高维度 embedding ,维度之间本身就是默认正交的,简单理解,假设有个低维 128 维度的 embedding ,我可以手动组合 d1d2 组合维度作为 d129 维,再手动组合 d1d3 组合作为 d130 维,这是交叉特征 FM 的思想。只不过在深度神经网络时代( bert )之后,手动组合特征变成了直接设置为高维度 embedding ,让网络自己去学习这种“特征组合”。 @zhusimaji 另外请问下,MHA 全称是啥,挺感兴趣的,但我没查到 |
10 neopenx 2024-01-26 10:31:29 +08:00 你可能不熟悉矩阵乘法把。QK 的注意力矩阵乘法是[2,3]@[3, 2], 也就是做了 2x2 四次向量点积,每个点积都用到了全部三维。这是单头注意力情况。维度更高需要用多头减少每组点积向量的维度,避免参与的维度过多导致注意力不 diverse |
![]() | 13 LeeReamond OP |
15 neopenx 2024-01-26 13:38:47 +08:00 @LeeReamond 并没有啥问题啊。你的维度困惑在于把 QK 理解成逐元素向量乘法了..上面一堆回答都歪了.. |
16 zhangyichent 2024-01-26 13:47:08 +08:00 @neopenx 我也觉得你说的对头 |
17 lrigi 2024-01-26 13:54:32 +08:00 via iPhone 楼主后面不是还有个*V 吗,attention 本身关注的就是不同词之间的关系 |
18 liangzhh25 2024-01-26 14:17:05 +08:00 @neopenx 我理解 op 的问题也是你说的那样 hhh |
19 liangzhh25 2024-01-26 14:36:05 +08:00 发现说的有点不对,transformer 的注意力确实是两个词的 q 和 k 在各自的维度相乘,求和计算得到的,这个注意力本身就有点类似 cv 的空间注意力。也能理解,要是维度之间还要计算相关的话,attention 计算量就要爆炸了。以上是个人理解。 |
20 liangzhh25 2024-01-26 14:55:31 +08:00 再补充一点,一般注意力结构后面都会再接个 mlp 或者 ffn ,这里会有通道维度上的全连接,通过多个 attn-mlp 结构,应该是能实现 op 说的跨维度信息捕捉的能力。 |
21 lrigi 2024-01-26 15:08:53 +08:00 via iPhone |
![]() | 25 sujin190 2024-01-26 15:48:29 +08:00 怎么记得 QK 好像是矩阵乘法,也就是点乘,哪里的 Q 第一维度只和 K 的第一维度产生作用,就不符合点乘规则吧,和后面 V 才是普通乘法才有你说的这个问题吧,你从哪找的这个公式都看不出是点乘还是普通乘法了 |
26 flyv2x 2024-01-26 17:49:40 +08:00 @LeeReamond transformer 不只是生成查询( Q )、键( K )和值( V )的一个全连接层,还有多头注意力机制,FFNN 都有用到。 简要流程: 1.每个词通过词嵌入模型被转换为一个固定长度的向量(词嵌入向量),这个过程是自然语言处理( NLP )中的常规步骤。(词嵌入向量每个维度代表不同的潜在语义属性) 2.在自注意力机制中将每个词的嵌入向量与三个不同的权重矩阵相乘,分别得到 Q (查询)、K (键)和 V (值)向量。这里用到的三个权重矩阵 WQ,WK,WV 是模型通过训练学习到的参数。 3.Softmax(QK/sqrt(x))->求出注意力分数,注意力分数会对值向量 V 进行加权求和,以生成每个位置的输出向量。这样,*每个输出向量就是输入序列中所有位置的信息的加权组合*,其中的权重反映了每个输入位置对当前输出位置的重要性。 实际 Transformer 模型中,会使用“多头注意力”机制(multi-head-attention),即并行地进行多次上述 2,3 注意力计算,每次使用不同的 Q 、K 、V 权重矩阵。这允许模型在不同的表示子空间中捕获信息。然后,所有头的输出会被拼接起来,并通过另一个线性层进行变换,以生成最终的多头注意力层的输出。 |
27 summerzhen 2024-01-26 23:04:28 +08:00 时间预测领域的近几年的几个 sota:Informer ,FEDformer ,Autoformer ,PatchTST ,都是魔改 Transformer |
![]() | 28 LeeReamond OP @lrigi 工作不做这个,用 NLP 属于业余在做,不值一提。 @flyv2x 是我想错了,不过按照这个说法,先是 W(...)到 Q,K ,然后 QK 这步会消融原有的维度和空间关系,因为他们之间没有经过非线性激活,所以还是可以认为是经过了一个线性层,然后后面 FFN 外加 1.5 个线性层这样。我现在不是很确定,比如输入就是一楼里写的[1, 3, 2]这个形状,忽略编码部分以后,看数学公式似乎它的 3 维度和 2 维度两个方向上似乎在关系捕捉上没有什么区别? @Yuhyeong 榜都看过,不傻的都知道行,只不过行不行是相对而言。以前在跟做 CV 方向的朋友聊天中谈过,相对 NLP 领域 Transformer 是完全成为新 baseline ,CV 这边 ViT 的很多方法只是看起来不错,具体需要 argue 的地方也很多,并没有成为行业新标准,同样不能秒杀 CNN 。效率问题只是一方面,另一方面是 patch+全局感受域带来的近视眼问题,ImageNet 这样脱离实际应用场景的低分场景下跑分性能不错。 |
29 Yuhyeong 2024-01-27 11:29:33 +08:00 @LeeReamond 没完全替代 cnn 是因为 cv 领域本身更偏向边缘设备落地,比 nlp 有更高的实用需求,落地边缘设备的话谁会选择性能难以优化的 Transformer 呢,杀鸡也没必要上牛刀,不像 NLP ,有几个出名的 NLP 项目是不依赖于高性能工作站的? Transformer 可不是仅仅看起来不错而已。 > Q 的第一维只会和 K 的第一维发生关系 你主要还是没学习基本原理,做这么久 NLP 实在不应该,QKV 矩阵怎么算的你都不清楚。QKV 是完全依赖全局序列关系得到的,完全考虑了每个分段的语义信息和相关性,根本不存在你说的只会和当前状态有关系。他替代 RNN 类时序模型,最大的原因就是 transfomer 能捕捉更多更完整的上下文信息,而且 QKV 矩阵本身就已经从高纬度语义空间上获取了更多的信息。近视眼是因为 attention 本身就会专注于人类视角中认为更关键的的信息,从 attention 的名字你应该就能注意到了。你不能期望一个小小的 backbone 去解决所有问题,照你这个逻辑,你可以说 cnn 远视眼,所以不好用呢。 |