Seq2Seq、RNN 的概述

5 阅读1分钟

我们可以把 Seq2Seq(Sequence-to-Sequence,序列到序列) 想象成一种任务架构(业务流程),而 RNN(Recurrent Neural Network,循环神经网络) 则是驱动这个架构的基础引擎(具体算法组件)

下面为你拆解它们各自是什么,以及它们是如何结合在一起工作的。


一、 什么是 RNN(循环神经网络)?

普通的神经网络(如全连接网络 CNN、DNN)在处理数据时,假设每个输入之间是相互独立的(比如识别一张猫的图片,不需要知道上一张图片是什么)。

但人类的语言、音频或时间序列是有上下文顺序的。“我 喜欢 苹果”和“苹果 喜欢 我”含义完全不同。

RNN 的核心思想:拥有“短期记忆”(Hidden State / 隐藏状态)。

  • 它在处理当前词(第 tt 步)时,不仅看当前词的内容,还会把上一时刻保留的记忆一起输入进来: 当前记忆 ht=f(当前输入 xt+上一刻记忆 ht1)\text{当前记忆 } h_t = f(\text{当前输入 } x_t + \text{上一刻记忆 } h_{t-1})
  • 局限性:标准 RNN 处理长序列时容易发生“遗忘”(梯度消失),因此实际应用中通常会用其改进版本 LSTM(长短期记忆网络)GRU

二、 什么是 Seq2Seq 架构?

Seq2Seq 是一种专门用于处理**“输入是一个序列,输出也是一个序列,且两者长度不固定”**的任务框架。

常见场景:

  • 机器翻译:英文(5个词)\to 中文(3个词)
  • 文本摘要:长文章 \to 短摘要
  • 对话系统:提问句子 \to 回答句子

Seq2Seq 采用经典的 Encoder-Decoder(编码器-解码器) 结构:

  1. Encoder(编码器):负责将变长的输入序列“读懂”,并压缩成一个包含全局语义的向量(称为 Context Vector / 语义向量)。
  2. Decoder(解码器):负责拿到这个语义向量,一步步生成目标序列。

三、 RNN 是如何在 Seq2Seq 中工作的?

在 Transformer 诞生之前,最经典的 Seq2Seq 结构就是由两个 RNN(通常是 LSTM/GRU)拼接而成的

【输入序列】: "I" -> "love" -> "cat"
                  ↓      ↓       ↓
【Encoder RNN】: [RNN] -> [RNN] -> [RNN] 
                                    ↓
                         [ Context Vector (语义向量) ]
                                    ↓
【Decoder RNN】: [RNN] -> [RNN] -> [RNN] -> [RNN]
                  ↓        ↓        ↓        ↓
【输出序列】:    "我"     "爱"     "猫"    <EOS> (结束符)

具体工作流程:

  1. 编码阶段(Encoder 端):

    • 输入一句话,例如 "I love cat"
    • Encoder RNN 逐词读取:
      • 读取 "I",生成隐藏状态 h1h_1
      • 读取 "love",结合 h1h_1 生成 h2h_2
      • 读取 "cat",结合 h2h_2 生成最后的隐藏状态 h3h_3
    • 这个最终的 h3h_3(包含了整句话的信息)就被作为 Context Vector(上下文向量 CC
  2. 解码阶段(Decoder 端):

    • Decoder RNN 获取到上下文向量 CC(通常将其作为 Decoder 的初始状态或每一步的输入)。
    • 给出起始标记 <SOS>(Start of Sentence),Decoder 生成第一个词 "我"
    • 下一步,把 "我" 作为输入,继续生成下一个词 "爱"
    • 如此循环,直到 Decoder 生成结束标记 <EOS>(End of Sentence),翻译完成。

四、 基于 RNN 的 Seq2Seq 的瓶颈与演进

虽然基于 RNN 的 Seq2Seq 开创了端到端序列建模的时代,但它有两个致命弱点:

  1. 信息瓶颈(Information Bottleneck):

    • 不管输入句子有多长(10个词还是100个词),Encoder 最终都要把它强行压缩成一个固定长度的向量。长文本的信息极易丢失。
    • 解决办法:引入 Attention(注意力机制),让 Decoder 在生成每个词时,可以直接回顾 Encoder 每一步的记忆,而不仅依赖最后一个向量。
  2. 无法并行计算(训练慢):

    • RNN 必须等 t1t-1 步计算完才能算第 tt 步,无法利用现代 GPU 的并行能力进行大规模加速。
    • 最终演进:2017 年 Google 提出了 Transformer,彻底抛弃了 RNN,完全依靠自注意力机制(Self-Attention)处理序列,成为了如今主流大模型(如 GPT、BERT、LLaMA 等)的基石。

总结

  • RNN 是一种按时间/序列顺序一步步处理数据、具备记忆能力的神经网络类型
  • Seq2Seq 是一种“输入序列 \to 输出序列”的网络设计范式(Encoder-Decoder)
  • Seq2Seq 中的 RNN 指的是利用 RNN 的记忆特性,一个作为编码器提取输入特征,另一个作为解码器生成输出结果。