non-autoregressive sequence generation

article/2025/6/7 15:19:32

非自回归non-autoregressive

传统rnn是autoregressive,而且encode和decode都是根据上一个input/output,这样花费的时间就和句子长度成正比

transformer的输入是并行的,但是decode阶段还是autoregressive

单纯把影像当成 N×M 个独立像素去拟合,会缺乏像素之间的依赖,也无法产生多样化样本,就是普通的network无法学到多样化样本和像素间的依赖;要解决这两个痛点,可以选择自回归模型(PixelRNN/PixelCNN 等)或含潜在变量的生成模型(GAN、VAE 等)

非自回归序列生成(Non-Autoregressive Sequence Generation, NAT)学习笔记

一、概念简介

1.1 自回归(Autoregressive, AR)模型

  • Autoregressive(自回归):每一个输出依赖于前一个输出

  • 每一步的生成依赖前一个 token:$y_t \sim P(y_t | y_1, y_2, ..., y_{t-1})$

  • 无法并行解码,推理慢

  • 示例:Transformer、GPT

1.2 非自回归(Non-Autoregressive, NAT)模型

  • 所有 token 可并行生成:$P(y_1, y_2, ..., y_T | x) = \prod_{t=1}^T P(y_t | x)$

  • 加速明显,特别适合部署

1.3 应用场景

  • 机器翻译

  • 图像字幕生成

  • 语音识别


二、核心挑战

2.1 多模态问题(Multi-Modality Problem)

  • 多模态:同一输入可能对应多个输出选项

  • 一个输入可能对应多个正确输出(如“Hello”→“你好”/“哈囉”)

  • 没有前后依赖的信息,容易平均化,输出模糊或不自然

  • 一个输入可能对应多个正确输出(如“Hello”→“你好”/“哈囉”)

  • 没有前后依赖的信息,容易平均化,输出模糊或不自然

2.2 序列长度预测

  • 输出序列长度不固定,NAT需先预测长度或通过对齐机制辅助


三、经典模型方法

3.1 Vanilla NAT (Gu et al., ICLR 2018)

  • 通过“Fertility”机制预测每个输入token应复制多少次

  • Fertility(表示每个输入 token 应生成多少个输出 token)标签可由外部对齐工具生成(如 fast_align)

  • 优化:使用 REINFORCE 微调 Fertility 预测器

3.2 Knowledge Distillation(知识蒸馏)

  • 使用AR模型生成训练目标

  • Student NAT 模仿 Teacher AR 的输出,减少模态不确定性

3.3 Noisy Parallel Decoding (NPD,噪声并行解码)

  • 多次采样Fertility→生成多个候选→用AR模型评分→选最优


四、进阶模型演化

4.1 Iterative Refinement (iNAT,迭代式精化)

  • 初始粗生成 + 多次 mask 再预测

  • Mask-Predict(Ghazvininejad et al., 2019)

  • 每轮mask最不确定的token,迭代优化

4.2 Insertion-Based NAT(基于插入的非自回归模型)

  • 每次预测插入新词,直到完整句子

  • Insertion Transformer(Stern et al., 2019)

  • KERMIT(Chan et al., 2019)可同时建模 P(x), P(y), P(x|y), P(y|x)

4.3 Edit-Based NAT:Levenshtein Transformer(基于编辑的非自回归模型)

  • 模仿编辑距离算法:插入+删除实现序列变换

  • 用 imitation learning 学习插入、删除策略

4.4 CTC-Based NAT

  • CTC(连接时序分类,Connectionist Temporal Classification)是一种适用于对齐不明确的序列建模方法 使用 CTC (Connectionist Temporal Classification) 解码

  • 适用于语音等序列对齐明确的任务

  • 代表作:E2E NAT with CTC(Libovický et al., 2018)

4.5 Imputer(补全器模型,Chan et al., 2020)

  • 融合 Mask-Predict 和 CTC

  • 先使用 ConvNet 提取特征,再通过多轮 mask 完善序列


五、效果评估

模型速度准确度优势代表作
AR Transformer准确Vaswani et al. 2017
Vanilla NAT较低并行生成Gu et al., 2018
Mask-Predict中等中高精细迭代Ghazvininejad et al. 2019
LevT中等中高插删灵活Gu et al., 2019
CTC NAT中等对齐明确Libovický et al., 2018

六、总结与思考

6.1 优点

  • 并行生成,加速显著

  • 适合实时任务,如翻译、语音识别

6.2 缺点

  • 输出精度略逊

  • 多模态问题难解

6.3 提升方向

  • 蒸馏技术+多阶段精化

  • 插入/编辑策略更拟人

  • 引入显式语义控制机制


七、参考论文

  1. Gu et al., 2018 - Vanilla NAT

  2. Ghazvininejad et al., 2019 - Mask-Predict

  3. Gu et al., 2019 - Levenshtein Transformer

  4. Stern et al., 2019 - Insertion Transformer

  5. Chan et al., 2020 - Imputer

  6. Libovický et al., 2018 - CTC NAT

非自回归序列生成(NAT)讲解

以下是基于《Non-Autoregressive Sequence Generation》文档内容,对非自回归序列生成(NAT)的原理和应用的详细讲解,数学公式以可读形式呈现,旨在帮助您深刻理解。

1. 序列生成简介

序列生成是指根据输入条件 x,生成输出序列 y = (y₁, y₂, ..., yₜ)。常见任务包括:

  • 机器翻译:将一种语言翻译为另一种语言(如英文到德文)。
  • 图像描述生成:为图像生成文本描述(如“一个女人在公园里扔飞盘”)。
  • 文本到图像生成:根据文本生成图像(如“一只狗在跑”)。

传统方法使用自回归模型(AR),其概率分布为:

p(y | x) = ∏t=1T p(yₜ | y<t, x)

每个标记 yₜ 依赖于之前标记 y<t 和输入 x。自回归模型(如RNN、Transformer)通过注意力机制捕捉依赖关系,但因顺序生成,推理速度较慢。

2. 非自回归序列生成(NAT)

NAT通过并行生成所有标记来加速推理,其概率分布为:

p(y | x) = ∏t=1T p(yₜ | x)

每个标记 yₜ 仅依赖输入 x,不依赖之前标记 y<t,实现一步或少量步骤生成。

主要特点

  • 并行解码:所有标记同时生成,推理速度远超AR模型。
  • 独立性假设:假设标记在给定输入下条件独立,简化计算但可能影响连贯性。
  • 基于Transformer:利用Transformer的注意力机制建模复杂关系。

3. NAT的挑战

NAT在保持输出质量方面面临以下挑战:

  1. 依赖关系建模
    • AR模型通过顺序生成捕捉标记间依赖(如句子语法)。
    • NAT的独立性假设可能导致:
      • 输出不连贯:生成语法或语义不连贯的序列。
      • 重复或不一致:如文本到图像生成中,输出可能是多种描述的“平均”(文档第7页)。
  2. 输出结构
    • 在图像生成中,传统方法将输出神经元映射到像素,忽略结构依赖(文档第8页)。
    • 在文本生成中,NAT难以处理变长序列和输入输出对齐。
  3. 性能差距
    • 单步NAT模型性能低于AR模型。例如,基础Transformer(AR)在英文到德文(En→De)翻译中BLEU分数为27.8,而单步NAT(如“Iterative Refinement”)仅13.9(文档第70页)。

4. NAT的解决方案与进展

为应对挑战,研究者提出了多种技术:

4.1 迭代精炼(Iterative Refinement)

概念:通过多次迭代精炼预测,平衡速度与质量。

示例:Imputer模型(文档第71页)性能随迭代增加提升:

  • 2次迭代:En→De 27.5,De→En 30.2。
  • 4次迭代:En→De 28.0,De→En 31.0。
  • 8次迭代:En→De 28.2,De→En 31.3。

比较:4-8次迭代后,Imputer接近基础Transformer性能,推理速度仍较快。

4.2 连接时序分类(CTC)

概念:CTC(文档第76页,Graves et al., 2006)处理未分割序列数据,解决对齐问题。

应用:在语音识别中,CTC-based NAT模型表现良好,如“CTC (Our Work)”单次迭代实现字符错误率(CER)5.6,单词错误率(WER)16.7(文档第68页)。

优势:适用于变长序列和对齐任务,如语音到文本和机器翻译。

4.3 知识蒸馏(Knowledge Distillation)

概念:使用预训练AR模型的输出(蒸馏数据)训练NAT模型(文档第72页,Gu et al., 2020)。

效果:图4(文档第73页)显示,NAT模型在较大AR模型(big AT)的蒸馏数据上性能优于真实数据。

机制:AR模型提供结构化序列,降低NAT建模依赖的复杂性。

4.4 专用NAT模型

  • Levenshtein Transformer (LevT)(文档第74页,Gu et al., 2019):通过插入和删除操作精炼序列。
  • Insertion Transformer (InsT)(文档第75页,Stern et al., 2019):通过迭代插入生成序列,约需 log₂ n 次迭代。
  • KERMIT(文档第75页,Chan et al., 2019):基于插入的生成模型,增强依赖建模。
  • Mask-Predict(文档第76页,Ghazvininejad et al., 2019):迭代预测掩码标记,提高连贯性。
  • Imputer(文档第75页,Chan et al., 2020):结合填补和动态规划,少量迭代表现优异。

4.5 其他技术

  • 生育率预测(文档第70页,Gu et al., 2018):预测输入标记对应的输出标记数量。
  • 辅助正则化(文档第70页,Wang et al., 2019):提高训练稳定性。
  • N-gram损失(文档第70页,Shao et al., 2020):优化n-gram一致性。
  • 基于提示的训练(文档第70页,Li et al., 2019):利用AR模型提示引导NAT训练。

5. 性能比较

5.1 单步NAT模型(文档第70页)

单步NAT速度快,但性能较低:

  • NAT with Fertility:En→De 17.7,De→En 21.5。
  • Our Work (CTC):En→De 25.7,De→En 28.1。
  • 基础Transformer(AR):En→De 27.8,De→En 31.2。

5.2 多步NAT模型(文档第71页)

多步NAT通过迭代提升性能:

  • Imputer(4次迭代):En→De 28.0,De→En 31.0。
  • Mask-Predict(10次迭代):En→De 27.0,De→En 30.5。

接近AR性能,同时保持较快推理速度。

5.3 语音识别(文档第68页)

CTC-based NAT在语音识别中表现良好:

  • Sabour et al. (2019):CER 3.1,WER 9.3。
  • CTC (Our Work):CER 5.6,WER 16.7。

6. NAT的应用

  • 机器翻译:快速翻译(如英文到德文、罗马尼亚文)。
  • 图像描述生成:并行生成图像描述。
  • 文本到图像生成:需解决结构依赖问题(文档第7页)。
  • 语音识别:CTC-based NAT用于音频转录(文档第68页)。
  • 文本生成:Imputer等技术用于通用序列建模(文档第69页)。

7. NAT的优势

  • 速度:并行解码显著快于AR模型。
  • 可扩展性:适合实时应用,如实时翻译。
  • 灵活性:支持变长序列和复杂任务。

8. 实践理解与实现

  1. 理解Transformer

    熟悉Transformer的编码器-解码器结构和自注意力机制。

  2. 实验迭代精炼

    使用PyTorch/TensorFlow实现NAT模型(如Gu et al., 2018),加入迭代精炼。

  3. 使用知识蒸馏

    训练AR Transformer,用其输出训练NAT模型(参考文档第73页)。

  4. 应用CTC

    使用torch.nn.CTCLoss处理未分割序列。

  5. 评估权衡

    比较BLEU(翻译)或CER/WER(语音),调整迭代次数。

  6. 探索预训练模型

    使用Hugging Face的NAT模型,微调于特定任务。

9. 关键要点

  • 原理:NAT并行生成标记,假设条件独立,区别于AR的顺序生成。
  • 挑战:依赖建模和连贯性问题导致性能差距。
  • 解决方案:迭代精炼、CTC、知识蒸馏及专用模型提升质量。
  • 应用:适用于低延迟任务,如翻译、描述生成和语音识别。
  • 性能:多步NAT接近AR性能,兼顾速度与质量。

通过研读引用的论文(如Gu et al., 2018; Chan et al., 2020)并实验实现,您可以深入掌握NAT。如需代码示例或深入讲解某技术,请告知!


http://www.hkcw.cn/article/gfJwQsnsJH.shtml

相关文章

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题。主要涉及线性回归、回归的显著性、回归系数的置信区间。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…

如何选择最高效的沟通方式?

日常沟通主要分为文字、语音和面对面三种形式&#xff0c;选择何种方式需根据沟通内容的复杂程度、决策难度及互动需求综合判断。 当沟通内容简单明确、以信息传递为主或涉及基础决策时&#xff0c;文字或语音是更高效的选择。这类方式不仅能降低时间成本&#xff0c;还能避免…

VueScan:全能扫描,高清输出

在数字化办公和图像处理的领域&#xff0c;扫描仪扮演着不可或缺的角色。无论是文档的数字化存档、照片的高清复制&#xff0c;还是创意项目的素材采集&#xff0c;一款性能卓越、操作便捷的扫描软件能大幅提升工作效率和成果质量。VueScan正是这样一款集多功能于一身的扫描仪软…

【Hot 100】279. 完全平方数

目录 引言完全平方数我的解题dp总结 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】279. 完全平方数❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01; 引言 今天又…

Alita:通过 MCP 实现自主进化的通用 AI 代理

Alita 是一个创新的通用 AI 代理&#xff0c;采用极简主义设计哲学&#xff0c;强调 minimal predefinition&#xff08;最小预定义&#xff09;和 maximal self-evolution&#xff08;最大自主进化&#xff09;。通过利用 Model Context Protocols (MCPs)&#xff0c;Alita 能…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…

大语言模型评测体系全解析(上篇):基础框架与综合评测平台

文章目录 一、评测体系的历史演进与技术底座&#xff08;一&#xff09;发展历程&#xff1a;从单任务到全维度评测1. 2018年前&#xff1a;单数据集时代的萌芽2. 2019-2023年&#xff1a;多任务基准的爆发式增长3. 2024年至今&#xff1a;动态化、场景化、多模态体系成型关键节…

SpringAI系列 - MCP篇(三) - MCP Client Boot Starter

目录 一、Spring AI Mcp集成二、Spring AI MCP Client Stater三、spring-ai-starter-mcp-client-webflux集成示例3.1 maven依赖3.2 配置说明3.3 集成Tools四、通过SSE连接MCP Server五、通过STDIO连接MCP Server六、通过JSON文件配置STDIO连接一、Spring AI Mcp集成 Spring AI…

MyBatis 一级缓存与二级缓存

一、缓存概述 MyBatis 提供两级缓存机制提升查询性能&#xff1a; 一级缓存&#xff1a;SqlSession 级别&#xff0c;默认开启 二级缓存&#xff1a;Mapper 级别&#xff0c;需手动开启 两者协同工作&#xff0c;形成查询数据优先级&#xff1a;二级缓存 → 一级缓存 → 数据…

008房屋租赁系统技术揭秘:构建智能租赁服务生态

房屋租赁系统技术揭秘&#xff1a;构建智能租赁服务生态 在房地产租赁市场日益活跃的当下&#xff0c;房屋租赁系统成为连接房东与租客的重要数字化桥梁。该系统集成用户管理、房屋信息等多个核心模块&#xff0c;面向管理员、房东和用户三类角色&#xff0c;通过前台展示与后…

HTTP协议完全指南:从请求响应到HTTPS安全机制

文章目录 一、HTTP协议中的基本概念1.HTTP协议介绍&#xff08;1&#xff09;协议&#xff08;2&#xff09;传输&#xff08;3&#xff09;超文本 2.统一资源定位符&#xff08;URL&#xff09; 二、HTTP协议中的请求和响应1.HTTP客户端请求消息&#xff08;1&#xff09;请求…

第11节 Node.js 模块系统

为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分&#xff0c;文件和模块是一一对应的。换言之&#xff0c;一个 Node.js 文件就是一个模块&#xff0c;这个文件可能是JavaScript 代码、JSON 或者编译过的…

『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)

目录 预览效果思路分析downloadTxt 方法readTxt 方法 完整代码总结 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 预览效果 思路分析 downloadTxt 方法 该方法主要完成两个任务&#xff1a; 下载 txt 文件&#xff1a;通…

XCTF-web-ics-05

看一下有什么 只有/index.php 模糊测试得到一个page ┌──(kali㉿kali)-[~] └─$ ffuf -u "http://223.112.5.141:52073/index.php?FUZZFUZZ" -w /usr/share/wordlists/rockyou.txt -fc 403 -c -fs 2305 -s page尝试用php伪协议读取源码?pagephp://filter/readc…

Redis线程模型

前面的文章介绍了Redis的底层数据结构&#xff0c;这篇文章来介绍一下Redis的线程模型。 Redis为什么选择单线程&#xff1f; 官方的回答是这样的&#xff0c;对于Redis来说&#xff0c;CPU通常不会成为瓶颈&#xff0c;因为大多数的请求不会是CPU密集型的&#xff0c;而是IO密…

工厂方法模式深度解析:从原理到应用实战

作者简介 我是摘星&#xff0c;一名全栈开发者&#xff0c;专注 Java后端开发、AI工程化 与 云计算架构 领域&#xff0c;擅长Python技术栈。热衷于探索前沿技术&#xff0c;包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践&#xff0c;乐于分享实战经验与…

STM32入门教程——按键控制LED光敏传感器控制蜂鸣器

前言 本教材基于B站江协科技课程整理&#xff0c;适合有C语言基础、刚接触STM32的新手。它梳理了STM32核心知识点&#xff0c;帮助大家把C语言知识应用到STM32开发中&#xff0c;更高效地开启STM32学习之旅。 目录 前言 一、硬件接线与模块化编程概述 二、LED 驱动模块开发…

K8s基础一

Kubernetes 架构 Kubernetes 背后的架构概念。 Kubernetes 集群由一个控制平面和一组用于运行容器化应用的工作机器组成&#xff0c; 这些工作机器称作节点&#xff08;Node&#xff09;。每个集群至少需要一个工作节点来运行 Pod。 工作节点托管着组成应用负载的 Pod。控制平…

Spring @Value注解的依赖注入实现原理

Spring Value注解的依赖注入实现原理 一&#xff0c;什么是Value注解的依赖注入二&#xff0c;实现原理三&#xff0c;代码实现1. 定义 Value 注解2. 实现 InstantiationAwareBeanPostProcessor3. 实现 AutowiredAnnotationBeanPostProcessor4. 占位符解析逻辑5. 定义 StringVa…

Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南

一、三大数据库基础认知 Oracle数据库 基本概况 ✔ 厂商&#xff1a;Oracle Corporation ✔ 许可证&#xff1a;商业授权&#xff08;含Oracle XE免费版本&#xff09; ✔ 典型用户&#xff1a;大型银行、政府机构、电信运营商 核心特性 -- 示例&#xff1a;Oracle PL/SQL存…