AdditiveAttention
类keras.layers.AdditiveAttention(use_scale=True, dropout=0.0, **kwargs)
加性注意力层,也称为 Bahdanau-style 注意力。
输入是一个包含 2 或 3 个元素的列表:1. 形状为 (batch_size, Tq, dim)
的 query
张量。2. 形状为 (batch_size, Tv, dim)
的 value
张量。3. 可选的 key
张量,形状为 (batch_size, Tv, dim)
。如果未提供,value
将用作 key
。
计算步骤如下:1. 使用 query
和 key
计算注意力分数,形状为 (batch_size, Tq, Tv)
,作为非线性求和 scores = reduce_sum(tanh(query + key), axis=-1)
。2. 使用分数计算 softmax 分布,形状为 (batch_size, Tq, Tv)
。3. 使用 softmax 分布创建 value
的线性组合,形状为 (batch_size, Tq, dim)
。
参数
True
,将创建一个标量变量来缩放注意力分数。0.0
。调用参数
query
:查询张量,形状为 (batch_size, Tq, dim)
。value
:值张量,形状为 (batch_size, Tv, dim)
。key
:可选的键张量,形状为 (batch_size, Tv, dim)
。如果未给出,将同时使用 value
作为 key
和 value
,这是最常见的情况。query_mask
:布尔掩码张量,形状为 (batch_size, Tq)
。如果给出,在 mask==False
的位置,输出将为零。value_mask
:布尔掩码张量,形状为 (batch_size, Tv)
。如果给出,将应用掩码,使得 mask==False
位置的值不参与结果的贡献。True
,则将注意力分数(经过掩码和 softmax 后)作为额外的输出参数返回。True
。添加一个掩码,使得位置 i
不能关注位置 j > i
。这可以防止信息从未来流向过去。默认为 False
。输出:注意力输出,形状为 (batch_size, Tq, dim)
。(可选)经过掩码和 softmax 后的注意力分数,形状为 (batch_size, Tq, Tv)
。