Keras 3 API 文档 / 层 API / 注意力层 / 加性注意力层

加性注意力层

[source]

AdditiveAttention class

keras.layers.AdditiveAttention(use_scale=True, dropout=0.0, **kwargs)

加性注意力层,即Bahdanau风格的注意力.

输入是一个包含2或3个元素的列表: 1. 一个形状为(batch_size, Tq, dim)query张量. 2. 一个形状为(batch_size, Tv, dim)value张量. 3. 一个可选的形状为(batch_size, Tv, dim)key张量.如果没有提供,将使用value作为key.

计算步骤如下: 1. 使用querykey计算形状为(batch_size, Tq, Tv)的注意力分数,作为非线性求和 scores = reduce_sum(tanh(query + key), axis=-1). 2. 使用分数计算形状为(batch_size, Tq, Tv)的softmax分布. 3. 使用softmax分布创建value的线性组合,形状为(batch_size, Tq, dim).

参数: use_scale: 如果为True,将创建一个标量变量来缩放注意力分数. dropout: 介于0和1之间的浮点数.注意力分数的丢弃比例.默认为0.0.

调用参数: inputs: 以下张量的列表: - query: 形状为(batch_size, Tq, dim)的查询张量. - value: 形状为(batch_size, Tv, dim)的值张量. - key: 可选的形状为(batch_size, Tv, dim)的键张量.如果没有给出,将使用value作为keyvalue,这是最常见的情况. mask: 以下张量的列表: - query_mask: 形状为(batch_size, Tq)的布尔掩码张量.如果给出,输出将在mask==False的位置为零. - value_mask: 形状为(batch_size, Tv)的布尔掩码张量.如果给出,将应用掩码,使得在mask==False的位置的值不贡献于结果. return_attention_scores: 布尔值,如果为True,返回注意力分数(在掩码和softmax之后)作为额外的输出参数. training: Python布尔值,指示层是否应在训练模式(添加dropout)或推理模式(无dropout)下运行. use_causal_mask: 布尔值.设置为True用于解码器自注意力.添加一个掩码,使得位置i不能关注位置j > i.这防止了信息从未来流向过去.默认为False.

输出: 注意力输出,形状为(batch_size, Tq, dim). (可选)掩码和softmax后的注意力分数,形状为(batch_size, Tq, Tv).