深度学习—— 10 注意力机制

10 注意力机制

10.1 注意力提示

自主性的与非自主性的注意力提示解释了人类的注意力的方式, 查询(自主提示)和键(非自主提示)之间的交互形成了注意力汇聚; 注意力汇聚有选择地聚合了值(感官输入)以生成最终的输出。下面是通过这两种注意力提示用神经网络来设计注意力机制的框架:

图10.1:注意力机制通过注意力汇聚将查询(自主性提示)和键(非自主性提示)结合在一起,实现对值(感官输入)的选择倾向

10.2 注意力汇聚:Nadaraya-Watson 核回归

10.2.1 生成数据集

\[ y_i = 2\sin(x_i) + x_i^{0.8} + \epsilon \tag{10.1} \]

n_train = 50  # 训练样本数
x_train, _ = torch.sort(torch.rand(n_train) * 5)   # 排序后的训练样本

def f(x):
    return 2 * torch.sin(x) + x**0.8

y_train = f(x_train) + torch.normal(0.0, 0.5, (n_train,))  # 训练样本的输出
x_test = torch.arange(0, 5, 0.1)  # 测试样本
y_truth = f(x_test)  # 测试样本的真实输出
n_test = len(x_test)  # 测试样本数

# 绘制训练数据 真实值 测试结果
def plot_kernel_reg(y_hat):
    d2l.plot(x_test, [y_truth, y_hat], 'x', 'y', legend=['Truth', 'Pred'],
             xlim=[0, 5], ylim=[-1, 5])
    d2l.plt.plot(x_train, y_train, 'o', alpha=0.5);

10.2.2 平均汇聚