http://zh.d2l.ai/chapter_attention-mechanisms/self-attention-and-positional-encoding.html
这一节,我是真的没有理解,求大佬指点一下。
哪个部分不是很理解?可以一起探讨下呀?
如果实在理解不了可以去看看中文版的书,感觉书上解释的还挺清楚的。
中文版的书比在线版内容多很多吗?谢谢!
我这里也没怎么看明白。
确实不是很懂,没明白自注意力和位置编码有什么关系
个人理解,不是自注意力和位置编码有关系,而是因为自注意力实现的过程中把位置信息丢失了(如果你仔细的看一下自注意力机制的实现过程就会发现,对于每个位置做的操作是完全相同的),所以需要通过位置编码的方式把这种位置信息告诉神经网络。
这是由于attention 应用了BMM(批量矩阵乘法)机制导致,所以这应是所有attention的共性而不是self-attention个性。而Bahdanau attention正常是因为手工实现了loop保留了tokens位置关系。再次,‘self-attention’只是data角度考虑,不是model层级
其实有关相对位置和绝对位置这块,我也没看懂,中文书名叫什么吗?求
说一下我的对于这个三角函数编码的理解,可能有不对的地方,大伙看看就行。
首先对于编码我们自然而然能够想到二进制编码,这也是书中讨论的,在二进制编码中,随着数的增加,最低位(最右边)的二进制位一定是变化次数最多的,因为每隔一个数字他就会跳变一次。同理每隔两个数字,倒数第二位就会变一次,每个四个数字,倒数第三位变一次。可以看到在二进制编码中,存在不同位的变化频率不同的规律。
再回到三角函数编码中,有n个序列,每个序列值的维度是d,三角函数编码每行随着d中2j的增大,频率会变低。也就是说,对于同一序列(三角编码的一行),越靠后的改变频率越低。即用三角编码的一行的不同位置模拟了二进制编码(模拟了不同位频率不同的特点)。
最后是P矩阵的热图(这里我的理解可能有些问题,可指正),可以看到越靠左和靠下颜色越深越密集。靠下我是这么理解的:对于一个长序列,越靠后的在网络中留下的信息越多(离结果近所以记得牢),即靠下的序列权重更大。 然后越靠左信息越多这个我不还是不太明白为什么。
我觉得很有道理,我是这么理解的,看课本中位置编码的热力图,当固定j不变的时候,周期不变,用三角函数的一个周期对不同的i进行位置编码;当j增大的时候,三角函数周期变大,可以理解为能进行位置编码的序列范围变大了,有点类似于增大卷积核的大小使得感受野变大。
浅浅记录一下 三次阅读的一些点:
- 注意力:其实就是一种加权平均,qk/(v)
- 自注意力:是输入本身做注意力,所以qkv都是相同矩阵的
- 而位置编码正如 @yutongli18 和 @JH.Lam 提到的,是attention这种乘法机制需要一种位置编码
- 自注意力实现的过程中把位置信息丢失了(如果你仔细的看一下自注意力机制的实现过程就会发现,对于每个位置做的操作是完全相同的)图10.6.1
- 由于attention 应用了BMM(批量矩阵乘法)机制导致,所以这应是所有attention的共性而不是self-attention个性
而位置编码本身可以是一种nn.Parameters 当然也可以是直接的编码:二进制、三角函数、旋转位置RoPE;只要能遵循:为每个位置生成唯一的编码
我之前的困惑是三角函数其实是周期性的,所以并没有生成唯一编码;而实际上和ChatGPT几回合交流下,发现是在不同维度使用不同波长,比如公式10.6.2里 d是模型维度,所以每个维度都有不同频率;而同一维度下 正因为有10000这个因子相乘并除;2pi * 10000,远超出模型可能遇到的最大序列长度,在实际应用中,序列长度通常是有限的,例如 512、1024 或 2048。这些长度远小于位置编码在各个维度上的重复周期。因此,在模型实际处理的序列长度范围内,位置编码是唯一的,不会发生重复
这个问题着实没发现。不过现在从图上来看也应该看到大致是唯一的