论文笔记DiT:Scalable Diffusion Models with Transformers(含transformer的可扩展扩散模型 )

论文笔记DiT:Scalable Diffusion Models with Transformers(含transformer的可扩展扩散模型 )

Abstract:

    论文的核心思想非常直接:用一个标准的 Transformer 架构替换掉扩散模型中常用的 U-Net 主干网络,并证明这种新架构(称为 DiT, Diffusion Transformer)具有出色的可扩展性(Scalability)。

Background & Motivation:

    在论文发表前,Transformer 已经在自然语言处理(BERT, GPT)和计算机视觉(ViT)等领域取得了巨大成功,成为了一种“统一”的架构。然而,在图像生成领域,特别是扩散模型中,大家仍然普遍使用 U-Net。U-Net 因其多尺度特征融合和卷积的局部归纳偏置而被广泛采用。

    在深度学习中,一个好的架构应该具备良好的“可扩展性”——即投入更多的计算资源(更大的模型、更多的数据),性能应该会持续稳定地提升。ViT 已经证明了 Transformer 在视觉识别任务上具有这种特性。作者们希望验证 DiT 是否也具备这种优良特性,为未来的生成模型发展指明一条清晰的路径。

    并且,作者用 Gflops 而不是 参数量 来衡量和讨论模型复杂度。因为参数量在图像任务中有严重缺陷,无法反映真实计算成本。

Diffusion Transformers

3.1. Preliminaries

    Diffusion formulation:把一张真实的、干净的图像 x0,通过 T 个步骤,逐渐地、一点一点地加入高斯噪声,直到它变成一个完全的纯噪声图像 xT。模型(在 DiT 中就是那个 Transformer)的任务是预测噪声。具体来说,给定加噪图像 xt 和时间步 t,模型需要预测出在第 t 步加入的那个噪声 εt。这个预测出的噪声被记为 εθ(xt)。之后主要用简单的 MSE 损失来训练噪声预测网络,同时用一个更完整的损失项(完整的 DKL)来训练协方差的预测。

    Classifier-free guidance:这部分介绍了一种非常重要的技术,用于在生成过程中加强条件(比如类别标签 c)对生成结果的影响,从而显著提高生成图像的质量和与条件的匹配度。

    在生成每一步时,我们不仅要预测“在有条件 c 的情况下的噪声”,还要预测“在没有任何条件(用一个特殊的空 embedding ∅ 表示)的情况下的噪声”。然后,将这两个预测结果进行线性组合。

    最终的噪声预测 ε̂θ 是通过一个公式来计算的: ε̂θ(xt, c) = εθ(xt, ∅) + s * (εθ(xt, c) - εθ(xt, ∅))

εθ(xt, ∅):无条件下的噪声预测(模型自由发挥)。

εθ(xt, c):有条件 c 下的噪声预测(模型听从指令)。

(εθ(xt, c) - εθ(xt, ∅)):这个差值可以理解为“从自由发挥到听从指令”的方向。

s:引导尺度(guidance scale),s > 1。这个参数控制了我们要在多大程度上“强调”这个方向。s 越大,生成图像与条件 c 的相关性就越强,通常视觉效果也更锐利,但可能会牺牲多样性。

CFG 被广泛证明能极大提升生成样本的质量,DiT 也不例外。

Latent Diffusion Models, LDM:DiT 论文明确指出,他们采用了LDM 框架,即在一个卷积 VAE 提供的潜在空间上,应用了他们提出的 Transformer 架构。

这三个预备知识点,层层递进地构建了 DiT 的完整工作流程:

先用LDM 框架将图像压缩到低维潜在空间,DiT(作为扩散模型的核心)在这个潜在空间中,遵循扩散模型原理,学习如何从噪声中恢复出潜在表示,最后,在生成时,使用无分类器引导(CFG)技术来提升生成质量和可控性。

3.2. Diffusion Transformer Design Space

Patchify:

  • 将 z 分割成一个个不重叠的小块(patch),每个小块的大小为 p x p。例如,如果 p=2,那么一个 32x32 的 z 就会被切分成 (32/2) * (32/2) = 16 * 16 = 256 个小块。 
  • 线性嵌入:每个小块被展平并通过一个线性层,映射成一个维度为 d 的向量,这个向量就叫做一个 token。
  • 结果:经过 "patchify" 操作,一个二维的 z 就变成了一个一维的 token 序列,序列长度为 T = (H/p) * (W/p)。
  • p 直接决定了序列的长度 T,在几乎不增加模型参数量的情况下,可以通过减小 p 来急剧增加模型的计算密度和复杂度。

核心模块:

除了噪声图像输入,扩散模型有时还会处理额外的条件信息,如噪声时间步长t、类标号c、自然语言等。我们探索了4种不同处理条件输入的变压器模块变体。该设计对标准的ViT块设计进行了微小但重要的修改。所有模块的设计如图3所示。

1.In-context Conditioning (上下文条件)

    方法:把 t 和 c 的嵌入向量当作两个额外的 token,直接拼接到图像 token 序列的前面。

    优缺点:非常简单,可以直接使用标准的 ViT 模块。但实验表明效果最差。

2. Cross-attention Block (交叉注意力模块)

    方法:在标准的自注意力模块之后,增加一个交叉注意力层。图像 token 作为 Query,t 和 c 的嵌入作为 Key 和 Value。

    优缺点:这是 LDM(Stable Diffusion v1)中使用的方法,比较强大和灵活。但它增加了最多的计算量(约 15% 的开销),且在 DiT 的实验中并非最佳选择。

3. Adaptive Layer Norm (adaLN) Block (自适应层归一化模块)

    方法:受到 GAN 和 U-Net 扩散模型的启发,作者将 Transformer 模块中的标准 LayerNorm 替换为自适应的 LayerNorm。模型的 LayerNorm 不再学习固定的缩放(γ)和偏移(β)参数,而是通过一个小型网络,根据 t 和 c 的嵌入动态地预测出 γ 和 β。

    优缺点:计算上非常高效,增加的 Gflops 几乎可以忽略不计。它将条件信息全局地作用于所有 token。

4. adaLN-Zero Block (零初始化的 adaLN)

    方法:这是对 adaLN 的一个重要改进。除了像 adaLN 一样预测 γ 和 β 之外,它还为每个残差连接(residual connection)之前添加了一个由 t 和 c 预测的缩放因子 α。

    关键的初始化:在训练开始时,这个 α 被初始化为输出零。这意味着整个 DiT  block 在初始状态下就是一个恒等函数(identity function),输入什么就输出什么。

    灵感来源:这种“零初始化残差分支”的策略在 ResNet 和 U-Net 扩散模型中都被证明有助于稳定大型模型的训练。

    最终选择:实验证明 adaLN-Zero 是效果最好且计算高效的方案。

Model Size:

为了系统地研究可扩展性,作者定义了一系列不同尺寸的模型。

他们沿用了 ViT 的标准配置,通过同时扩展模型的深度 N (层数)、宽度 d (隐藏层维度) 和注意力头的数量,创建了四种尺寸:DiT-S (Small), B (Base), L (Large), XL (XLarge)。

例如 DiT-XL/2 指的是 XL 尺寸的模型,使用 p=2 的 patch size。

Transformer Decoder:

    经过一系列 DiT block 处理后,得到一个更新后的 token 序列。现在需要将这个序列解码回一个二维的预测噪声图。

    对最终的 token 序列应用最后一次 LayerNorm。

    使用一个简单的线性层,将每个 token 解码回它对应的 p x p 大小的 patch 形状。

    将所有解码后的 patch 重新组合,恢复成与输入 z 相同尺寸的二维特征图,作为最终的噪声预测。

Read more

Docker安装OpenClaw:使用智谱AI的完整指南(国内镜像加速版)

一、项目介绍 OpenClaw是一款本地运行、可自托管的AI执行引擎,主打"从给建议到做事情"的能力跃迁——它并非被动响应的聊天机器人,而是能通过自然语言指令,自主规划并完成全流程任务的"数字员工"。与传统对话式AI工具不同,OpenClaw的核心定位是本地优先,所有用户数据默认存储于用户自有设备,彻底实现数据主权与隐私安全自主。 核心优势:跨平台支持、本地模型部署、安全隔离、场景适配、部署便捷 二、环境准备 1. 系统要求 * 操作系统:Ubuntu 20.04+/Debian 11+(推荐) * 内存:最低2GB,推荐4GB以上 * 硬盘:至少500MB可用空间 * 网络:稳定联网(用于下载依赖,调用云端AI需联网) 2. 安装Docker(国内镜像加速版) bash 1#

Python + AI Agent 智能体:从原理到实战,构建自主决策的 AI 助手

Python + AI Agent 智能体:从原理到实战,构建自主决策的 AI 助手

AI Agent(智能体)是大模型落地应用的核心范式。与传统的"一问一答"不同,Agent 能够自主规划任务、调用外部工具、管理记忆上下文、甚至与其他 Agent 协作。本文将基于 Python 生态,从原理到实战,系统讲解如何构建一个生产级 AI Agent。 * 一、AI Agent 核心架构 * 1.1 什么是 AI Agent? * 1.2 整体架构图 * 二、技术栈与生态 * 三、从零实现:最小可用 Agent * 3.1 ReAct 循环 * 3.2 手写 ReAct Agent(

手把手搭建 Python AI 开发环境:Anaconda + PyCharm + Claude Code 安装全攻略(Windows / macOS)

手把手搭建 Python AI 开发环境:Anaconda + PyCharm + Claude Code 安装全攻略(Windows / macOS)

Anaconda + PyCharm + Claude Code 完整安装教程(Windows / macOS) 本文涵盖 Anaconda、PyCharm Community Edition、Claude Code CLI 以及 PyCharm Claude Code 插件的完整安装与配置流程,同时收录注册报错、地区限制、环境变量等常见问题解决方案,适合 Windows 和 macOS 用户从零开始配置 Python 开发环境。 文章目录 * Anaconda + PyCharm + Claude Code 完整安装教程(Windows / macOS) * 一、Windows 安装 * 1. 安装 Anaconda(Windows) * 2. 安装 PyCharm Community Edition(

“神经网络的奥秘”一篇带你读懂AI学习核心

“神经网络的奥秘”一篇带你读懂AI学习核心

引言:“神经网络的奥秘”一篇带你读懂AI学习核心 想学AI却卡在神经网络?这篇带你轻松突破核心难点! 如今打开手机,AI修图、智能推荐、语音助手随时待命;刷到科技新闻,自动驾驶、AI制药、大模型对话的进展不断刷新认知。而这一切AI能力的核心,都离不开一个关键技术——神经网络。 很多人把神经网络当成“高深黑箱”,觉得必须有深厚的数学功底才能理解。但其实,神经网络的核心逻辑和人类大脑的学习方式很相似,哪怕是非科班出身,也能通过通俗的解释搞懂它的运作原理。这篇文章就从“是什么、怎么学、用在哪”三个维度,带你彻底读懂神经网络,真正入门AI学习的核心。 * 引言:“神经网络的奥秘”一篇带你读懂AI学习核心 * 一、先搞懂基础:神经网络到底是什么? * 二、核心奥秘:神经网络是如何“学习”的? * 三、必懂概念:新手入门神经网络的5个关键术语 * 四、实际应用:神经网络在我们身边的5个场景 * 五、新手学习路径:从入门到实战的3个阶段