GRU+CNN 模型的操作主要包括以下步骤:
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因此,就损失而言,我们的模型基本上是一个分类模型,因为解码器为每个类、每个词类、每个词汇生成了很多概率。
在这一部分,我们将详细讨论如何实现我们的图像字幕生成模型。这个模型主要由两部分组成:编码器和解码器。[heading3]编码器[content]编码器的作用是将输入图像转换为一组特征向量,这些特征向量包含了图像的重要信息。在我们的模型中,编码器是一个预训练的卷积神经网络(CNN)。[heading3]解码器[content]解码器部分的任务是根据编码器提供的图像特征生成描述图像内容的文本。这部分模型的结构稍微复杂一些,因为它涉及到序列生成,并且在这个过程中使用了注意力机制。[heading3]组合模型[content]现在我们有了单独的编码器和解码器,我们需要将它们组合在一起,形成一个完整的图像字幕生成模型。[heading2]自定义损失函数[content]由于我们的任务是生成文本序列,并且这些序列可能具有不同的长度,我们需要特殊处理损失函数。我们使用稀疏分类交叉熵作为损失函数,但是需要屏蔽填充的部分。[heading2]编译模型[content]最后,我们需要编译我们的模型,这样我们就可以开始训练它了。[heading2]训练模型[content]一旦我们的模型被编译,我们就可以开始训练它了。在本教程中,我使用了一个单一的GPU来进行训练。每个epoch大约需要15至20分钟的时间。当然,你可以根据自己的需求进行更多的训练,这可能会得到更好的结果。[heading2]推理与生成字幕[content]训练完成后,我们可以使用我们的模型为新的图像生成字幕。在这一步,我们需要稍微修改解码器的结构,以便我们可以手动控制GRU的状态。[heading3]重构解码器[content]在推理阶段,我们需要更细粒度地控制解码器的行为。因此,我们重构解码器模型,使其可以接收额外的GRU状态输入,并返回新的GRU状态。[heading3]自定义推理循环[content]为了生成字幕,我们编写一个自定义推理循环,它会一次产生一个单词,直到生成一个完整的句子。
在Transformer出现之前,序列到序列的模型主要依赖于循环神经网络(RNN)或其变种,如长短时记忆网络(LSTM)和门控循环单元(GRU)。由于这种方法必须按顺序处理序列,这些模型在处理长序列时面临梯度消失或梯度爆炸的问题,而且计算效率不高。而transformer摒弃了这种循环计算模式,用并行模式提升了计算效率(比如我们举例中的“我””喜欢“”什么“”?“),每个元素的计算结果并不依赖于其他元素的计算,自注意力机制允许模型在处理序列的每个元素时考虑到序列中的所有其他元素,这种全局性的信息整合能力极大地提高了模型处理长距离依赖的能力。因此,"Attention is all you need"不仅强调了自注意力机制在Transformer模型中的核心作用,也标志着自然语言处理领域在模型架构上的一次重大转变。此后,基于Transformer的模型如BERT、GPT等在多项自然语言处理任务上都取得成功,也充分证明了这个架构的有效性和通用性。