深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型

发布于 2025-1-22 12:59
浏览
0收藏

1. 引言

许多大语言模型成功的核心在于编码器 - 解码器架构,这一框架在机器翻译、文本摘要和对话式人工智能等任务中取得了突破性进展。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

编码器 - 解码器架构的提出是为了解决序列到序列(Seq2Seq)问题,这在处理顺序数据方面是一个重大突破。

1.1 数据处理的主要发展

表格数据

最初,人们专注于利用人工神经网络(ANNs)来处理表格数据。通过增加网络层数,这种方法逐渐演变为深度神经网络(DNNs),从而增强了模型捕捉数据中复杂模式的能力。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

图像数据

在诸如物体识别(例如识别图像中是狗还是猫)等任务中,图像被视为二维数据网格。人工神经网络在处理这种结构化数据时效果并不理想。这一局限性促使了卷积神经网络(CNNs)的发展,它是专门为解释和分析网格格式的视觉信息而设计的。

顺序数据

文本或时间序列等顺序数据具有有意义的顺序和时间依赖性。人工神经网络和卷积神经网络不太适合处理此类数据,因为它们缺乏捕捉顺序关系的机制。循环神经网络(RNNs)及其先进变体,如长短期记忆(LSTM)网络和门控循环单元(GRUs)填补了这一空白,它们能够对时间模式进行建模和学习。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

Seq2Seq数据

在某些应用中,输入和输出都是序列,例如机器翻译任务。由于对齐可变长度的输入和输出序列存在复杂性,传统模型在处理这类数据时遇到困难。这一挑战促使人们开发能够有效处理Seq2Seq数据的专门架构,为自然语言处理中更复杂的模型铺平了道路。

本文的重点是解决Seq2Seq数据问题。

2. 理解序列建模

序列建模的用例涉及输入、输出或两者均由数据序列(如单词或字母)组成的问题。

考虑一个非常简单的预测电影评论是正面还是负面的问题。这里我们的输入是一个单词序列,输出是0到1之间的单个数字。如果我们使用传统的深度神经网络,通常需要使用词袋模型(BOW)、Word2Vec等技术将输入文本编码为固定长度的向量。但请注意,这里单词的顺序没有被保留,因此当我们将输入向量输入到模型中时,模型对单词的顺序一无所知,从而遗漏了关于输入的一个非常重要的信息。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

为了解决这个问题,循环神经网络应运而生。本质上,对于任何具有可变数量特征的输入X = (x₀, x₁, x₂, … xₜ),在每个时间步,一个RNN单元将一个元素/标记xₜ作为输入,并产生一个输出hₜ,同时将一些信息传递到下一个时间步。这些输出可以根据手头的问题使用。

电影评论预测问题是一个非常基本的序列问题,称为多对一预测的示例。对于这类问题,RNN架构的修改版本被用于不同类型的序列问题。

序列问题大致可以分为以下几类:

  • 无RNN的普通处理模式,从固定大小的输入到固定大小的输出(例如图像分类)。
  • 序列输出(例如图像字幕,输入一张图像,输出一个单词句子)。
  • 序列输入(例如情感分析,给定一个句子,将其分类为表达正面或负面情感)。
  • 序列输入和序列输出(例如机器翻译:一个RNN读取一个英语句子,然后输出一个法语句子)。
  • 同步的序列输入和输出(例如视频分类,我们希望为视频的每一帧标记)。

请注意,在每种情况下,对序列的长度都没有预先指定的限制,因为循环变换(绿色部分)是固定的,可以根据需要应用任意多次。

2.1 用编码器 - 解码器架构掌握顺序数据

序列在我们的世界中无处不在,存在于语言、语音、金融时间序列和基因组数据中,其中元素的顺序至关重要。与固定大小的数据不同,序列在理解、预测和生成信息方面带来了独特的挑战。传统的深度神经网络在处理固定维度的输入和输出任务时表现良好,但在处理像机器翻译这样的序列到序列任务时遇到困难,因为输入和输出的长度不同且未对齐。因此,需要专门的模型来有效地处理顺序数据。

编码器 - 解码器架构相对较新,在2016年底被谷歌翻译服务采用为核心技术。它是注意力模型、GPT模型、Transformer和BERT等先进的序列到序列模型的基础。因此,在学习更高级的机制之前,理解它非常关键。

  • 编码器:编码器处理输入序列,并将信息编码为固定长度的上下文向量(或向量序列)。这种编码捕获了输入数据的本质,总结了其信息内容。
  • 解码器:解码器接收编码器提供的上下文向量,并一次生成一个元素的输出序列。它利用上下文向量中的信息,生成与输入相关且连贯的输出。

3. 编码器 - 解码器架构

3.1 神经机器翻译问题

为了说明这个概念,让我们以神经机器翻译(NMT)为例。在神经机器翻译中,输入是一个一个处理的单词序列,输出是相应的单词序列。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

任务:预测英语句子的法语翻译。

示例:

  • 输入:英语句子 “nice to meet you”
  • 输出:法语翻译 “ravi de vous rencontrer”

术语解释:

  • 输入句子 “nice to meet you” 将被称为X或输入序列。
  • 输出句子 “ravi de vous rencontrer” 被称为Y_true或目标序列,这是我们希望模型预测的真实值。
  • 模型的预测句子是Y_pred,也称为预测序列。
  • 英语和法语句子中的每个单词都被称为一个 “标记”。

因此,给定输入序列 “nice to meet you”,模型的目标是预测目标序列Y_true,即 “ravi de vous rencontrer”。

3.2 概述

从很高的层次来看,编码器 - 解码器模型可以被看作是两个模块,即编码器和解码器,它们通过一个我们称之为 “上下文向量” 的向量连接。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

  • 编码器:编码器处理输入序列中的每个标记。它试图将关于输入序列的所有信息压缩到一个固定长度的向量中,即 “上下文向量”。在处理完所有标记后,编码器将这个向量传递给解码器。
  • 上下文向量:这个向量的构建方式是期望它封装输入序列的全部含义,并帮助解码器做出准确的预测。稍后我们会看到,这是我们编码器模块的最终内部状态。
  • 解码器:解码器读取上下文向量,并试图逐个标记地预测目标序列。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

3.3 内部机制

Seq2Seq模型是一种基于RNN的模型,专为翻译和摘要等任务设计,在这些任务中,输入是一个序列,输出也是一个序列。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

这是一个将英语句子 “I am a student.” 翻译成法语 “Je suis étudiant.” 的Seq2Seq模型。左边的橙色矩形代表编码器,右边的绿色矩形代表解码器。编码器接收输入句子(“I am a student.”)并输出一个上下文向量,而解码器接收上下文向量(和标记)作为输入,并输出句子(“Je suis étudiant.”)。

就架构而言,它相当直接。该模型可以被看作是两个LSTM单元,它们之间有某种连接。这里的主要问题是我们如何处理输入和输出。我将逐个解释每个部分。

3.4 编码器模块

编码器部分是一个LSTM单元。它随着时间输入序列,并试图将所有信息封装并存储在其最终的内部状态hₜ(隐藏状态)和cₜ(细胞状态)中。这些内部状态随后被传递给解码器部分,解码器将使用它们来尝试生成目标序列。这就是我们之前提到的 “上下文向量”。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

编码器部分在每个时间步的输出都被丢弃。

注意:上面的图展示了一个LSTM/GRU单元在时间轴上展开的样子。也就是说,它是一个在每个时间戳接收一个单词/标记的单个LSTM/GRU单元。

在论文中,他们使用LSTM而不是经典的RNN,因为LSTM在处理长期依赖关系时表现更好。

3.4.1 数学基础:编码器

给定一个输入序列: 编码器顺序处理每个元素:

  • 初始化:编码器的初始隐藏状态h₀通常初始化为零或学习到的参数。
  • 隐藏状态更新:对于输入序列中的每个时间步t: 其中,hₜ是时间步t的隐藏状态,f_enc是编码器的激活函数(例如,LSTM或GRU单元)。
  • 上下文向量:在处理完整个输入序列后,最终的隐藏状态h_Tx成为上下文向量c。

3.5 解码器模块

在读取整个输入序列后,编码器将内部状态传递给解码器,从这里开始预测输出序列。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

解码器模块也是一个LSTM单元。这里需要注意的主要事情是,解码器的初始状态(h₀, c₀)被设置为编码器的最终状态(hₜ, cₜ)。这些状态充当 “上下文” 向量,帮助解码器生成所需的目标序列。

现在解码器的工作方式是,它在任何时间步t的输出应该是目标序列/Y_true(“ravi de vous rencontrer”)中的第t个单词。为了解释这一点,让我们看看每个时间步会发生什么。

  • 时间步1:在第一个时间步输入到解码器的是一个特殊符号 “”。这用于表示输出序列的开始。现在解码器使用这个输入和内部状态(hₜ, cₜ)在第一个时间步产生输出,这个输出应该是目标序列中的第一个单词/标记,即 “ravi”。
  • 时间步2:在时间步2,第一个时间步的输出 “ravi” 被作为输入馈送到第二个时间步。第二个时间步的输出应该是目标序列中的第二个单词,即 “de”。
  • 类似地,每个时间步的输出都被作为输入馈送到下一个时间步。这个过程一直持续到我们得到 “” 符号,这也是一个特殊符号,用于标记输出序列的结束。解码器的最终内部状态被丢弃。

注意,这些特殊符号不一定只是 “” 和 “”。它们可以是任何字符串,只要这些字符串不在我们的数据集中,这样模型就不会将它们与其他单词混淆。在论文中,他们使用了符号 “”,并且使用方式略有不同。稍后我会详细介绍这一点。

注意:上述过程是理想情况下解码器在测试阶段的工作方式。但在训练阶段,需要稍微不同的实现方式,以使训练更快。我将在下一节中解释这一点。

3.5.1 数学基础:解码器

解码器生成一个输出序列: 使用上下文向量c:

  • 初始化:解码器的初始隐藏状态s₀被设置为上下文向量:
  • 输出生成:对于输出序列中的每个时间步t: 其中,sₜ是解码器在时间步t的隐藏状态,f_dec是解码器的激活函数,yₜ₋₁是之前生成的输出(y₀是序列开始的标记),W是输出层的权重矩阵,p(yₜ | y<t, X)是在时间步t可能输出的概率分布。

4. 训练编码器 - 解码器模型

4.1 数据向量化

在深入了解细节之前,我们首先需要对数据进行向量化。

我们拥有的原始数据是: X = “nice to meet you” → Y_true = “ravi de vous rencontrer”

现在我们在目标序列的开头和结尾添加特殊符号 “” 和 “”: X = “nice to meet you” → Y_true = “ravi de vous rencontrer”

接下来,使用独热编码(ohe)对输入和输出数据进行向量化。让输入和输出表示为: X = (x₁, x₂, x₃, x₄) → Y_true = (y₀_true, y₁_true, y₂_true, y₃_true, y₄_true, y₅_true)

其中,xᵢ和yᵢ分别表示输入序列和输出序列的独热编码向量。它们可以表示为:

  • 对于输入X “nice” → x₁ : [1 0 0 0] “to” → x₂ : [0 1 0 0 ] “meet” →x₃ : [0 0 1 0] “you” → x₄ : [0 0 0 1]
  • 对于输出Y_true “” → y₀_true : [1 0 0 0 0 0] “ravi” → y₁_true : [0 1 0 0 0 0] “de” → y₂_true : [0 0 1 0 0 0] “vous” → y₃_true : [0 0 0 1 0 0] “rencontrer” → y₄_true : [0 0 0 0 1 0] “” → y₅_true : [0 0 0 0 0 1]

注意:我使用这种表示方式是为了更易于解释。“真实序列” 和 “目标序列” 这两个术语都用于指代我们希望模型学习的同一句子 “ravi de vous rencontrer”。

4.2 编码器的训练与测试

编码器在训练和测试阶段的工作方式相同。它逐个接受输入序列的每个标记/单词,并将最终状态发送给解码器。其参数通过时间反向传播进行更新。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

4.3 训练阶段的解码器:教师强制

与编码器部分不同,解码器在训练和测试阶段的工作方式不同。因此,我们将分别介绍这两个阶段。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

为了训练我们的解码器模型,我们使用一种称为 “教师强制” 的技术,在该技术中,我们将上一个时间步的真实输出/标记(而不是预测输出/标记)作为当前时间步的输入。

为了解释这一点,让我们看一下训练的第一次迭代。在这里,我们将输入序列馈送到编码器,编码器对其进行处理并将其最终内部状态传递给解码器。现在对于解码器部分,参考下面的图。

在继续之前,请注意在解码器中,在任何时间步t,输出yₜ_pred是输出数据集中整个词汇表上的概率分布,这是通过使用Softmax激活函数生成的。具有最高概率的标记被选为预测单词。

例如,参考上面的图,y₁_pred = [0.02 0.12 0.36 0.1 0.3 0.1] 告诉我们,我们的模型认为输出序列中第一个标记是 “” 的概率是0.02,是 “ravi” 的概率是0.12,是 “de” 的概率是0.36等等。我们将预测单词选为具有最高概率的单词。因此,这里预测的单词/标记是 “de”,概率为0.36。

继续...

  • 时间步1:单词 “” 的向量 [1 0 0 0 0 0] 被作为输入向量馈送。现在我希望我的模型预测输出为y₁_true = [0 1 0 0 0 0],但由于我的模型刚刚开始训练,它会输出一些随机值。假设时间步1的预测值为y₁_pred = [0.02 0.12 0.36 0.1 0.3 0.1],这意味着它预测第一个标记为 “de”。现在,我们应该将这个y₁_pred作为时间步2的输入吗?我们可以这样做,但在实践中发现,这会导致诸如收敛缓慢、模型不稳定和性能不佳等问题,这是很合理的。
  • 因此,引入了教师强制来纠正这个问题。在教师强制中,我们将上一个时间步的真实输出/标记(而不是预测输出)作为当前时间步的输入。这意味着时间步2的输入将是y₁_true = [0 1 0 0 0 0],而不是y₁_pred。
  • 现在时间步2的输出将是某个随机向量y₂_pred。但在时间步3,我们将使用y₂_true = [0 0 1 0 0 0] 作为输入,而不是y₂_pred。类似地,在每个时间步,我们将使用上一个时间步的真实输出。
  • 最后,根据每个时间步的预测输出和目标序列/Y_true计算损失,并通过时间反向传播误差来更新模型的参数。使用的损失函数是目标序列/Y_true和预测序列/Y_pred之间的分类交叉熵损失函数,即: Y_true = [y₀_true, y₁_true, y₂_true, y₃_true, y₄_true, y₅_true] Y_pred = [‘’, y₁_pred, y₂_pred, y₃_pred, y₄_pred, y₅_pred] 解码器的最终状态被丢弃。

4.4 测试阶段的解码器

在实际应用场景中,我们手头只有输入X,而没有目标输出Y_true。因此,由于缺乏目标序列Y_true,我们无法采用训练阶段的操作方式。所以在测试模型时,我们会将上一个时间步的预测输出(与训练阶段使用真实输出不同)作为当前时间步的输入。其余部分则与训练阶段一致。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

假设我们已经完成了模型的训练,现在用训练时使用的单句对其进行测试。如果模型训练效果良好,且仅在单句上训练,那么它应该表现得近乎完美。但为了便于解释,假定我们的模型训练效果不佳或者只是部分训练完成,现在对其进行测试。具体场景如下图所示:

  • 时间步1:y1_pred = [0 0.92 0.08 0 0 0] 表明模型预测输出序列中的第一个单词为 “ravi” 的概率是0.92。因此在下一个时间步,这个预测的单词将被用作输入。
  • 时间步2:将时间步1预测的单词 “ravi” 作为此处的输入。此时模型预测输出序列中的下一个单词为 “de” 的概率是0.98,该预测单词随后将作为时间步3的输入。
  • 之后每个时间步都会重复类似的过程,直到遇到 “” 标记。

更好的可视化展示如下:

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

根据我们训练好的模型,测试时的预测序列为 “ravi de rencontrer rencontrer”。尽管模型在第三次预测时出现错误,但我们仍将其作为下一个时间步的输入。模型预测的准确性取决于可用数据量以及训练的充分程度。在测试阶段,模型可能会预测出错误的输出,但仍会将该输出输入到下一个时间步。

4.5 嵌入层

此前我未提及的一个重要细节是,编码器和解码器都通过嵌入层来处理输入序列。这一步骤能够降低输入词向量的维度,因为在实际应用中,独热编码向量往往维度较大。嵌入向量能为单词提供更高效且有意义的表示。以编码器为例,嵌入层可以将词向量维度压缩,比如从4维降至3维。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

这个嵌入层既可以像Word2Vec嵌入那样进行预训练,也可以与模型一同训练。

4.6 测试时的最终可视化

左边,编码器处理输入序列(“nice to meet you”),每个单词先通过嵌入层(降低维度),然后经过一系列LSTM层。编码器输出包含隐藏状态ht和细胞状态ct的上下文向量,对输入序列进行了总结。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

右边,解码器接收上下文向量并生成输出序列(“ravi de rencontrer”)。解码器使用LSTM生成每个单词,将前一个单词作为输入(从特殊标记开始),经过另一个嵌入层,并通过softmax层生成预测。

该图像展示了模型如何利用嵌入层和循环层将输入序列转换为目标序列。

5. 编码器 - 解码器模型的缺点

这种架构主要存在两个与长度相关的缺点。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

首先,与人类记忆类似,该架构的记忆能力有限。长短期记忆网络(LSTM)的最终隐藏状态S或W负责封装整个待翻译句子的信息。通常,S或W仅包含几百个单元(即浮点数)。然而,往这个固定维度的向量中塞入过多信息会增加神经网络中的模糊性。有时,将神经网络视为进行 “有损压缩” 的工具,这种思考方式十分有用。

其次,一般来说,神经网络越深,训练难度就越大。对于循环神经网络而言,序列越长,沿时间维度的神经网络就越深。这会导致梯度消失问题,即循环神经网络从目标中学习的梯度信号在反向传播过程中消失。即便使用了诸如LSTM等专门用于防止梯度消失的循环神经网络,这仍然是一个根本性问题。

此外,对于更复杂和冗长的句子,我们有注意力模型和Transformer等更强大的模型。

6. 编码器 - 解码器架构的改进

6.1 添加嵌入层

嵌入层将输入标记转换为密集向量表示,使模型能够学习输入序列中单词或标记的有意义表示。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

通过使用可训练的嵌入层,并探索诸如预训练词嵌入或上下文嵌入等技术,我们可以丰富输入表示,使模型能够更有效地捕捉细微的语义和句法信息。这种增强有助于更好地理解和生成顺序数据。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

6.2 使用深度LSTM

LSTM是循环神经网络(RNN)的变体,以其在顺序数据中捕捉长距离依赖关系的能力而闻名。加深LSTM层能使模型学习输入和输出序列的层次表示,从而提高性能。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

增加LSTM层的深度,并结合残差连接或层归一化等技术,有助于缓解梯度消失问题,并便于训练更深层次的网络。这些改进使模型能够学习数据中更复杂的模式和依赖关系,从而实现更好的序列生成和理解。

6.3 反转输入

在机器翻译任务中,例如英语到印地语或英语到法语的转换,反转输入序列在某些情况下已被证明可以通过帮助捕捉长距离依赖关系和缓解梯度消失问题来提高模型性能。

深入探究编码器 - 解码器架构:从RNN到Transformer的自然语言处理模型-AI.x社区

然而,其有效性可能因语言特征和数据集的复杂性而异,并非在所有场景中都能持续提高性能。需要进行仔细的评估和实验,以确定反转输入序列对于特定任务和数据集是否有益。

现在我们已经理解了编码器 - 解码器的概念。如果研读Ilya Sutskever撰写的著名研究论文《Sequence to Sequence Learning with Neural Networks》,我们将能很好地理解论文中的概念。下面我总结一下论文的内容:

  • 在翻译中的应用:该模型专注于将英语翻译成法语,展示了序列到序列学习在神经机器翻译中的有效性。
  • 特殊的句末符号:数据集中的每个句子都以一个独特的句末符号(“”)结尾,使模型能够识别序列的结束。
  • 数据集:该模型在一个包含1200万个句子的子集上进行训练,这些句子包含3.48亿个法语单词和3.04亿个英语单词,数据集来自公开可用的语料库。
  • 词汇限制:为了控制计算复杂度,对两种语言都使用了固定的词汇表,英语使用最常见的16万个单词,法语使用8万个单词。不在这些词汇表中的单词被替换为特殊的 “UNK” 标记。
  • 反转输入序列:在将输入句子输入模型之前将其反转,发现这可以显著提高模型的学习效率,尤其是对于较长的句子。
  • 词嵌入:模型使用1000维的词嵌入层来表示输入单词,为每个单词提供密集且有意义的表示。
  • 架构细节:输入(编码器)和输出(解码器)模型都有4层,每层包含1000个单元,展示了基于深度LSTM的架构。
  • 输出层和训练:输出层使用SoftMax函数在最大词汇表上生成概率分布。模型在这些设置下进行端到端训练。
  • 性能 - BLEU分数:该模型的BLEU分数达到34.81,超过了基于统计的机器翻译系统在同一数据集上的33.30分,标志着神经机器翻译的重大进步。

7. 示例:基于神经网络的编码器 - 解码器架构

我们可以在编码器 - 解码器架构中使用CNN、RNN和LSTM来解决不同类型的问题。结合使用不同类型的网络有助于捕捉数据输入和输出序列之间的复杂关系。以下是可以使用CNN、RNN、LSTM、Transformer等网络的不同场景或问题示例:

  • CNN作为编码器,RNN/LSTM作为解码器:这种架构可用于图像描述等任务,其中输入是图像,输出是描述图像的单词序列。CNN可以从图像中提取特征,而RNN/LSTM可以生成相应的文本序列。回顾可知,CNN擅长从图像中提取特征,因此可在涉及图像的任务中用作编码器。此外,RNN/LSTM擅长处理单词序列等顺序数据,可在涉及文本序列的任务中用作解码器。
  • RNN/LSTM作为编码器,RNN/LSTM作为解码器:这种架构可用于机器翻译等任务,其中输入和输出都是长度可变的单词序列。编码器中的RNN/LSTM可以将输入的单词序列编码为隐藏状态或数值表示,而解码器中的RNN/LSTM可以生成不同语言的相应输出单词序列。下图展示了在编码器和解码器网络中都使用RNN的编码器 - 解码器架构。输入的单词序列为英语,输出是德语的机器翻译。

在编码器 - 解码器架构中使用RNN存在一个缺点。编码器网络中的最终数值表示或隐藏状态必须代表整个数据序列的上下文和含义。如果数据序列足够长,这可能会很有挑战性,并且在将整个信息压缩为数值表示的过程中,序列开头的信息可能会丢失。

在编码器 - 解码器架构中使用CNN、RNN、LSTM等不同类型的神经网络时,需要注意以下几个局限性:

  • CNN计算成本可能较高,并且可能需要大量的训练数据。
  • RNN/LSTM可能会遇到梯度消失/梯度爆炸问题,并且可能需要仔细的初始化和正则化。
  • 结合使用不同类型的网络会使模型更加复杂,并且难以训练。

8. 编码器 - 解码器神经网络架构的应用

以下是编码器 - 解码器神经网络架构在现实生活中的一些应用:

  • Transformer模型:Vaswani等人在论文《Attention Is All You Need》中最初提出的Transformer模型由编码器和解码器组成。每个部分都由使用自注意力机制的层构成。编码器处理输入数据(如文本)并创建其富含上下文的表示。解码器利用这些表示以及自身的输入(如句子中的前一个单词)来生成输出序列。T5(文本到文本转换Transformer)采用了编码器 - 解码器架构。还有另一个例子是BART(双向和自回归Transformer),它结合了双向编码器(如BERT)和自回归解码器(如GPT)。
  • Make-a-Video:Facebook/Meta最近推出的人工智能系统Make-a-Video可能由深度学习技术驱动,可能包括用于将文本提示转换为视频内容的编码器 - 解码器架构。这种常用于序列到序列转换的架构,会使用编码器将输入文本转换为密集向量表示,解码器将该向量转换为视频内容。然而,鉴于从文本创建视频的复杂性,该系统可能还采用了生成对抗网络(GANs)或变分自编码器(VAEs)等先进的生成模型,这些模型在生成高质量、逼真图像方面表现出色。此外,为了学习从文本到视觉的映射并理解世界的动态,它可能利用了大量的文本 - 图像配对数据和视频片段,可能采用了无监督学习或自监督学习技术。
  • 机器翻译:编码器 - 解码器架构最常见的应用之一是机器翻译。如上文(使用RNN的编码器 - 解码器架构)所示,一种语言的单词序列被翻译成另一种语言。编码器 - 解码器模型可以在大量的双语文本语料库上进行训练,以学习如何将一种语言的单词序列映射到另一种语言的等效序列。
  • 图像描述:图像描述是编码器 - 解码器架构的另一个应用。在这个应用中,图像由编码器(使用CNN)处理,输出被传递到解码器(RNN或LSTM),解码器生成图像的文本描述。这可用于自动图像标记和添加描述等应用。

本文转载自​柏企科技圈​,作者:柏企 



收藏
回复
举报
回复
相关推荐