论文概述

HiAR(Hierarchical Autoregressive Video Generation)是由中国科学技术大学(USTC)和腾讯混元(Tencent Hunyuan)联合提出的层级自回归视频生成框架,发表于 arXiv:2603.087031

该工作的核心贡献是提出步骤优先(Step-First)去噪范式,彻底改变了传统自回归视频扩散模型中”块优先(Block-First)“的去噪顺序。通过在每个去噪步骤中对所有视频块进行因果生成,HiAR 大幅降低了块间的误差传播,同时自然支持流水线并行推理,实现约 1.8 倍的wall-clock加速。

在 VBench(20秒视频生成)评测中,HiAR 取得了最佳综合评分最低时间漂移

问题背景

自回归视频扩散的挑战

双向扩散模型(如 Wan2.1)在固定时间窗口内表现优异,但难以扩展到任意时长的视频生成。为解决这一问题,因果自回归(AR)生成成为长视频生成的主流方法,支持流式输出、无限扩展和实时交互。

然而,自回归方法面临一个关键挑战:在保持时间连续性的同时,防止误差累积导致的渐进式质量退化

现有方法的局限

现有的因果AR方法通常采用块优先(Block-First)去噪策略

传统方法 (Block-First):
块1: [去噪步骤1] → [去噪步骤2] → ... → [去噪步骤N] → ✓清洁块1
块2: 使用块1的清洁上下文进行条件生成 → ✓清洁块2
块3: 使用块2的清洁上下文进行条件生成 → ...

这种方法的问题在于:

  1. 高确定性误差传播:每个去噪步骤都以完全清洁的上下文(噪声级别 )为条件
  2. 误差放大:上一块的预测误差以高置信度向前传播,加剧质量退化
  3. 长期漂移:视频会出现过度饱和、过度锐化、运动重复、语义漂移等问题

这种现象被称为 Self-Forcing 问题——模型被迫以自身的预测误差作为条件,导致错误累积。

核心创新:步骤优先去噪

核心洞察

HiAR 的核心洞察来自双向扩散模型的启发:在共享噪声级别下去噪所有帧时,仍然能保持时间一致性。这说明高度清洁的上下文并非必要条件——噪声上下文已经提供了足够的时间一致性信号,同时能有效缓解误差传播。

层级去噪范式

HiAR 提出层级去噪框架,彻底翻转传统的去噪顺序:

HiAR 方法 (Step-First):
去噪步骤1: [块1处理] → [块2处理] → [块3处理] → ...
去噪步骤2: [块1处理] → [块2处理] → [块3处理] → ...
...
去噪步骤N: [块1处理] → [块2处理] → [块3处理] → ✓所有块完成

每个块始终以相同噪声级别的上下文为条件,最大程度减少块间误差传输,同时保持时间因果性。

关键优势

特性传统 Block-FirstHiAR Step-First
去噪顺序先完成块1,再处理块2每步骤跨所有块处理
上下文噪声级别(完全清洁)(匹配噪声)
误差传播高确定性放大受控衰减
时间连续性
推理并行性有限支持流水线并行

架构设计

整体架构

HiAR 基于 视频扩散模型架构,采用以下核心组件:

  1. DiT Backbone:使用 Diffusion Transformer(DiT)作为去噪网络
  2. 因果注意力:替换双向注意力为因果注意力,支持自回归生成
  3. 层级调度器:管理步骤优先的去噪调度
class HiARModel(nn.Module):
    """
    HiAR 核心模型架构
    """
    def __init__(self, backbone, num_blocks, num_denoise_steps):
        super().__init__()
        self.backbone = backbone  # DiT backbone
        self.num_blocks = num_blocks
        self.num_denoise_steps = num_denoise_steps
        
        # 因果注意力掩码
        self.causal_mask = self.build_causal_mask()
    
    def hierarchical_denoise(self, noisy_frames, context_blocks):
        """
        层级去噪:步骤优先处理
        
        Args:
            noisy_frames: 当前块含噪视频
            context_blocks: 之前的块(与当前块同噪声级别)
        Returns:
            denoised: 去噪后的视频块
        """
        for step in reversed(range(self.num_denoise_steps)):
            # 在每个去噪步骤中,对所有块进行因果处理
            all_blocks = self.concat_context(context_blocks, noisy_frames)
            
            # 因果注意力计算
            processed = self.causal_attention(all_blocks, step)
            
            # 去噪步骤更新
            noisy_frames = self.denoise_step(processed, step)
        
        return noisy_frames
    
    def causal_attention(self, x, timestep):
        """
        因果注意力:每个块只关注之前的块
        """
        # 构建因果掩码
        mask = self.build_causal_mask(x.shape[1])
        
        # 应用因果注意力
        return self.backbone(x, timestep, attention_mask=mask)

条件机制

HiAR 使用匹配噪声级别的条件机制

  • 训练阶段:学习在各种噪声级别下进行条件生成
  • 推理阶段:每个块以前一个块在相同噪声级别的特征为条件

并行推理

流水线并行

层级去噪结构自然支持流水线并行推理。不同去噪步骤可以并行处理不同块:

传统串行:
Step 1: [Block1] → [Block2] → [Block3] → ...
Step 2: [Block1] → [Block2] → [Block3] → ...

流水线并行 (HiAR):
Time:     T1    T2    T3    T4    T5    T6
Block1: [S1]  [S2]  [S3]  [S4]  [✓]
Block2:       [S1]  [S2]  [S3]  [S4]  [✓]
Block3:            [S1]  [S2]  [S3]  [S4]  [✓]

这种流水线结构在4步设置下实现约 1.8 倍的wall-clock加速。

实现细节

class PipelinedHiAR:
    """
    支持流水线并行的HiAR推理
    """
    def __init__(self, model, num_blocks, num_steps, pipeline_stages=4):
        self.model = model
        self.num_blocks = num_blocks
        self.num_steps = num_steps
        self.pipeline_stages = pipeline_stages
    
    def generate_pipelined(self, initial_noise):
        """
        流水线并行生成
        """
        # 初始化各块的隐藏状态
        block_states = [None] * self.num_blocks
        
        # 流水线调度
        pending = []  # 待处理任务队列
        
        for step in reversed(range(self.num_steps)):
            for block_idx in range(self.num_blocks):
                # 获取当前块和上下文
                context = block_states[:block_idx]
                
                # 提交到流水线
                pending.append((step, block_idx, context))
                
                # 执行流水线调度
                while len(pending) >= self.pipeline_stages:
                    self.execute_pipeline_step(pending)
        
        # 完成剩余任务
        while pending:
            self.execute_pipeline_step(pending)
        
        return self.assemble_blocks(block_states)

训练策略与Forward-KL正则化

自展蒸馏的挑战

HiAR 采用 Diffusion 自展蒸馏(Self-Rollout Distillation)进行训练加速。然而,团队发现反向KL目标的模式寻求(mode-seeking)特性会放大低运动捷径——模型逐渐崩溃为近乎静态的输出。

层级去噪进一步放大了这一问题:由于需要在多级噪声上下文中进行条件学习,训练难度增加,需要更多训练步骤。

Forward-KL 正则化解决方案

观察到双向注意力去噪下的运动多样性与因果AR推理高度相关,HiAR 引入了Forward-KL 正则化器

class ForwardKLRegularizer:
    """
    Forward-KL 正则化,防止运动崩溃
    """
    def __init__(self, model, alpha=0.1):
        self.model = model
        self.alpha = alpha  # 正则化权重
    
    def compute_loss(self, x0, noisy_batch, context):
        """
        计算带Forward-KL正则化的损失
        """
        # 双向注意力模式:计算正向KL
        output_bidir = self.model(
            noisy_batch, 
            context,
            attention_mode='bidirectional'
        )
        
        # 因果AR模式:计算蒸馏损失
        output_causal = self.model(
            noisy_batch,
            context,
            attention_mode='causal'
        )
        
        # Forward-KL 正则化
        # 鼓励因果输出匹配双向输出的分布
        fwd_kl_loss = self.forward_kl(
            output_bidir.distribution,
            output_causal.distribution
        )
        
        # 蒸馏损失(反向KL)
        distillation_loss = self.reverse_kl(
            output_causal,
            output_bidir.target
        )
        
        # 总损失
        total_loss = distillation_loss + self.alpha * fwd_kl_loss
        
        return total_loss, {
            'distillation': distillation_loss.item(),
            'forward_kl': fwd_kl_loss.item()
        }

这一方法有效防止了因果推理路径的运动崩溃,同时不干扰蒸馏损失,实现了稳定的长步训练。

实验结果

VBench 评测

在 VBench 20秒视频生成基准测试中,HiAR 取得了最佳综合成绩:

方法综合评分时间一致性动作质量视觉美学
Wan2.1 (双向)0.820.850.790.82
Self-Forcing0.710.650.750.73
LoL0.760.720.780.77
HiAR0.840.880.810.83

时间漂移分析

HiAR 在长时间生成中展现出最低的时间漂移(Temporal Drift):

生成时长30秒60秒120秒200秒
Self-Forcing0.120.280.510.73
LoL0.080.180.320.48
HiAR0.050.090.150.22

流水线并行效率

设置推理时间加速比
串行(4步)120秒1.0x
流水线并行(4步)67秒1.8x

与相关方法对比

与 Self-Forcing 方法对比

传统 Self-Forcing 方法的问题在于:

  • 以完全清洁的上下文为条件,误差以高确定性传播
  • 长期生成时质量显著下降

HiAR 通过匹配噪声级别的条件机制缓解了这一问题。

与 LoL (Long-of-LoL) 对比

LoL 通过改进的训练策略缓解 drift,但仍然采用块优先去噪。HiAR 的范式转变从根本上了改变了误差传播模式。

与 SVI 对比

SVI(Sliding Video Inference)采用滑动窗口和错误回收机制。HiAR 与 SVI 的核心区别:

维度SVIHiAR
去噪顺序块优先 + 错误回收步骤优先
训练方式标准训练重训练匹配层级范式
并行性有限原生流水线支持
误差处理后处理纠正预防性减少

技术实现细节

代码结构

HiAR/
├── models/
   ├── diar_backbone.py      # DiT骨干网络
   ├── causal_attention.py    # 因果注意力实现
   └── hierarchical_denoiser.py  # 层级去噪器
├── scheduler/
   └── step_first.py         # 步骤优先调度器
├── training/
   ├── distill_loss.py       # 蒸馏损失
   └── fwd_kl_regularizer.py # Forward-KL正则化
├── inference/
   └── pipelined.py          # 流水线并行推理
└── configs/
    └── hiar_13b.yaml         # 模型配置

关键超参数

参数说明
块大小5秒每个AR块包含5秒视频
去噪步数4-8可配置的训练/推理步数
上下文长度块数 × 块大小取决于生成长度
Forward-KL权重0.1正则化强度

参考资源


相关主题


参考文献

Footnotes

  1. Zou, K., Zheng, D., Liu, H., Hang, T., Liu, B., & Yu, N. (2026). HiAR: Efficient Autoregressive Long Video Generation via Hierarchical Denoising. arXiv:2603.08703. https://arxiv.org/abs/2603.08703 2