当前位置: 首页 > news >正文

深度学习中的 Seq2Seq 模型与注意力机制

一、Seq2Seq 模型

定义:

Seq2Seq(Sequence-to-Sequence)是一种端到端的编码器-解码器架构,专为处理变长输入/输出序列的任务设计(如机器翻译、文本摘要)。其核心思想是将输入序列编码为固定维度的上下文向量(Context Vector),再通过解码器生成目标序列。

​​输入​​:可变长度序列(如 X 1 ​ ,X 2 ​ ,…,X n ​ )
​​输出​​:可变长度序列(如 Y 1 ​ ,Y 2 ​ ,…,Y n ​ ) ​​
核心机制​​: ​​

  • Encoder​​:将输入序列编码为​​固定长度向量​​(即 Encoder state) ​​

  • Decoder​​:将该向量解码为目标序列

    Seq2Seq 模型示意图
    Seq2Seq 模型示意图

Cell 可以用 RNN,GRU,LSTM 等结果。相当于将 RNN 模型中s0s_0s0变为Encoder

条件语言模型理解

1、编解码器作用

  • 编码器的作用:将不定长输入序列 x1,…,xTx_{1},\ldots,x_{T}x1,,xT 编码为固定长度的状态向量 CCC
  • 解码器的作用:输出 yty_{t}yt 的条件概率基于以下两个因素:
    • 先前生成的输出序列 y1,…,yt−1y_{1},\ldots,y_{t-1}y1,,yt1
    • 编码器输出的状态向量 CCC
  • 目标函数
    argmax⁡P(y1,…,yT′∣x1,…,xT)\operatorname{argmax} P\left(y_{1},\ldots,y_{T^{\prime}}\mid x_{1},\ldots,x_{T}\right)argmaxP(y1,,yTx1,,xT)
    即在给定输入序列的条件下,最大化输出序列的概率

2、根据最大似然估计,最大化输出序列的概率

  • 概率分解
    P(y1,…,yT′∣x1,…,xT)=∏t′=1T′P(yt′∣y1,…,yt′−1,C)P\left(y_{1},\ldots,y_{T^{\prime}}\mid x_{1},\ldots,x_{T}\right) = \prod_{t^{\prime}=1}^{T^{\prime}} P\left(y_{t^{\prime}} \mid y_{1},\ldots,y_{t^{\prime}-1}, C \right)P(y1,,yTx1,,xT)=t=1TP(yty1,,yt1,C)
  • 核心问题:直接计算概率连乘 P(y1∣C)×P(y2∣y1,C)×P(y3∣y2,y1,C)×⋯P(y^1 \mid C) \times P(y^2 \mid y^1, C) \times P(y^3 \mid y^2, y^1, C) \times \cdotsP(y1C)×P(y2y1,C)×P(y3y2,y1,C)× 会导致结果趋近于零(数值下溢),不利于计算存储。

3、解决方案:对数概率转化

  • 对概率公式取对数:
    log⁡P(y1,…,yT′∣x1,…,xT)=∑t′=1T′log⁡P(yt′∣y1,…,yt′−1,C)\log P\left(y_{1},\ldots,y_{T^{\prime}}\mid x_{1},\ldots,x_{T}\right) = \sum_{t^{\prime}=1}^{T^{\prime}} \log P\left(y_{t^{\prime}} \mid y_{1},\ldots,y_{t^{\prime}-1}, C \right)logP(y1,,yTx1,,xT)=t=1TlogP(yty1,,yt1,C)

  • 转化意义

    • 概率连乘 → 对数概率求和
      log⁡P(y1∣C)+log⁡P(y2∣y1,C)+log⁡P(y3∣y2,y1,C)+⋯\log P(y^1 \mid C) + \log P(y^2 \mid y^1, C) + \log P(y^3 \mid y^2, y^1, C) + \cdotslogP(y1C)+logP(y2y1,C)+logP(y3y2,y1,C)+
    • 优化目标等价于
      通过 Softmax 输出概率最大化,最小化输出序列的负对数损失(Negative Log-Likelihood Loss)。
    机器翻译案例示意图
    机器翻译案例示意图

二、注意力机制

长难句问题

当输入序列较长时(如 >30 词),单个上下文向量 C\mathbf{C}C难以有效压缩全部信息,导致解码质量显著下降(尤其丢失序列开头信息)。对于更长的句子,Seq2Seq 就显得力不从心了。下图是通常 BLEU 的分数随这句子的长度变化,可以看到句子非常长的时候,分数就很低。

BLEU分数变化图
BLEU分数变化图

注意力机制定义

建立 Encoder 的隐层状态输出到 Decoder 对于输出 y 所需要的上下文信息

其目的是增加编码器信息输入到解码器中相同时刻的联系

注意力机制结构示意图
注意力机制结构示意图

公式

关键设定

  • Encoder 时刻记为 ttt(输入序列时间步)
  • Decoder 时刻记为 t′t't(输出序列时间步)

1. 上下文向量 ct′c_{t'}ct 的计算
ct′=∑t=1Tαt′thtc_{t'} = \sum_{t=1}^{T} \alpha_{t'}^t h_tct=t=1Tαttht

  • 参数说明
    • αt′t\alpha_{t'}^tαtt权重系数(通过训练学习得到)
    • hth_tht:Encoder 第 ttt 时刻的隐层状态输出
  • 工作示例(上图蓝色Decoder cell 示意图):
    α41h1+α42h2+α43h3+α44h4=c4\alpha_4^1 h_1 + \alpha_4^2 h_2 + \alpha_4^3 h_3 + \alpha_4^4 h_4 = c_4α41h1+α42h2+α43h3+α44h4=c4

2. 权重系数 αt′t\alpha_{t'}^tαtt 的生成

  • Softmax 归一化
    αt′t=exp⁡(et′t)∑k=1Texp⁡(et′k),t=1,2,…,T\alpha_{t'}^t = \frac{\exp(e_{t'}^t)}{\sum_{k=1}^{T} \exp(e_{t'}^k)}, \quad t=1,2,\ldots,Tαtt=k=1Texp(etk)exp(ett),t=1,2,,T
  • 能量得分 et′te_{t'}^tett 的计算
    et′t=g(st′−1,ht)=v⊤tanh⁡(Wsst′−1+Whht)e_{t'}^t = g(s_{t'-1}, h_t) = v^{\top} \tanh \left( W_s s_{t'-1} + W_h h_t \right)ett=g(st1,ht)=vtanh(Wsst1+Whht)
    • 输入来源
      • st′−1s_{t'-1}st1:Decoder 在 t′−1t'-1t1时刻的隐层状态
      • hth_tht:Encoder 在 ttt 时刻的隐层状态
    • 可学习参数
      • vvv:权重向量
      • Ws,WhW_s, W_hWs,Wh:权重矩阵

注意力机制的意义与影响

  1. 解决长序列遗忘
    解码器直接访问所有编码器状态,避免信息压缩损失。
  2. 可解释性
    注意力权重 αtj\alpha_{tj}αtj 可视化输入-输出词对齐(如翻译中源词与目标词关联)。
  3. 性能提升
    在机器翻译等任务上,BLEU 值提升 >30%(对比无注意力模型)。

扩展:从基础注意力到 Transformer

基础注意力仍依赖 RNN 的序列计算。Transformer 模型进一步革新:

  • Self-Attention 替代 RNN,并行捕获全局依赖
  • 多头注意力(Multi-Head)增强不同表示子空间的聚焦能力
  • 成为 BERT、GPT 等预训练模型的基石

三、总结

Seq2Seq 框架通过条件语言建模解决序列生成问题,而注意力机制通过动态上下文计算突破长序列建模瓶颈,为后续 Transformer 革命奠定基础。其核心价值在于:让模型学会在生成过程中自主关注最相关的信息源,显著提升语义理解与生成的准确性。

http://www.dtcms.com/a/273367.html

相关文章:

  • 解释sync.WaitGroup的用途和工作原理。在什么情况下应该使用它?
  • 时间显示 蓝桥云课Java
  • Android ViewBinding 使用与封装教程​​
  • Netron的基本使用介绍
  • UNet改进(20):融合通道-空间稀疏注意力的医学图像分割模型
  • 客户频繁问询项目进度,如何提高响应效率
  • Java 中的多线程实现方式
  • Spring AI 系列之八 - MCP Server
  • NFS文件存储及部署论坛(小白的“升级打怪”成长之路)
  • (鱼书)深度学习入门2:手搓感知机
  • PostgreSQL创建新实例并指定目录
  • 下一代防火墙混合模式部署
  • Jupyter介绍
  • MySQL事务实现原理
  • SpringCloud系列 - 分布式锁(八)
  • html页面,当鼠标移开A字标就隐藏颜色框
  • Spring Boot项目中大文件上传的优化策略与实践
  • 华为鸿蒙3.0 4.0完全关闭纯净模式的方法以及临时绕过纯净模式检测的方法
  • 接口(上篇)
  • 基于深度学习的自动调制识别网络(持续更新)
  • 亚洲牧原:活跃行业交流,延伸公益版图,市场拓展再结硕果
  • 布隆过滤器原理
  • 我的世界模组开发——机械动力的渲染(4)
  • java-io流
  • 对象序列化与反序列化
  • 【PyTorch】PyTorch 自动微分与完整手动实现对比
  • vue3 element plus table 使用固定列,滑动滚动会错位、固定列层级异常、滑动后固定列的内容看不到了
  • Java多线程 V1
  • AIStarter 3.2.0正式上线!高速下载+离线导入+一键卸载新功能详解【附完整使用教程】✅ 帖子正文(字数:约 400 字)
  • 静态路由综合实验