收藏家老王想买一幅“月光下的森林”。他来到艺术家街区,发现两位风格迥异的创作者都接这种委托。一位是画家,拿着细笔,从画布左上角开始,一格一格往后填色,每画一格都要回头看看已经画完的部分,确保整幅画风格统一——这是 DALL-E 的“自回归作画”。另一位是雕塑家,不碰画布,却搬来一块灰蒙蒙的大理石毛坯,抡起刻刀一层层削去多余的石料,从模糊到清晰,直到月光与树影浮现——这是 Stable Diffusion 的“扩散去噪”。老王还发现,订单写得越清楚,两位艺术家发挥越稳定;老雕塑家会先捏个小泥稿(潜空间),再快速精修(采样加速)。本文就带你走进这两位 AI 艺术家的工作室,看懂他们各自的创作心法。

岗位关联

掌握 DALL-E 自回归与 Stable Diffusion 扩散生成两条技术路线,你就能在 AIGC 产品中完成模型选型、提示词调优与推理加速,这是当下 AI 绘画工程师的核心竞争力。

目录
  1. 可视化演示
  2. 1. 文生图概览:收藏家与两位艺术家
  3. 2. DALL-E原理:认真到偏执的格子画家
  4. 3. 扩散模型:从大理石毛坯到月光森林
  5. 4. 潜空间扩散:先捏泥稿,再放大精雕
  6. 5. 提示工程:把订单写到艺术家心坎里
  7. 6. 采样加速:老师傅的省力刀法
  8. 7. 模型对比:拍卖会上的风格较量
  9. 8. 应用场景:把工作室开进工厂
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示DALL-E与Stable Diffusion的核心原理:扩散模型前向加噪与反向去噪过程、潜空间扩散架构及交叉注意力文本引导机制。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+captions.diffusion+'

1. 文生图概览:收藏家与两位艺术家

在老王生活的街区,文生图就是“文字委托、AI 交付画作”的新生意。收藏家(用户)写下订单(提示词),工作室(模型)交付成品(图像)。整个 AIGC 浪潮,本质上就是像老王这样的“甲方”越来越多——普通人只需一句话,就能召唤出符合心意的画面。这项技术之所以被称为 AIGC(AI 生成内容)的代表,是因为它首次让“语言”直接变成“视觉”,打通了文字与图像两个世界。

从算法视角看,文生图是一个“条件生成”问题:给定文本条件 c,模型要从浩如烟海的图像分布中,找出最符合 c 的那一张。这不同于让 AI 随便画着玩,因为模型必须先“理解”文字的含义,再在视觉上“兑现”文字的描述。DALL-E 和 Stable Diffusion 虽然路线不同,但共享同一个目标——拟合这个条件分布。

现实中的模型不可能真的遍历所有 x,于是两位艺术家各显神通:画家用“逐格打分再拼图”来近似全局最优(DALL-E),雕塑家用“从毛坯反复修形”来逼近目标(Stable Diffusion)。接下来两节,我们分别走进他们的工作室。

x^=arg⁡max⁡x P(x∣c)\hat{x} = \arg\max_{x} \, \mathbb{P}(x \mid c)
意思是:在所有可能的图像 x 里,挑出在给定文本 c 时概率最高的那个输出,就像老王从艺术家递来的多张草稿里选最贴合订单的一张。
  1. 条件变量 c用户输入的提示词,相当于订单正文,约束了生成方向。
    c=提示词文本c = \text{提示词文本}
  2. 候选图像 x模型所有可能画出的画面,相当于艺术家脑海里的候选草稿。
    x∈Xx \in \mathcal{X}
  3. 条件概率 P(x|c)越符合文本的画面概率越高,这是模型对“图文匹配程度”的评分。
    P(x∣c)\mathbb{P}(x \mid c)
  4. argmax 选择找出评分最高的画面,等价于老王从多张草稿里挑出最满意的一张。
    x^=arg⁡max⁡xP(x∣c)\hat{x} = \arg\max_{x} \mathbb{P}(x \mid c)

2. DALL-E原理:认真到偏执的格子画家

画家创作时有个怪习惯:他在画布上打满细格,从左上角第一格开始,一格只填一种颜色,每画完一格都要回头“看”一眼已经完成的部分,再决定下一格的颜色。他从不跳格,也从不重画,每一格的选择都建立在已有格子的基础上——这就是“自回归”:用已经发生的事,预测下一件事。

DALL-E 把这种习惯搬进了神经网络。图像被切成一个个小方块(patch),一个 Transformer 把“已经画好的方块序列”和文本提示一起作为上下文,逐块预测下一块的视觉编码。文本先经过编码器变成条件向量,就像画家把订单内容背在心里,时刻提醒自己不要画偏。由于每个方块都依赖前面所有方块,整幅画具有很强的全局连贯性——树林、月光、雾气的位置会彼此呼应。

这样画出来的作品纹理连贯、叙事完整,但代价是逐格串行生成,速度慢、算力成本高。这解释了为什么 DALL-E 早期每张图都“慢工出细活”——认真到偏执,自然快不起来。

P(x)=∏t=1TP(xt∣x<t,c)P(x) = \prod_{t=1}^{T} P(x_t \mid x_{<t}, c)
意思是:整幅画 x 的出现概率,等于“第 1 格概率 × 第 2 格概率 × …… × 第 T 格概率”的连乘,其中每一格都参考了已画格子和文本条件。
  1. 第 t 格 x_t当前要预测的图像方块,相当于画家正要落笔的那一格。
    xtx_t
  2. 已画格子 x_<t前 t-1 个方块的集合,是预测下一格的上下文。
    x<t={x1,x2,…,xt−1}x_{<t} = \{x_1, x_2, \dots, x_{t-1}\}
  3. 文本条件 c提示词的编码结果,贯穿所有格子的“订单约束”。
    cc
  4. 连乘 Π把所有格子的条件概率相乘,就得到整幅画的总概率。
    P(x)=∏t=1TP(xt∣x<t,c)P(x) = \prod_{t=1}^{T} P(x_t \mid x_{<t}, c)

3. 扩散模型:从大理石毛坯到月光森林

雕塑家的方式完全不同。他搬来一块灰蒙蒙的毛坯——在 AI 眼里,这块毛坯就是一张纯粹的噪声图。他先把毛坯放到转台上,大刀阔斧砍出森林的轮廓,再换小刻刀修出月亮的边缘、树叶的脉络,每一遍都“减去”一点不确定性,毛坯渐渐显影成画。数学上,“从毛坯到作品”被等价地描述为“从带噪图到干净图”的逐步去噪。

扩散模型把这一过程拆成两半。前向过程:故意往原图里逐步加入高斯噪声,直到图像完全变成随机雪花,相当于把一件成品雕像砸回毛坯;反向过程:训练一个神经网络,输入当前含噪图和时间步 t,预测“这一步混入了多少噪声”,然后减去它,相当于教雕塑家判断“这一刀该削掉多少石料”。

在反向过程中,网络并不直接输出成品,而是预测当前步骤的噪声 ε,再顺着“削掉噪声”的方向走一步。这就像雕塑家不必知道石头深处藏着什么,只需判断眼前这一层该去掉多少——重复几十到上千次,月光森林便从毛坯中浮现。

xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I)x_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1 - \bar{\alpha}_t}\, \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)
意思是:第 t 步的含噪图 x_t,等于“保留一部分原图 x_0”加上“混入一部分高斯噪声 ε”,保留比例随 t 增大而递减。
  1. 干净原图 x_0作品最初始的样子,对应雕塑家脑中的最终成品。
    x0x_0
  2. 信号保留比例 ᾱ_t随时间步 t 递减的系数,t 越大原图保留得越少。
    αˉt∈(0,1]\bar{\alpha}_t \in (0, 1]
  3. 高斯噪声 ε从标准正态分布采样的随机扰动,代表毛坯里的“杂质”。
    ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I)
  4. 含噪图 x_t原图与噪声按比例混合的结果,是反向去噪的输入。
    xt=αˉt x0+1−αˉt ϵx_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1 - \bar{\alpha}_t}\, \epsilon

4. 潜空间扩散:先捏泥稿,再放大精雕

聪明的雕塑家从不在昂贵的大理石上直接乱凿。他会在桌上先捏一个拳头大的泥稿,确定人物的姿态、比例和光影关系,满意之后才拿去等比放大开凿。这个“泥稿”就是潜空间:一张 1024×1024 的像素图,被 VAE 编码器压缩成 64×64×4 的紧凑潜码,体积缩小了几百倍,却保留了最关键的结构信息。

Stable Diffusion 的杀手锏,正是把扩散过程搬到潜空间里进行。生成时,U-Net 在压缩后的潜码上反复去噪,相当于在泥稿上修改造型;改满意后,再由 VAE 解码器把潜码放大还原成高清图像。因为潜码的尺寸远小于像素图,每一步去噪的计算量都大幅下降,普通消费级显卡也能在几秒内完成生成。

“先压缩、后扩散、再解码”这条流水线,让扩散模型第一次真正走进了普通开发者的电脑。收藏家老王看到雕塑家掏出泥稿时恍然大悟:原来省力的秘诀,是先在“小样”上反复打磨,最后再放大成真。

z=E(x),x^=D(z)z = \mathcal{E}(x), \quad \hat{x} = \mathcal{D}(z)
意思是:编码器 E 把像素图 x 压缩成潜码 z,解码器 D 再把潜码 z 还原成图像 x̂。扩散去噪全程只在 z 上操作。
  1. 编码器 EVAE 的编码部分,负责“捏泥稿”,把高维像素图压成低维潜码。
    E:x↦z\mathcal{E}: x \mapsto z
  2. 潜码 z图像的压缩表示,保留结构、丢弃高频细节。
    z=E(x)z = \mathcal{E}(x)
  3. 解码器 D负责“放大精雕”,把修改好的潜码还原回像素空间。
    D:z↦x^\mathcal{D}: z \mapsto \hat{x}
  4. 重建图像 x̂解码器输出的最终图像,应与原图 x 高度相似。
    x^=D(z)\hat{x} = \mathcal{D}(z)

5. 提示工程:把订单写到艺术家心坎里

老王渐渐发现,订单的写法直接决定作品质量。“森林里亮着一轮月亮,银白色月光洒在湖面上,极简北欧风格”比“画个月亮和树”效果好得多。他开始学习写“让艺术家无法拒绝的订单”:先说清楚主角,再叠加风格、光线、镜头语言,最后还要注明“不要什么”——这就是提示工程。

提示词的结构化通常包括:主体名词 + 风格修饰词 + 光线/镜头词 + 负面提示词(如模糊、畸形、多手指)。模型侧还有一个强力旋钮叫无分类器引导(CFG):它同时做“有条件预测”(遵循文本)和“无条件预测”(忽略文本),然后放大两者的差异,让模型更坚决地听从订单。

老王总结出一条经验:订单写得好(结构化提示词),再加上适当的强调力度(CFG 权重),艺术家就能稳定发挥。提示工程因此成了 AI 绘画里性价比最高的技能——不花一分钱训练,就能让成品质量上一个台阶。

ϵ~θ(zt,t,c)=ϵθ(zt,t,∅)+w(ϵθ(zt,t,c)−ϵθ(zt,t,∅))\tilde{\epsilon}_\theta(z_t, t, c) = \epsilon_\theta(z_t, t, \varnothing) + w\big(\epsilon_\theta(z_t, t, c) - \epsilon_\theta(z_t, t, \varnothing)\big)
意思是:最终预测的噪声 = 无条件预测 + 引导权重 w ×(有条件预测 − 无条件预测)。w 越大,模型越听文本指挥,但过大容易过饱和、色彩失真。
  1. 无条件预测完全不看文本时的噪声估计,相当于艺术家凭直觉下笔。
    ϵθ(zt,t,∅)\epsilon_\theta(z_t, t, \varnothing)
  2. 有条件预测结合文本条件 c 时的噪声估计,相当于盯着订单下笔。
    ϵθ(zt,t,c)\epsilon_\theta(z_t, t, c)
  3. 差值放大两者相减得到“文本带来的影响”,再乘以权重 w 加强。
    w⋅(ϵθ(zt,t,c)−ϵθ(zt,t,∅))w \cdot \big(\epsilon_\theta(z_t, t, c) - \epsilon_\theta(z_t, t, \varnothing)\big)
  4. 引导输出把加强后的文本影响叠加回无条件预测,得到最终去噪方向。
    ϵ~θ=ϵθ(zt,t,∅)+w⋅Δϵ\tilde{\epsilon}_\theta = \epsilon_\theta(z_t, t, \varnothing) + w \cdot \Delta \epsilon

6. 采样加速:老师傅的省力刀法

新手雕塑家削一刀就要停下来端详半天,削满 1000 刀才敢交工;老师傅眯眼打量几处关键位置,20 刀就出大形,再补几刀精修细节。扩散采样也是同样的道理:标准的 DDPM 反向过程需要 1000 步逐级去噪,而 DDIM 提出用更少的步数(常见 20~50 步)近似同样的去噪轨迹。

DDIM 的核心思想,是把反向去噪重写成“解析式跳跃”:每一步先根据当前含噪图估算出“预测的干净图”,再沿着噪声方向直接跳到下一步。它甚至支持确定性去噪——同一种子、同一噪声图,多次生成结果完全一致,这在工程调试中非常有用。搭配余弦或线性噪声调度器,不同步数对应不同的噪声衰减节奏,让少步采样也保持稳定。

采样加速就是“刀法提速”:同样的雕塑,老师傅用更少的动作完成,成品还更干净。对线上服务来说,50 步压缩到 20 步,推理成本直接下降一半以上,这也是 SD 能支撑大规模 C 端产品的原因。

xt−1=αˉt−1(xt−1−αˉt ϵθαˉt)+1−αˉt−1 ϵθx_{t-1} = \sqrt{\bar{\alpha}_{t-1}}\left(\frac{x_t - \sqrt{1-\bar{\alpha}_t}\,\epsilon_\theta}{\sqrt{\bar{\alpha}_t}}\right) + \sqrt{1-\bar{\alpha}_{t-1}}\,\epsilon_\theta
意思是:DDIM 从当前含噪图 x_t 出发,先用预测噪声 ε_θ 反推出“干净的 x₀”,再按新步长重新加回噪声,从而一步跨过中间多个步骤。
  1. 预测干净图括号内的分式,用当前含噪图减去噪声,再除以信号保留比例。
    xt−1−αˉt ϵθαˉt\frac{x_t - \sqrt{1-\bar{\alpha}_t}\,\epsilon_\theta}{\sqrt{\bar{\alpha}_t}}
  2. 目标步长缩放把预测的干净图按新时间步的保留比例重新缩放。
    αˉt−1⋅x0pred\sqrt{\bar{\alpha}_{t-1}} \cdot x_0^{\text{pred}}
  3. 重新注入噪声加上新步对应的噪声成分,让 x_{t-1} 仍然是一个合理的含噪图。
    1−αˉt−1 ϵθ\sqrt{1-\bar{\alpha}_{t-1}}\,\epsilon_\theta
  4. 整体跳跃两项相加,直接从 t 跳到 t-1,绕开中间的完整轨迹。
    xt−1=αˉt−1 x0pred+1−αˉt−1 ϵθx_{t-1} = \sqrt{\bar{\alpha}_{t-1}}\, x_0^{\text{pred}} + \sqrt{1-\bar{\alpha}_{t-1}}\,\epsilon_\theta

7. 模型对比:拍卖会上的风格较量

艺术街区办了一场拍卖会,两位艺术家的作品被摆在一起。画家的画细节丰富、光影细腻、长篇场景连贯一致,但出画周期长、委托费用高昂;雕塑家的作品风格多变、交付迅速、还接受各种私人定制(LoRA 微调),但在复杂语义上偶尔“雕歪”——比如多画一根手指、写错一段文字。两位各有拥趸,收藏家们按需出价。

衡量生成质量时,业界常用 FID 指标。它抽取真实图像与生成图像的特征向量,计算两组特征分布的差异,数值越小,说明生成分布越接近真实分布。FID 可以理解为“拍卖会评委”的打分表:用统计特征而非人眼主观感觉,客观衡量两位艺术家的整体水准。

选型就像拍卖会出价:预算充足、追求极致画面感,可以走闭源 API 用前沿自回归模型;追求速度、可控性、要部署在自己服务器上,SD 家族凭借开源生态和潜空间效率成为更务实的选择。没有最好的艺术家,只有最合适的委托。

FID=∥μr−μg∥2+Tr(Σr+Σg−2(ΣrΣg)1/2)\text{FID} = \lVert \mu_r - \mu_g \rVert^2 + \mathrm{Tr}\big(\Sigma_r + \Sigma_g - 2(\Sigma_r \Sigma_g)^{1/2}\big)
意思是:FID 同时比较真实图像与生成图像的特征均值差和协方差差,两部分加起来越小,说明两组图像在统计上越难区分。
  1. 特征均值与协方差μ 是特征向量的平均值,Σ 是协方差矩阵,分别刻画“风格中心”和“风格离散度”。
    μr,Σrvsμg,Σg\mu_r, \Sigma_r \quad \text{vs} \quad \mu_g, \Sigma_g
  2. 均值距离第一项是两组均值向量差的平方范数,衡量整体风格是否偏离。
    ∥μr−μg∥2\lVert \mu_r - \mu_g \rVert^2
  3. 协方差差异第二项用迹(Tr)比较两组分布的协方差结构,衡量多样性是否接近。
    Tr(Σr+Σg−2(ΣrΣg)1/2)\mathrm{Tr}\big(\Sigma_r + \Sigma_g - 2(\Sigma_r \Sigma_g)^{1/2}\big)
  4. 总和两项加总得到 FID,值越小代表生成分布与真实分布越接近。
    FID=均值距离+协方差差异\text{FID} = \text{均值距离} + \text{协方差差异}

8. 应用场景:把工作室开进工厂

艺术家街区开起了“AI 绘画工厂”。模特写真、海报底图、广告概念图在流水线上批量产出,收藏家老王只需提交订单,几分钟后就能收到成百上千张风格统一的成品。AIGC 时代,创作从“孤品手作”变成了“规模量产”,这正是文生图落地商业的核心逻辑。

在工程落地时,开发者关注的是吞吐量——单位时间内能产出多少张图。它由三个因素共同决定:批大小 B(一次并行生成几张)、并发请求数 N(同时服务几个用户)、单张延迟 Latency(一张图端到端的耗时)。典型管线是:提示词规范化 → 潜空间 DDIM 采样 → 可选放大与修脸 → 内容审核,每个环节都有优化空间。

老王博物馆需要 1000 张展图,工厂几小时就交付完毕。文生图不再是实验室里的玩具,而是实实在在的生产力:它让设计师从“从零手绘”变成“AI 初稿 + 人工精修”,让创意团队用更低的成本试错,让每一个普通人都能拥有自己的“私人画师”。

Throughput=B×NLatency\text{Throughput} = \frac{B \times N}{\text{Latency}}
意思是:吞吐量等于批大小乘以并发数,再除以单张延迟。延迟越低、并行度越高,单位时间产出的图像就越多。
  1. 批大小 B一次推理同时生成的图像数量,充分利用 GPU 并行能力。
    BB
  2. 并发数 N系统同时处理的用户请求数,靠队列与弹性伸缩实现。
    NN
  3. 单张延迟 Latency从提示词输入到图像返回的总耗时,包含采样、解码、后处理。
    Latency\text{Latency}
  4. 吞吐量三者组合成单位时间出图数,是线上服务的核心性能指标。
    Throughput=B×NLatency\text{Throughput} = \frac{B \times N}{\text{Latency}}

AI 应用场景

场景一:AI 绘画工具研发(头像与写真生成)

阶段:模型服务与推理优化

解决的问题:传统证件照/写真拍摄需要约妆、布景、摄影,单套成本数百元且耗时一天。AI 绘画产品用“人脸 LoRA + 潜空间扩散”实现分钟级生成,用户在 Web 端上传照片、选择风格模板,后端调用 SD 管线完成训练与推理。

具体案例:某 SaaS 平台推出“职场形象照”功能:用户输入“深灰背景、商务正装、柔和顶光”等提示词,后端以 30 步 DDIM 采样生成 4 张候选图,再用 CFG 权重 7 加强风格一致性,最后经过人脸修复模型精修。传统拍摄一单的利润空间,被压缩进一次 API 调用里。

场景二:电商设计素材批量生产

阶段:提示工程与内容生成

解决的问题:电商大促时,一张商品主图需要设计师制作 2 小时,几十个 SKU 的素材需求常导致团队加班。利用文生图“批量出初稿”,设计师只需筛选与微调,效率提升 5 倍以上。

具体案例:某设计团队用 Stable Diffusion 搭建内部素材库,设计师输入“极简北欧风客厅渲染图,自然光,4K”,配合负面提示词“模糊、变形、水印”,批量生成背景素材,再合成商品图。提示词模板沉淀为团队资产,新手也能产出稳定质量的底图。

场景三:广告创意概念稿快速验证

阶段:创意发散与方案比选

解决的问题:广告公司提案前需要产出多版创意概念图,传统外包插画周期长、单价高。文生图把“概念可视化”缩短到分钟级,让甲方在提案现场即时看到方向,大幅降低沟通返工成本。

具体案例:某 4A 广告公司在比稿中使用 DALL-E 生成“未来城市中的智能汽车”系列概念图,输入不同风格词(赛博朋克/极简白/水墨风)得到 20 张候选,用于内部快速筛选和客户访谈。最终选中方向后,再交由 3D 团队精修成片。

Python 演示

python66 行
import mathimport numpy as np def make_target(size=34):    # 手工生成一张"笑脸"真值图,模拟收藏家想要的成品    img = np.zeros((size, size), dtype=np.float32)    cx = cy = size / 2.0    for y in range(size):        for x in range(size):            d = math.hypot(x - cx, y - cy)            if abs(d - size * 0.30) < 1.8:          # 圆形轮廓                img[y, x] = 1.0            if math.hypot(x - cx - size * 0.12, y - cy - size * 0.10) < 2.0:                img[y, x] = 1.0                     # 左眼            if math.hypot(x - cx + size * 0.12, y - cy - size * 0.10) < 2.0:                img[y, x] = 1.0                     # 右眼    return img def alpha_bar(t, T=1000):    # 余弦噪声调度:t 越大,保留原图的比例越小    s = 0.008    f = math.cos((t / T + s) / (1.0 + s) * math.pi / 2.0) ** 2    return float(f) def forward(x0, t, T=1000):    # 前向加噪:保留部分原图 + 混入部分噪声    ab = alpha_bar(t, T)    eps = np.random.randn(*x0.shape).astype(np.float32)    x_t = math.sqrt(ab) * x0 + math.sqrt(1.0 - ab) * eps    return x_t, eps def reverse(x_t, eps_hat, ab):    # 反向去噪:用预测出的噪声反推干净图    return (x_t - math.sqrt(1.0 - ab) * eps_hat) / math.sqrt(ab) def to_ascii(img, width=34):    # 把浮点图渲染成 ASCII 字符画,方便终端观察    chars = " .:-=+*#%@"    out = []    for y in range(0, img.shape[0], 2):        line = ""        for x in range(width):            v = int(img[y, x] * (len(chars) - 1))            line += chars[min(v, len(chars) - 1)]        out.append(line)    return "\n".join(out) def demo():    np.random.seed(42)    x0 = make_target()    T = 1000    print("目标图像(收藏家想要的成品):")    print(to_ascii(x0))    for t in [100, 300, 600, 900]:        x_t, eps = forward(x0, t, T)        ab = alpha_bar(t, T)        x0_recon = reverse(x_t, eps, ab)        err = np.abs(x0_recon - x0).mean()        print("\n=== t=%d 加噪比例=%.2f ===" % (t, 1.0 - ab))        print(to_ascii((x_t + 1.0) / 2.0))        print("已知噪声时重建误差: %.4f" % err)    print("\n结论:只要网络能准确预测噪声 eps,就能从噪声中还原原图。")    print("Stable Diffusion 只是把这里的像素图换成潜空间里的潜码。") if __name__ == "__main__":    demo()
目的:用一张 34×34 的“笑脸”真值图,完整演示扩散模型的前向加噪与反向去噪核心公式,并打印每一步的 ASCII 可视化效果。
  1. def alpha_bar(t, T=1000):余弦噪声调度函数,t 越大信号保留比例越小,对应雕塑毛坯加得越来越“花”。
  2. x_t = math.sqrt(ab) * x0 + math.sqrt(1.0 - ab) * eps前向加噪:保留部分原图 + 混入部分高斯噪声,一次调用生成一个时间步的含噪图。
  3. return (x_t - math.sqrt(1.0 - ab) * eps_hat) / math.sqrt(ab)反向去噪:用预测噪声反推干净图,是扩散模型训练的“标准答案”。
  4. for t in [100, 300, 600, 900]:遍历四个噪声强度,直观展示“噪声逐步吞没图像”的前向过程。
  5. err = np.abs(x0_recon - x0).mean()计算重建误差:当噪声被准确预测时,误差应接近 0,证明加噪过程完全可逆。

常见误区

误区我以为扩散模型是先生成一张纯噪声图,然后模型一次性把噪声去掉,直接输出成品图,就像 PS 里的“去噪滤镜”一样。

正解实际上扩散模型是一个“迭代雕刻”过程。前向加噪有上千个时间步,反向去噪也同样需要逐步执行——每一步只去掉一点点噪声。这就像雕塑家一削刀只去一层石料,而不是一锤子砸出成品。SD 之所以快,是因为用了 DDIM 等加速采样,把千步压缩到几十步,但仍然是多步迭代。

为何常见:市面上很多科普把扩散描述成“噪声→图片”的简化图,大家自然以为是一步到位,忽略了两条方向相反的长路径。

误区我写提示词时把能想到的词全堆上去:“森林、月亮、湖泊、雪山、星空、极光、城堡、飞龙……”结果生成出来的图又乱又怪,还不如只写三个关键词。

正解提示工程的本质是“结构化委托”,不是词频竞赛。正确做法是分层描述:主体(什么)+ 风格(怎么画)+ 光线镜头(怎么拍)+ 负面提示(不要什么)。冗长且互相矛盾的词会让模型在多个语义之间折中,反而稀释主体,就像订单上写了十个主角,艺术家只能每人画半张脸。

为何常见:大家误以为模型是“关键词检索库”,词越多越能命中,实际上扩散模型是“语义融合器”,互相冲突的语义会互相干扰。

误区Stable Diffusion 既然能生成 1024×1024 的高清图,那它一定是在像素上逐像素做去噪的,所以特别吃显存。

正解SD 的去噪全程发生在 VAE 压缩后的潜空间(如 64×64×4),最后才由解码器放大成高清像素图。这就像雕塑家先在小泥稿上反复修改,而不是直接在大理石上乱凿。潜空间扩散正是 SD 能跑在消费级显卡上的根本原因。

为何常见:大家看到输入输出都是图片,就默认中间过程也在图片维度上,忽略了“压缩表示”这个中间层。

误区既然扩散要 1000 步,那我设置 1500 步应该比 50 步效果好很多吧?反正步数越多越精细。

正解步数过多不仅不会变好,反而容易出现过平滑、伪影和色彩失真。DDIM 等加速方法用更少步数(20~50 步)就能达到甚至超过千步 DDPM 的效果。就像老师傅 20 刀出精品,新手削 1000 刀可能把鼻子削没了。实际工程中一般通过“步数-质量”曲线选择性价比最高的步数。

为何常见:直觉上“越多越好”确实适用于训练,但采样是另一个问题——调度器决定了每一步的信息量,步数过多时噪声重注入会积累误差。

误区都是“输入文字出图片”,DALL-E 和 Stable Diffusion 应该只是同一个模型的不同版本,选一个用就行。

正解两者技术路线截然不同:DALL-E 是自回归,把图像切成小块逐个预测,像画家逐格填色,全局连贯性强但生成慢、成本高;SD 是潜空间扩散,像雕塑家从毛坯反复去噪,速度快、可本地部署且开源生态丰富。选型要看场景:质量优先选前者,速度与可控优先选后者。

为何常见:用户看到的是同一个“文生图”入口,自然以为底层是同一种技术,只有深入模型源码才会发现两者的生成范式完全不同。

面试题

Q1. DALL-E 采用的是哪种图像生成方式?

单选题 · easy

  • A.自回归逐块生成← 正确答案
  • B.扩散去噪生成
  • C.生成对抗网络
  • D.最近邻图库检索

答案:A。DALL-E 把图像切成小方块,用 Transformer 逐个预测方块,属于自回归生成,就像画家逐格填色。扩散去噪是 Stable Diffusion 的路线,GAN 和检索库都不是 DALL-E 的做法。

Q2. 扩散模型的前向过程本质是什么?

单选题 · mid

  • A.逐步给图像加噪声← 正确答案
  • B.逐步给图像锐化
  • C.将文本编码成向量
  • D.把图像压缩成潜码

答案:A。前向过程按调度逐步混入高斯噪声,直到图像变成纯噪声,等价于把雕像砸回毛坯。锐化是反向过程的反面,文本编码是条件输入,压缩潜码是 VAE 的工作,三者都不是前向加噪。

Q3. 下列哪些属于提示工程的实用技巧?

多选题 · mid

  • A.细化主体与风格← 正确答案
  • B.使用负面提示词← 正确答案
  • C.无限堆砌关键词
  • D.借助 CFG 加强引导← 正确答案

答案:ABD。结构化描述(主体+风格)和负面提示词(排除模糊、畸形)是提示工程的核心,CFG 无分类器引导可以放大文本控制力。无限堆砌关键词会让语义互相稀释,属于典型误区。

Q4. 潜空间扩散中 VAE 编码器的主要作用是什么?

单选题 · mid

  • A.压缩图像到低维潜空间← 正确答案
  • B.把提示文本变成条件
  • C.预测图像里的噪声
  • D.将低分辨率超分放大

答案:A。VAE 编码器把像素图压缩成紧凑的潜码,扩散去噪在潜码上完成,最后解码器还原高清图。把文本变成条件的是文本编码器,预测噪声的是 U-Net,超分是另一套模型。

Q5. 扩散模型反向去噪时,网络主要学习预测什么?

单选题 · easy

  • A.原始干净图像
  • B.当前时刻的噪声← 正确答案
  • C.文本的语义向量
  • D.图像的类别标签

答案:B。网络学习预测“当前混入了多少噪声 ε”,再用公式反推干净图。这就像雕塑家判断“这一刀该削掉多少石料”,而不是直接画出成品。预测文本向量是编码器的事,类别标签是分类任务。

Q6. 关于 DDIM 采样加速,正确的说法有哪些?

多选题 · hard

  • A.可用更少步数近似反向过程← 正确答案
  • B.支持确定性去噪路径← 正确答案
  • C.完全不需要预测噪声
  • D.能明显提升推理速度← 正确答案

答案:ABD。DDIM 用解析式跳跃让 20~50 步达到近千步效果,并支持同种子同结果的确定性去噪,显著降低推理成本。它仍然依赖噪声预测网络,只是改变了采样路径,所以 C 错误。

Q7. 采样步数设置过多时,典型副作用是什么?

单选题 · mid

  • A.过平滑与伪影增多← 正确答案
  • B.输出分辨率下降
  • C.文本被完全忽略
  • D.色彩强制反转

答案:A。步数过多时噪声重注入会积累误差,导致图像过平滑、出现伪影和色彩失真。分辨率由模型结构决定,文本被忽略是条件注入问题,色彩反转不是步数导致的典型现象。

Q8. AIGC 的核心含义是什么?

单选题 · easy

  • A.用 AI 自动生成内容← 正确答案
  • B.用 AI 压缩图片
  • C.用 AI 连接网络
  • D.用 AI 识别对抗样本

答案:A。AIGC(AI Generated Content)指用 AI 自动生成文本、图像、音频等内容,文生图正是其代表应用。压缩、联网、识别对抗样本分别属于其他 AI 领域,不属于 AIGC 的定义范畴。

Q9. 与像素空间直接扩散相比,潜空间扩散的优势有哪些?

多选题 · hard

  • A.计算开销明显更小← 正确答案
  • B.可复用预训练 VAE← 正确答案
  • C.生成尺寸更加灵活← 正确答案
  • D.完全无需模型训练

答案:ABC。潜空间维度远小于像素空间,去噪计算量大幅下降,是 SD 能跑在消费显卡上的关键;预训练 VAE 可复用,解码后可灵活生成不同分辨率。但潜空间扩散仍需训练去噪网络,D 错误。

Q10. 无分类器引导(CFG)的权重参数 w 起什么作用?

单选题 · mid

  • A.调节提示词控制强度← 正确答案
  • B.改变输出图像尺寸
  • C.加速扩散采样过程
  • D.压缩潜空间的特征

答案:A。CFG 通过比较有条件与无条件预测的差异,乘上权重 w 来调节“模型多听文本”。w 越大控制越强,但过大易过饱和。图像尺寸由采样分辨率决定,加速靠 DDIM,压缩靠 VAE,都与 w 无关。