8.1 注意力提示

HuxJiang Lv2

注意力分为两种:

  • 非自主性注意力:也就是原本特征很明显,很容易注意到;

  • 自主性注意力:特征本来不明显,通过将注意力汇聚从而关注特征;

    • 参数化注意力汇聚:
    • 非参数的注意力汇聚:

原本的全连接层、汇聚层,已经能够实现非自主性注意力,数据的明显特征会在优化过程中被自动学习,而注意力机制主要实现的是自主性注意力;

注意力提示

查询、键和值

首先考虑一个相对简单的状况,即只使用非自主性提示,也就是自然注意到原本就比较明显的特征。可以简单地使用参数化的全连接层,甚至是非参数化的最大汇聚层或平均汇聚层。

如果使用自主性提示,我们需要一些额外信息提示,来使注意力集中到目标上。是否包含自主性提示将注意力机制与全连接层或汇聚层区别开来。给定一些提示,注意力机制通过注意力汇聚(attention pooling),把提示和特征的标签进行匹配,增大适配的特征,从而使注意力聚集到适配特征上;提示就是查询、特征就是值、特征的标签则是对应的键;

  • 自主性提示 = Query 查询:是你主动产生的需求、目标、关注点,是 “你想找什么”。
  • 感官输入 = Value 值:模型已经拿到的全部原始 / 中间特征,是一堆现成的信息素材,相当于你眼睛看到的全部画面、文本所有单词向量。这些是待筛选的原材料;这些是待筛选的原材料,最终我们取用的就是 Value。
  • 非自主提示 = Key 键:Key 和 Value 一一绑定成对,Key 是 Value 的 “标签 / 摘要 / 索引”,是素材自带的属性,不是你主动生成的。画面里每一小块图像特征(Value),配套一个简化特征标签(Key);每一个单词向量(Value),配套它自身的简化表征(Key);Key 不依赖你的目标,是素材本身自带的,所以叫非自主提示

下图展示了这个过程:

image

上面所提框架在注意力机制中占据主导地位,因此这个框架下的模型将成为本章的中心。然而,注意力机制的设计有许多替代方案。例如可以设计一个不可微的注意力模型(例如:最终输出不是各个值的加权和,而是直接选择对应的几个值,这样无法计算梯度,不可微),该模型可以使用强化学习方法进行训练。

注意力的可视化

平均汇聚层可以被视为输入的加权平均值,其中各输入的权重是一样的。实际上,注意力汇聚得到的输出是不同value加权平均的总和值,其中权重是在给定的查询和不同的键之间计算得出的。

可以定义一个show_heatmaps​函数来显示注意力权重,参数matrices的形状是(图的行数,图的列数,单个图内查询的数目,单个图内键的数目)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def show_heatmaps(matrices, xlabel, ylabel, titles=None, figsize=(2.5, 2.5),
cmap='Reds', filename="heatmap.png"):
"""显示矩阵热图"""
num_rows, num_cols = matrices.shape[0], matrices.shape[1]
fig, axes = plt.subplots(num_rows, num_cols, figsize=figsize,
sharex=True, sharey=True, squeeze=False)
for i, (row_axes, row_matrices) in enumerate(zip(axes, matrices)):
for j, (ax, matrix) in enumerate(zip(row_axes, row_matrices)):
pcm = ax.imshow(matrix.detach().numpy(), cmap=cmap)
if i == num_rows - 1:
ax.set_xlabel(xlabel)
if j == 0:
ax.set_ylabel(ylabel)
if titles:
ax.set_title(titles[j])
fig.colorbar(pcm, ax=axes, shrink=0.6);
plt.savefig(filename) # 用传入的文件名
plt.close()

下面使用一个简单的例子进行演示。在本例子中,仅当查询和键相同时,注意力权重为1,否则为0。

1
2
3
# 实际上是生成了一个单位矩阵
attention_weights = torch.eye(10).reshape((1, 1, 10, 10))
show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')

image

  • 标题: 8.1 注意力提示
  • 作者: HuxJiang
  • 创建于 : 2026-04-23 16:25:08
  • 更新于 : 2026-06-25 21:57:51
  • 链接: https://github.com/HuxJiang/2026/04/23/81-attention-prompts-2mzmjy/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
8.1 注意力提示