Tensorflow中以下层之间的区别是什么:一个月一个月一个月一个月一个月一个月和一个月二个月一个月?另外,如何使用基本层(如Dense、Add、LayerNormalization等)实现tf.keras.layers.MultiHeadAttention?我想了解本教程中发生的确切操作。
tf.keras.layers.MultiHeadAttention
yjghlzjz1#
https://paperswithcode.com/是了解不同深度学习术语和实现的细微差别的良好资源变压器模型中注意机制的一般定义:
注意力机制是神经网络中用来模拟长距离交互的组件,例如NLP中的文本。关键思想是在上下文向量和输入之间建立捷径,以允许模型关注不同的部分。- paperswithcode
这些“快捷方式”(又名注意力机制)有许多变体,研究人员试图从查询+键-〉值中找到最佳连接。
在代码中,假设Attention、MultiHeadAttention的初始化相同,则以下各项的output_tensor值应相同:
Attention
MultiHeadAttention
output_tensor
import tensorflow as tf from tensorflow.keras.layers import Attention, MultiHeadAttention layer = MultiHeadAttention(num_heads=1, key_dim=2) target = tf.keras.Input(shape=[8, 16]) source = tf.keras.Input(shape=[4, 16]) output_tensor, weights = layer(target, source, return_attention_scores=True) layer_vanilla = Attention() target_vanilla = tf.keras.Input(shape=[8, 16]) source_vanilla = tf.keras.Input(shape=[4, 16]) output_tensor_vanilla, weights_vanilla = layer_vanilla([target_vanilla, source_vanilla], return_attention_scores=True) print(output_tensor) print(output_tensor_vanilla)
[out]:
KerasTensor(type_spec=TensorSpec(shape=(None, 8, 16), dtype=tf.float32, name=None), name='multi_head_attention_6/attention_output/add:0', description="created by layer 'multi_head_attention_6'") KerasTensor(type_spec=TensorSpec(shape=(None, 8, 16), dtype=tf.float32, name=None), name='attention_3/MatMul_1:0', description="created by layer 'attention_3'")
https://www.tensorflow.org/api_docs/python/tf/keras/layers/MultiHeadAttention
附加注意是一个有趣的现象;它是OG注意机制:加性注意,也称为Bahdanau注意,使用一个隐藏层前馈网络来计算注意对齐分数详细信息:https://paperswithcode.com/method/additive-attention在“IMOW”之前,让我们看一下代码:
from tensorflow.keras.layers import AdditiveAttention layer_bdn = AdditiveAttention() target_bdn = tf.keras.Input(shape=[8, 16]) source_bdn = tf.keras.Input(shape=[4, 16]) output_tensor_bdn, weights_bdn = layer_bdn([target_bdn, source_bdn], return_attention_scores=True) print(output_tensor_bdn)
<KerasTensor: shape=(None, 8, 16) dtype=float32 (created by layer 'additive_attention')>
比较实现:
https://www.diffchecker.com/5i9Viqm9/
通用Attention具有:
scores = self.concat_score_weight * tf.reduce_sum( tf.tanh(self.scale * (q_reshaped + k_reshaped)), axis=-1 )
其中,如果if self.score_mode == "concat":
if self.score_mode == "concat"
if self.score_mode == "concat": self.concat_score_weight = self.add_weight( name="concat_score_weight", shape=(), initializer="ones", dtype=self.dtype, trainable=True, )
但是如果self.use_scale被设置为True,则AdditiveAttention使用Glorot初始化器:
self.use_scale
True
AdditiveAttention
if self.use_scale: self.scale = self.add_weight( name="scale", shape=[dim], initializer="glorot_uniform", dtype=self.dtype, trainable=True, )
不过,在实现中还有更多的细微差别。
答:取决于最终目标是什么,如果目标是复制原始的Bahdanau论文,那么添加性注意力将是最接近的。如果不是,那么香草注意力很可能是你想要的。
答:在大多数情况下,你会总是使用多头注意力,因为
1条答案
按热度按时间yjghlzjz1#
https://paperswithcode.com/是了解不同深度学习术语和实现的细微差别的良好资源
变压器模型中注意机制的一般定义:
注意力机制是神经网络中用来模拟长距离交互的组件,例如NLP中的文本。关键思想是在上下文向量和输入之间建立捷径,以允许模型关注不同的部分。- paperswithcode
这些“快捷方式”(又名注意力机制)有许多变体,研究人员试图从查询+键-〉值中找到最佳连接。
注意与多头注意
在代码中,假设
Attention
、MultiHeadAttention
的初始化相同,则以下各项的output_tensor
值应相同:[out]:
https://www.tensorflow.org/api_docs/python/tf/keras/layers/MultiHeadAttention
注意力与附加注意力
附加注意是一个有趣的现象;它是OG注意机制:
加性注意,也称为Bahdanau注意,使用一个隐藏层前馈网络来计算注意对齐分数
详细信息:https://paperswithcode.com/method/additive-attention
在“IMOW”之前,让我们看一下代码:
[out]:
比较实现:
https://www.diffchecker.com/5i9Viqm9/
通用
Attention
具有:其中,如果
if self.score_mode == "concat"
:但是如果
self.use_scale
被设置为True
,则AdditiveAttention
使用Glorot初始化器:不过,在实现中还有更多的细微差别。
问:那么在选择关注层时,我应该使用什么?
答:取决于最终目标是什么,如果目标是复制原始的Bahdanau论文,那么添加性注意力将是最接近的。如果不是,那么香草注意力很可能是你想要的。
问:多头怎么样?
答:在大多数情况下,你会总是使用多头注意力,因为