【第四章:大模型(LLM)】01.神经网络中的 NLP-(2)Seq2Seq 原理及代码解析

第四章:大模型(LLM)

第二部分:神经网络中的 NLP

第二节:Seq2Seq 原理及代码解析

1. Seq2Seq(Sequence-to-Sequence)模型原理

Seq2Seq 是一种处理序列到序列任务(如机器翻译、文本摘要、对话生成等)的深度学习架构,最早由 Google 在 2014 年提出。其核心思想是使用 编码器(Encoder) 将输入序列编码为上下文向量,再通过 解码器(Decoder) 逐步生成输出序列。

1.1 架构组成

  1. 编码器(Encoder)

    • 通常是 RNN、LSTM 或 GRU。

    • 输入:序列

    • 输出:隐藏状态 ​,作为上下文向量。

  2. 解码器(Decoder)

    • 结构类似于编码器。

    • 输入:编码器输出的上下文向量 + 上一步预测的输出。

    • 输出:目标序列

  3. 上下文向量(Context Vector)

    • 编码器最后一个隐藏状态 ​ 作为整个输入序列的信息摘要。

2. 数学公式

  • 编码器:
  • 解码器:


其中 c 是上下文向量。


3. 经典 Seq2Seq 训练流程

  1. 输入序列通过编码器,生成上下文向量。

  2. 解码器利用上下文向量和前一时刻的预测结果,逐步生成输出。

  3. 使用 教师强制(Teacher Forcing) 技术,训练时将真实标签输入解码器。


4. 改进:Attention 机制

Seq2Seq 传统模型存在 长序列信息丢失 问题。
Attention 通过在每一步解码时为输入序列不同部分分配权重,解决了这个问题。

公式:

其中 ​ 是注意力权重。


5. PyTorch 代码解析:Seq2Seq 示例

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# Encoder
class Encoder(nn.Module):
    def __init__(self, input_dim, hidden_dim, num_layers=1):
        super(Encoder, self).__init__()
        self.rnn = nn.GRU(input_dim, hidden_dim, num_layers, batch_first=True)

    def forward(self, x):
        outputs, hidden = self.rnn(x)
        return hidden

# Decoder
class Decoder(nn.Module):
    def __init__(self, output_dim, hidden_dim, num_layers=1):
        super(Decoder, self).__init__()
        self.rnn = nn.GRU(output_dim, hidden_dim, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)

    def forward(self, x, hidden):
        output, hidden = self.rnn(x, hidden)
        pred = self.fc(output)
        return pred, hidden

# Seq2Seq
class Seq2Seq(nn.Module):
    def __init__(self, encoder, decoder):
        super(Seq2Seq, self).__init__()
        self.encoder = encoder
        self.decoder = decoder

    def forward(self, src, trg):
        hidden = self.encoder(src)
        outputs, _ = self.decoder(trg, hidden)
        return outputs

# Example usage
input_dim, output_dim, hidden_dim = 10, 10, 32
encoder = Encoder(input_dim, hidden_dim)
decoder = Decoder(output_dim, hidden_dim)
model = Seq2Seq(encoder, decoder)

src = torch.randn(16, 20, input_dim)  # batch=16, seq_len=20
trg = torch.randn(16, 20, output_dim)
output = model(src, trg)
print(output.shape)  # [16, 20, 10]

6. 应用场景

  • 机器翻译(Google Translate)

  • 文本摘要(新闻摘要生成)

  • 对话系统(聊天机器人)

  • 语音识别(语音到文本)

相关推荐
知识分享小能手2 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
LaughingZhu3 小时前
Product Hunt 每日热榜 | 2026-09-05
人工智能·深度学习·神经网络·搜索引擎·百度
YOLO数据集集合5 小时前
无人机高分辨率多树种单木分割数据集 | 单木分割 无人机林业 树种识别 实例分割 点云 遥感数据集 深度学习 精准林业9047期
人工智能·深度学习·数据集·无人机·遥感数据集·点云数据集·树木分割
HyperAI超神经10 小时前
SenseNova-U1.5-8B-MoT 统一生成与理解,解锁原生多模态创作;DeepSeek-V4-Flash-Vision-Exp 拓展视觉理解新能力
人工智能·深度学习·图像生成·多模态大模型·视觉推理
东方佑11 小时前
元可塑性循环单元(Meta-RU)与 GRU 的对比研究与混合设计
人工智能·深度学习·gru
LlmCraft|大模型工程实践11 小时前
08 预训练语言模型:BERT 与 GPT
人工智能·深度学习·nlp
EQUINOX111 小时前
【论文精读】| MiniGPT-4精读
论文阅读·人工智能·深度学习
X54先生(人文科技)12 小时前
《元创力》卷宗 3.5《退场不是退出——碳硅协同驾驶原则的深层推导》
人工智能·深度学习·开源·ai写作·零知识证明
lucky_syq12 小时前
小模型推理能力天花板:是Transformer架构锁死,还是参数规模不够?换架构能否实现推理飞跃?
深度学习·架构·transformer
jay神13 小时前
深度学习的损失函数怎么选?
人工智能·深度学习·计算机视觉·毕业设计·损失函数