本文着重学习一下开源代码中关于RoPE的实现:ChatGLM-6B、ChatGLM2-6B、LLAMA
回顾一下RoPE位置编码:
1:对于 token 序列中的每个词嵌入向量,首先计算其对应的 query 和 key 向量
2:然后对每个 token 位置都计算对应的旋转位置编码
3:接着对每个 token 位置的 query 和 key 向量的元素按照 两两一组 应用旋转变换
4:最后再计算 query 和 key 之间的内积得到 self-attention 的计算结果
前文提供了RoPE的基本实现,本文学习一下开源LLM中的RoPE的实现。
ChatGLM-6B:
源码中通过以下方式实现旋转位置编码(代码中 d=64):[注意与上面蓝色公式的区别]