Seq2Seq(Sequence-to-Sequence)架构是一种用于处理序列数据的深度学习模型,它广泛应用于自然语言处理(NLP)任务中,如机器翻译、文本摘要、对话系统等。
Seq2Seq架构算是大模型的鼻祖,该结构的思想是Encoder to Decoder(编解码器原理),将一个输入序列映射到另一个输出序列,其中输入和输出序列的长度可以不同。
Seq2Seq 架构通常由两个主要组件组成:
-
编码器(Encoder):
- 编码器负责接收输入序列,并将其转换为一个固定长度的上下文向量(context vector),也称为“思想向量”(thought vector)。这个向量应该能够捕捉到输入序列中的所有相关信息。
- 编码器通常是基于循环神经网络(RNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)构建的,因为这些类型的网络擅长处理序列数据,可以记住序列中的长期依赖关系。
-
解码器(Decoder):
- 解码器的任务是从编码器生成的上下文向量中解码出目标序列。它以逐个元素的方式生成输出序列,每次生成一个元素,并使用该元素作为下一个时间步的输入。
- 与编码器类似,解码器也可以基于 RNN、LSTM 或 GRU 实现。解码器在生成每个输出时,会考虑到之前的输出以及编码器提供的上下文信息。
Encoder to Decoder(编解码器原理)
- 编码器 - 解码器
- Encoder - Decoder
- RNN - RNN
- Seq2Seq
- RNN2RNN:进来一句话,出来一句话
- CNN2RNN:看图说话
Seq2Seq
- 输入:一个句子
- 输出:一个句子
- Seq编码器:把输入的句子,抽取特征,变成一个中间表达向量;
- sentence --> feature vector
- 本质是RNN的最后一步 hn
- 中间表达的本质:hn
- Seq解码器:根据中间表达,生成一个回答
Seq2Seq 模型还经常结合以下技术来提高性能:
-
注意力机制(Attention Mechanism): 注意力机制允许解码器在生成每个输出时,不仅仅依赖于整个输入序列压缩成的单一上下文向量,而是可以关注输入序列的不同部分。这有助于解决长序列的信息丢失问题,并且让模型更专注于相关的信息。
-
双向编码器(Bidirectional Encoder): 双向编码器可以让模型同时考虑输入序列的前向和后向信息,从而更好地理解上下文。
-
束搜索(Beam Search): 在解码过程中,不是每次都选择概率最高的单个词作为输出,而是维护一个候选输出列表(即“束”,beam),并根据累积的概率选择最佳的输出序列。这可以帮助找到更可能的输出序列,而不仅仅是贪婪算法下的局部最优解。
Seq2Seq 模型在训练时,通常使用教师强制(teacher forcing)技术,即在训练解码器时,使用真实的目标序列作为下一时刻的输入,而不是模型自己预测的输出。这可以加速训练过程,但可能导致暴露偏差(exposure bias),即模型在训练时看到的真实序列和在推理时看到的自身预测序列之间的差异。
随着研究的发展,Seq2Seq 模型也在不断进化,比如引入了Transformer架构,它完全摒弃了RNN结构,转而使用自注意力(self-attention)机制,大幅提升了处理速度和效果,特别是在处理长序列时表现尤为突出。