news 2026/6/10 14:43:30

扩散模型(Diffusion Model)详解:从原理、U-Net结构到生成机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
扩散模型(Diffusion Model)详解:从原理、U-Net结构到生成机制


目录


关键词:扩散模型、Diffusion Model、U-Net、图像生成、Stable Diffusion、去噪网络


引言

近年来,以Stable Diffusion、DALL·E 2、MidJourney为代表的 AI 绘图工具风靡全球,其背后的核心技术正是——扩散模型(Diffusion Model)。相比 GAN 和 VAE,扩散模型凭借训练稳定、生成质量高、理论扎实等优势,迅速成为生成式 AI 的主流范式。

本文将系统性地讲解扩散模型的核心思想、数学原理、关键组件(尤其是 U-Net 结构)以及完整工作流程,从而助力理解“AI 是如何从一张噪声图一步步画出逼真图像的”。


一、一句话理解扩散模型

扩散模型是一种“先故意把图像弄脏,再一点点擦干净”的生成方法。

它的终极目标是:从纯噪声中,生成一张从未见过但高度逼真的新图像(如人脸、风景、动漫角色等)。


二、直观类比:从毛玻璃到高清照片

想象你面前有一块完全模糊的毛玻璃(全是雪花噪点),你的任务是:

在这块玻璃上“还原”出一张清晰的人脸照片。

但你不能直接画!你只能做一件事:

每一步,轻轻擦掉一点点“不该有的模糊”,让它越来越像人脸。

这个“逐步去模糊”的过程,就是扩散模型的核心!


三、技术框架:加噪 + 去噪

扩散模型的工作分为两个阶段:

阶段名称是否可学习目的
第一阶段前向过程(Forward Process)❌ 否将真实图像系统性加噪至纯噪声
第二阶段反向过程(Reverse Process)✅ 是训练神经网络从噪声中重建图像

3.1 前向过程:系统性加噪(“主动搞破坏”)

输入:一张干净图像x 0 x_0x0(如猫的照片)
操作:逐步添加高斯噪声,共T TT步(通常T = 1000 T = 1000T=1000
输出:纯噪声图像x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I)xTN(0,I)

关键设计:固定噪声调度(Noise Schedule)

每一步的加噪强度由预设参数α t ∈ ( 0 , 1 ) \alpha_t \in (0,1)αt(0,1)控制。定义累积衰减系数:
α ˉ t = ∏ s = 1 t α s \bar{\alpha}_t = \prod_{s=1}^t \alpha_sαˉt=s=1tαs

则第t tt步的带噪图像可直接从原始图一步计算
x t = α ˉ t ⋅ x 0 + 1 − α ˉ t ⋅ ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} \cdot x_0 + \sqrt{1 - \bar{\alpha}_t} \cdot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)xt=αˉtx0+1αˉtϵ,ϵN(0,I)

💡优势:无需逐帧模拟加噪,训练时可随机采样任意t tt,极大提升效率。

噪声调度示例

前向过程总结:固定算法,仅用于生成训练数据对( x t , ϵ ) (x_t, \epsilon)(xt,ϵ)


3.2 反向过程:智能去噪(“学会修复”)

目标:从纯噪声x T x_TxT出发,逐步还原出新图像x 0 x_0x0

核心思想:让神经网络预测噪声
训练目标(极其简洁!)

最小化预测噪声与真实噪声的均方误差:
L = E x 0 , ϵ , t [ ∥ ϵ − ϵ ^ θ ( x t , t ) ∥ 2 ] \mathcal{L} = \mathbb{E}_{x_0, \epsilon, t} \left[ \| \epsilon - \hat{\epsilon}_\theta(x_t, t) \|^2 \right]L=Ex0,ϵ,t[ϵϵ^θ(xt,t)2]

训练流程

  1. 随机选一张真实图x 0 x_0x0
  2. 随机选时间步t ∈ [ 1 , T ] t \in [1, T]t[1,T]
  3. 用前向公式生成x t x_txt
  4. 网络预测ϵ ^ θ ( x t , t ) \hat{\epsilon}_\theta(x_t, t)ϵ^θ(xt,t)
  5. 计算 MSE 损失并反向传播。

妙处:无需对抗训练,损失稳定,收敛快。

生成过程(推理阶段)

x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I)xTN(0,I)开始,迭代执行:
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ⋅ ϵ ^ θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \cdot \hat{\epsilon}_\theta(x_t, t) \right) + \sigma_t zxt1=αt1(xt1αˉt1αtϵ^θ(xt,t))+σtz
其中z ∼ N ( 0 , I ) z \sim \mathcal{N}(0, I)zN(0,I)(最后一步设为 0 实现确定性生成)。

⏱️缺点:需 50~1000 步迭代,速度慢(但可通过 DDIM、蒸馏等加速至 1~4 步)。


四、核心组件:为什么是 U-Net?

在扩散模型中,U-Net 是去噪网络的标准骨架。它最初为医学图像分割设计,却完美契合“去噪”任务的需求。

4.1 U-Net 的三大组成部分

(1)编码器(Encoder)— “看懂整体”
(2)瓶颈层(Bottleneck)— “浓缩精华”
(3)解码器(Decoder)— “还原细节”

4.2 跳跃连接:U-Net 的灵魂

将编码器各层的特征图,裁剪后拼接到解码器对应层。

为什么需要?
举个例子(基于 U-Net 原始论文结构):

📌裁剪原因:因卷积无 padding,编码器特征图略大于解码器,需对齐尺寸。


4.3 U-Net 在扩散模型中的改造

原始 U-Net扩散模型中的 U-Net
输入:干净图像输入:带噪图像x t x_txt
输出:分割掩码输出:噪声残差ϵ ^ \hat{\epsilon}ϵ^
无时间信息加入时间嵌入(Time Embedding)
任务:分割任务:噪声回归(MSE loss)
时间嵌入如何注入?
  1. 将时间步t tt通过 MLP 或正弦编码转为向量;
  2. 通过Adaptive GroupNormFiLM注入每个卷积块;
  3. 网络动态调整行为:
    • 早期(t 大):关注大结构(“是人脸”);
    • 晚期(t 小):关注细节(“睫毛、皱纹”)。

五、扩散模型 vs GAN vs VAE

模型核心思路优点缺点
GAN生成器 vs 判别器对抗生成速度快训练不稳定、模式崩溃
VAE编码-解码 + 隐空间约束训练稳定生成图像模糊
Diffusion逐步去噪高质量、稳定、理论强生成慢(可加速)

🌟正因如此,所有主流 AI 绘图工具(Stable Diffusion 等)均采用扩散模型!


六、总结:扩散模型的三大优势

  1. 生成质量极高:细节丰富,接近真实照片;
  2. 训练极其稳定:无需调参对抗,损失函数简单;
  3. 原理优雅统一:将生成问题转化为噪声回归,数学基础坚实。

⚠️唯一短板:推理速度慢,但已有多种加速方案(DDIM、LCM、蒸馏等)。


七、结语

扩散模型的本质,不是“凭空创造”,而是“从混乱中恢复秩序”。它给 AI 一块“噪声画布”,依靠 U-Net 这样的智能去噪器,一步步擦出我们想要的世界。

而 U-Net 的设计哲学——“先看大局,再补细节”——不仅解决了医学图像分割的难题,更成为生成式 AI 的基石。这正是深度学习的魅力:一个为特定任务设计的结构,最终照亮了整个领域。


参考文献 & 延伸阅读

U-Net: Convolutional Networks for Biomedical Image Segmentation

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 3:04:06

3分钟掌握:如何用FastExcel实现Java Excel处理10倍性能提升

3分钟掌握:如何用FastExcel实现Java Excel处理10倍性能提升 【免费下载链接】fastexcel Generate and read big Excel files quickly 项目地址: https://gitcode.com/gh_mirrors/fas/fastexcel 在Java应用开发中,Excel文件的读写操作是数据处理和…

作者头像 李华
网站建设 2026/6/10 13:37:32

vue基于Spring Boot的 水果草莓采摘园基地预约管理系统_2tb6x8l7

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/6/9 21:51:50

Linux系统如何安装哔哩哔哩客户端?完整解决方案指南

Linux系统如何安装哔哩哔哩客户端?完整解决方案指南 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 想在Linux系统上畅享哔哩哔哩的精彩内容吗?本…

作者头像 李华
网站建设 2026/6/9 16:51:52

java反序列化漏洞解析+URLDNS利用链分析

一些基本的概念为什么要序列化?1.数据持久化2.远程传输3.缓存 提高访问速度什么样的数据可以进行序列化?被序列化的类必须属于 Enum、Array 和 Serializable 类型其中的任何⼀种,否则将抛出NotSerializableException 异常序列化:把…

作者头像 李华
网站建设 2026/6/10 15:35:20

5分钟掌握跨平台硬件信息采集:hwinfo库的实用指南

5分钟掌握跨平台硬件信息采集:hwinfo库的实用指南 【免费下载链接】hwinfo cross platform C library for hardware information (CPU, RAM, GPU, ...) 项目地址: https://gitcode.com/gh_mirrors/hw/hwinfo 想要快速获取计算机的CPU、内存、显卡等硬件信息&…

作者头像 李华