GRU(门控循环单元)是 RNN(递归神经网络)的一种变体。
在创建图像描述模型中,解码器部分包含了 GRU 层。GRU 层接受输入,更新其内部状态,并生成输出。通过传递像文本这样的顺序数据,它可以保持与先前输入(例如先前的单词)的顺序依赖关系。
在 Transformer 出现之前,序列到序列的模型主要依赖于循环神经网络(RNN)或其变种,如长短时记忆网络(LSTM)和 GRU。由于传统方法必须按顺序处理序列,在处理长序列时面临梯度消失或梯度爆炸的问题,而且计算效率不高。
在创建图像描述模型的解码器中,GRU 的输出会进入注意力层,该层混合了来自编码器(图像)和解码器(文本)的信息。解码器本身是一个迭代操作,通过自回归地多次调用,最终可以生成完整的文本。
在代码方面,注意力层有两个输入:gru_output 和 encoder_output。在内部,gru_output 用作注意力的查询和键,而 encoder_output 用作值。
09:00和不。所以我们用零值填充移位的部分看起来不错。所以下一部分是模型。大部分模型代码已经在之前的视频中解释过了,所以我将快速过一遍。09:17但是,如果您对此不是很熟悉并且对此很有信心,那么您可以返回到上一张幻灯片并检查编码器和解码器内部发生了什么。09:28所以在这段视频中。所以让我们快速运行这些东西。所以这是编码器,正如你所看到的,我们只是将inception resnet V2应用于图像数据。09:43请注意,在这种情况下,我们冻结了这个cnn的大部分部分,因为我们不需要接受培训。这个模型,基本上这种骨干是预训练的09:56通过在这种情况下使用庞大的数据集图像网络数据集。所以当然,如果你想训练,再次微调,这是可能的,但在这种情况下,我们希望你只保留权重10:10预训练。那么接下来让我们继续解码器。正如我们讨论的那样它有点复杂,在这里你可以找到很多关于注意力层的说明10:25以及解码器的步骤,我们在之前的视频中讨论过。在这里我们可以找到一个定义,这样你就可以找到嵌入层来创建嵌入和第一个GRU层10:41注意力层添加层归一化层和最终的密集层。所以让我们这样定义。所以模型看起来像这个嵌入层GRU attention add layer normalization,然后这个。11:01在定义解码器和编码器之后它有这么多参数,我们可以创建最终模型TF Keras模型并定义输入和输出。正如你所看到的,它有两个输入,11:23图像输入进入编码器,文字输入进入解码器,输出应该是解码器输出。现在模型已准备就绪,但在运行训练之前,我们需要像往常一样定义丢失的功能。11:45因此,就损失而言,我们的模型基本上是一个分类模型,因为解码器为每个类、每个词类、每个词汇生成了很多概率。
在Transformer出现之前,序列到序列的模型主要依赖于循环神经网络(RNN)或其变种,如长短时记忆网络(LSTM)和门控循环单元(GRU)。由于这种方法必须按顺序处理序列,这些模型在处理长序列时面临梯度消失或梯度爆炸的问题,而且计算效率不高。而transformer摒弃了这种循环计算模式,用并行模式提升了计算效率(比如我们举例中的“我””喜欢“”什么“”?“),每个元素的计算结果并不依赖于其他元素的计算,自注意力机制允许模型在处理序列的每个元素时考虑到序列中的所有其他元素,这种全局性的信息整合能力极大地提高了模型处理长距离依赖的能力。因此,"Attention is all you need"不仅强调了自注意力机制在Transformer模型中的核心作用,也标志着自然语言处理领域在模型架构上的一次重大转变。此后,基于Transformer的模型如BERT、GPT等在多项自然语言处理任务上都取得成功,也充分证明了这个架构的有效性和通用性。
在代码方面,我们使用来自Keras应用程序的经典InceptionResNetV2作为图像编码器。但同样,这可以是任何其他的图像主干网络。[heading3]文本解码器[content]解码器部分有点复杂,让我们仔细看一下它的组件和工作原理:1.嵌入层:创建词嵌入,将单词转换为向量表示。2.GRU层:GRU(门控循环单元)是RNN(递归神经网络)的一种变体。它接受输入,更新其内部状态,并生成输出。通过传递像文本这样的顺序数据,它可以保持与先前输入(例如先前的单词)的顺序依赖关系。3.注意力层:GRU的输出进入注意力层。这一层混合了来自编码器(图像)和解码器(文本)的信息。这个解码器本身是一个迭代操作。因此,通过自回归地一次又一次地调用它,我们最终可以生成完整的文本。因此,通过传递像文本这样的顺序数据,它可以保持与先前输入的顺序依赖关系,例如先前的单词。GRU输出进入注意力层,该层混合了文本和图像的信息。[heading3]注意力机制[content]在TensorFlow Keras中,我们可以像使用其他层一样,轻松地添加预定义的注意力层。例如,我们可以使用tf.keras.layers.Attention。如果您想使用更多类似Transformer的架构,可以选择tf.keras.layers.MultiHeadAttention,它使用多个注意力头。在注意力层内部,该层从文本数据中关注图像特征,通过这样做,它可以通过混合两种信息来计算注意力分数。在代码中,注意力层有两个输入:gru_output和encoder_output。在内部,gru_output用作注意力的查询和键,而encoder_output用作值。