旋转位置编码RoPE
在旋转位置编码与Transformer和BERT之间的区别中介绍了旋转位置编码(RoPE)的特点和优势,这种输入长度动态可变的优势使得在Llama编码时,不需要掩码将多余的嵌入掩住。为了详细了解RoPE是如何实现的,接下来我们使用代码一步一步的来亲自实现RoPE编码!
RoPE代码的实现
1、输入编码
我们生成一个隐藏层维度为6,token长度为3的输入,然后进行RoPE位置编码
dim = 6
seq_len = 3
token_embeddings = torch.randn(seq_len , dim)
#tensor([[ 0.1005, -1.6487, -0.2885, 0.4638, -1.2203, 1.6306],
# [ 2.0363, -0.1143, -1.5050, -0.9562, -0.1079, 0.4749],
# [ 0.3193, 0.9284, -0.0137, -0.2055, -0.9192, 1.3885]])
2、RoPE编码
对于公式
我们首先得到