在论文“Attention is all you need”中,作者为序列中的每个标记添加了位置编码(第 3.5 节)。选择以下编码:
文本指出“对于任何固定偏移,可以表示为一个线性函数”。由于正弦函数的非线性,这对我来说似乎并不明显。其他资源,如Attention 就是你需要的全部解释提到这个属性,但不要更深入地研究它。
我决定通过尝试映射来自具有给定偏移量的输出功能.
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
def PE_even(pos, dim):
""" This corresponds to the 2dim state. """
size = 10000
d_Model = 512
return np.sin(pos / (size ** (2 * dim / d_Model)))
positions = pd.Series(np.arange(0, 1000))
k = 10
a = positions.apply(lambda p: PE_even(p, 64))
b = positions.apply(lambda p: PE_even(p + k, 64))
X = a.values.reshape(-1, 1)
y = b.values
r = LinearRegression()
r.fit(X, y)
r.score(X, y)
但是,这些尺寸中的任何偏移量或任何数字范围都不会产生合适的拟合。作为增加和从产生的正弦波函数不同步,变换与真值的相关性降低。即使使用具有或不具有线性的简单神经网络也不会产生良好的拟合。
我是否误解了论文中的陈述,或者我的代码或对这里基础数学的理解有问题?