注意力机制-10.1.3注意力可视化
平均汇聚层可以被视为输入的加权平均值,其中各输入的权重是一样的,实际上,注意力汇聚得到的是加权平均的总和,其中权重是在给定的查询和不同的键之间计算得出的。
import torch
from d2l import torch as d2l
为了可视化注意力权重,需要定一个show_heatmaps函数,且输入matrices的形状是(要现实的行数,要现实的列数,查询数,键数)
def show_heatmaps(matrics, xlabel, ylabel, titles=None, figsize=(2.5, 2.5), cmap='Reds'):
#显示矩阵热图
d2l.use_svg_display()
num_rows, num_cols = matrics.shape[0], matrices.shape[1]
fig, axes = d2l.plt.subplots(nnum_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_axesm 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):
下面使用一个简单的例子进行演示,在本例中,仅当查询和键相同时,注意力权重为1,否则为0.
attention_weights = torch.eye(10).reshape(1, 1, 10, 10)
show_heatmaps(attention_weights, xlabel='keys', ylabel='Queries')
后面的章节将经常调用show_heatmaps函数来显示注意力权重
小结:
人类的注意力是有限的,有价值的和稀缺的资源
受试者使用非自主性和自主性提示有选择地引导注意力,前者基于突出性,后者则依赖意识。
注意力机制与全连接层或者汇聚层区别源于增加的自主性展示
由于包含自主性提示,注意力机制与全连接层或汇聚层不同。
注意力机制通过注意力汇聚使得选择偏向于值,其中包含查询和键,键和值是成对的。
可视化查询和键之间的注意力权重是可行的。