一、开篇:创造力的算法革命

从昨天的Transformer到今天的生成模型,我们正从"理解"世界迈向"创造"世界。生成对抗网络(GAN)和扩散模型(Diffusion Model)代表了当前生成式AI的两大主流范式,它们让机器能够生成逼真的图像、音乐甚至视频。今天我们将深入这两种技术的核心原理,并亲自动手实现图像生成的神奇过程。

二、上午攻坚:GAN原理与实战

2.1 GAN核心架构解析

最小最大博弈公式:
min_G max_D V(D,G) = E_{x~p_data}[log D(x)] + E_{z~p_z}[log(1-D(G(z)))]

DCGAN关键实现:
# 生成器网络
class Generator(nn.Module):
def __init__(self, latent_dim=100):
super().__init__()
self.main = nn.Sequential(
# 输入: (latent_dim, 1, 1)
nn.ConvTranspose2d(latent_dim, 512, 4, 1, 0, bias=False),
nn.BatchNorm2d(512),
nn.ReLU(True),
# 输出: (512, 4, 4)
nn.ConvTranspose2d(512, 256, 4, 2, 1, bias=False),
nn.BatchNorm2d(256),
nn.ReLU(True),
# 输出: (256, 8, 8)
nn.ConvTranspose2d(256, 128, 4, 2, 1, bias=False),
nn.BatchNorm2d(128),
nn.ReLU(True),
# 输出: (128, 16, 16)
nn.ConvTranspose2d(128, 1, 4, 2, 1, bias=False),
nn.Tanh()  # 输出范围[-1,1]
# 最终输出: (1, 28, 28)
)

    def forward(self, input):
return self.main(input)

# 判别器网络
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.main = nn.Sequential(
# 输入: (1, 28, 28)
nn.Conv2d(1, 128, 4, 2, 1, bias=False),
nn.LeakyReLU(0.2, inplace=True),
# 输出: (128, 14, 14)
nn.Conv2d(128, 256, 4, 2, 1, bias=False),
nn.BatchNorm2d(256),
nn.LeakyReLU(0.2, inplace=True),
# 输出: (256, 7, 7)
nn.Conv2d(256, 512, 4, 2, 1, bias=False),
nn.BatchNorm2d(512),
nn.LeakyReLU(0.2, inplace=True),
# 输出: (512, 3, 3)
nn.Conv2d(512, 1, 3, 1, 0, bias=False),
nn.Sigmoid()  # 输出概率
)

    def forward(self, input):
return self.main(input).view(-1)

2.2 GAN训练技巧与可视化

训练循环关键代码:
for epoch in range(epochs):
for i, (real_imgs, _) in enumerate(dataloader):

# 训练判别器
optimizer_D.zero_grad()

# 真实图像损失
real_loss = criterion(D(real_imgs), real_labels)

# 生成假图像
z = torch.randn(batch_size, latent_dim, 1, 1)
fake_imgs = G(z)
fake_loss = criterion(D(fake_imgs.detach()), fake_labels)

d_loss = real_loss + fake_loss
d_loss.backward()
optimizer_D.step()

# 训练生成器
optimizer_G.zero_grad()
g_loss = criterion(D(fake_imgs), real_labels)  # 骗过判别器
g_loss.backward()
optimizer_G.step()

模式坍塌诊断与解决:
- 现象:生成器只产生少量模式样本
- 解决方案:
- 使用Wasserstein GAN (WGAN)
- 添加多样性惩罚项
- 尝试小批量判别(Minibatch Discrimination)

生成过程可视化:
# 固定潜在向量观察生成演变
fixed_z = torch.randn(64, latent_dim, 1, 1)
sample_imgs = G(fixed_z).detach()
grid = torchvision.utils.make_grid(sample_imgs, nrow=8)
plt.imshow(grid.permute(1, 2, 0))
plt.show()

三、下午探索:扩散模型原理与实践

3.1 扩散过程数学描述

前向扩散(加噪):
q(x_t|x_{t-1}) = N(x_t; √(1-β_t)x_{t-1}, β_tI)
其中β_t是噪声调度

反向去噪(生成):
p_θ(x_{t-1}|x_t) = N(x_{t-1}; μ_θ(x_t,t), Σ_θ(x_t,t))

DDPM简化训练目标:
def diffusion_loss(model, x0, t):
# 随机时间步
t = torch.randint(0, T, (x0.size(0),)

# 计算加噪后的样本
sqrt_alpha_bar = extract(sqrt_alpha_bar_t, t, x0.shape)
sqrt_one_minus_alpha_bar = extract(sqrt_one_minus_alpha_bar_t, t, x0.shape)
noise = torch.randn_like(x0)
xt = sqrt_alpha_bar * x0 + sqrt_one_minus_alpha_bar * noise

# 预测噪声
predicted_noise = model(xt, t)

# 计算损失
return F.mse_loss(predicted_noise, noise)

3.2 扩散模型实践

使用Diffusers库生成图像:
from diffusers import DDPMPipeline, DDPMScheduler

# 加载预训练模型
pipe = DDPMPipeline.from_pretrained("google/ddpm-cifar10-32")

# 生成图像
image = pipe().images[0]
image.save("generated_image.png")

自定义采样过程:
def sample_ddpm(model, shape, steps=50):
x = torch.randn(shape)
for t in reversed(range(steps)):
t_tensor = torch.full((shape[0],), t, dtype=torch.long)
with torch.no_grad():
pred_noise = model(x, t_tensor)

alpha_t = alpha[t]
alpha_bar_t = alpha_bar[t]
beta_t = beta[t]

if t > 0:
noise = torch.randn_like(x)
else:
noise = 0

x = (x - (1-alpha_t)/torch.sqrt(1-alpha_bar_t)*pred_noise)/torch.sqrt(alpha_t)
x += torch.sqrt(beta_t) * noise

return x

四、生成模型应用全景

4.1 图像超分辨率实现

# 使用ESRGAN (Enhanced Super-Resolution GAN)
from basicsr.archs.rrdbnet_arch import RRDBNet
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23)

4.2 艺术风格迁移

# 基于扩散模型的风格迁移
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
image = pipe("Van Gogh style landscape").images[0]

4.3 医学图像合成

# 使用条件GAN生成CT扫描图像
class MedGAN(nn.Module):
def __init__(self):
super().__init__()
self.encoder = ...  # 编码临床参数
self.generator = ...  # 生成图像
self.discriminator = ...  # 判别真实/生成

五、学习总结与明日计划

5.1 今日核心成果

✅ 实现DCGAN并生成MNIST/Fashion-MNIST图像  
✅ 理解扩散模型的前向/反向过程  
✅ 使用Diffusers库完成图像生成  
✅ 探索生成模型在超分辨率等场景的应用  

5.2 关键问题记录

❓ GAN训练不稳定的根本原因  
❓ 扩散模型采样加速方法  
❓ 生成结果的评估指标选择  

5.3 明日学习重点

- 图神经网络(GNN)基础概念
- 图卷积网络(GCN)实现
- 节点分类与图分类任务
- 图注意力网络(GAT)初探

六、资源推荐与延伸阅读

1. GAN Zoo:各类GAN变体集合  
2. Diffusion Models Beat GANs:扩散模型里程碑论文  
3. Stable Diffusion WebUI:最强开源图像生成工具  
4. 生成模型可视化:交互式理解GAN训练  

七、实践心得与伦理思考

1. 生成模型调试技巧:
- GAN:监控D_loss和G_loss的平衡
- 扩散:可视化中间去噪过程
- 通用:使用固定随机种子复现问题

2. 伦理边界警示:
# 人脸生成伦理检查
if task == "face_generation":
assert has_ethical_approval, "需要伦理审查"
add_watermark(output_image)

3. 实用代码片段:
# 潜在空间插值
z1 = torch.randn(1, latent_dim)
z2 = torch.randn(1, latent_dim)
for alpha in torch.linspace(0, 1, 10):
z = alpha*z1 + (1-alpha)*z2
generated = G(z)

下篇预告:《Day9:图神经网络入门—非欧空间的数据智慧》  
将探索社交网络、分子结构等图数据的深度学习处理方法!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918510.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918510.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918510.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于WRF-Chem的不同气溶胶的辐射效应的研究

前言目前我对于气溶胶辐射效应的理解就是设计敏感性实验,基础实验打开气溶胶参与辐射开关(aer_ra_feedback),其他的实验则关闭气溶胶参与辐射过程开关,也有去掉某些气溶胶的影响,如黑碳(BC&…

专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载

原文链接:https://tecdat.cn/?p43583 当特斯拉Optimus在工厂里精准分拣电池,当普渡机器人在酒店完成跨楼层配送,一个万亿级的智能革命正在拉开序幕。服务机器人与人形机器人不再是实验室里的概念,而是正在重塑制造业、服务业的“…

JS 模块化与打包工具

一、模块化体系:ESM vs CJS 深入1.语法与静态性(1)ESM:静态语法,可被打包器做 Tree-shakingexport function play() {}export default ...import { play } from ./mod.js(2)CJS:运行时 require() , 分析能力弱,不利于 Tree-shaking2.Node 解析…

防御保护11

带宽管理 --- 设备对自身的流量进行管理和控制,去提供带宽保证、带宽限制等等功能。 带宽限制 带宽保证 连接数限制 应用场景 实现带宽管理 带宽通道 --- 定义了被管理对象所能使用的带宽资源 整体的保证带宽和最大带宽; SW1-SW2:VLAN 201 --…

[激光原理与应用-254]:理论 - 几何光学 - 自动对焦的原理

自动对焦(Auto Focus, AF)是现代光学系统(如相机、手机摄像头、监控设备等)的核心功能之一,其原理是通过检测成像面的清晰度或测量物体距离,驱动透镜组移动至最佳对焦位置。以下是自动对焦的详细原理及技术…

【Python办公】Mermaid代码转图片工具 - Tkinter GUI版本

目录 专栏导读 项目简介 功能特性 🎨 直观的图形界面 📝 代码编辑功能 🖼️ 图片生成与预览 💾 文件操作 ⚡ 性能优化 技术架构 核心技术栈 架构设计 安装与使用 环境要求 依赖安装 运行程序 使用步骤 代码示例 基本流程图 时序图 甘特图 核心代码解析 1. 主类结构 2. …

【Activiti】要点初探

Activiti 7.0.0配置 流程配置节点流程XML流程部署部署后会操作表:(每部署一次增加一条记录) ACT_RE_DEPLOYMENT 流程定义部署表 ACT_RE_PROCDEF 流程定义表 ACT_GE_BYTEARRAY 流程启动查看任务(张三要查看准备办理任务&#xff0…

VBS 字符串处理

一. 字符串是由Unicode字符组成的一串字符。通常由数字,字母,符号组成。二. 常用函数1. 消除空格 Ltrim: 删除字符串左侧的空格。 Rtrim: 删除字符串右侧的空格。 trim: 删除字符串左侧和右侧的空格。a" hello " b"sx"msgbo…

《算法导论》第 21 章-用于不相交集合的数据结构

引言不相交集合(Disjoint Set),也称为并查集(Union-Find),是一种非常实用的数据结构,主要用于处理一些元素分组的问题。它支持高效的集合合并和元素查找操作,在很多算法中都有重要应…

基于51单片机RFID智能门禁系统红外人流量计数统计

1 系统功能介绍 本设计基于STC89C52单片机,集成RFID读卡器、红外避障传感器、继电器、LCD1602液晶显示和蜂鸣器,实现智能门禁与人流量统计功能。系统能够识别合法的RFID卡开门,并实时统计通过人数,具有安全报警和直观显示功能。具…

c#,vb.net全局多线程锁,可以在任意模块或类中使用,但尽量用多个锁提高效率

Public ReadOnly LockObj As New Object() 全局多线程锁 VB.NET模块中的LockObj 可以在任意模块或类中使用吧 在 VB.NET 中,模块(Module)中声明的 Public ReadOnly LockObj 可以被其他模块或类访问和使用,但需要注意其可见性范围…

企业安全运维服务计划书

安全运维服务计划书 一、概述 为保障企业信息系统安全、稳定、高效运行,防范各类网络安全风险,提升整体安全防护能力,特制定本安全运维服务计划书。本计划旨在通过系统化、规范化的安全运维流程,全面识别、评估、处置并持续监控企业网络环境中的安全风险,构建主动防御与…

小杰python高级(four day)——matplotlib库

1.绘制子图的方式pyplot中函数subplotFigure类中的函数add_subplotpyplot中函数subplotsfig, ax plt.subplots(nrows1, ncols1, *, sharexFalse, shareyFalse,squeezeTrue, subplot_kwNone, gridspec_kwNone, **fig_kw) 功能:绘制多个子图,可以一次生成…

C# 编程out 参数需要在函数体内部初始化,然后引用的时候无需初始化

核心规则方法内部必须初始化:在方法体中,必须在方法返回前对 out 参数显式赋值(未赋值会导致编译错误)调用时无需初始化:调用方传递 out 参数前不需要初始化变量(可直接使用未赋值的局部变量)下…

【Redis在数据治理与数据隐私保护策略中的优化】

## Redis的自动补全功能:用户体验的无缝之助Redis作为一款高效的开源缓存数据库,始终在用户体验优化方面走在前列。其自动补全功能的引入,为用户带来了全新的搜索体验。这种功能不仅提升了搜索效率,更为用户提供了更智能化的服务。…

Sklearn 机器学习 异常值检测 局部异常因子算法LOF

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Sklearn 机器学习异常值检测:局部异常因子算法(LOF) 在实际的机器学习任务中,异常…

衡量机器学习模型的指标

为了进一步了解模型的能力,我们需要某个指标来衡量,这就是性能度量的意义。有了一个指标,我们就可以对比不同的模型了,从而知道哪个模型相对好,哪个模型相对差,并通过这个指标来进一步调参以逐步优化我们的…

Day24|学习前端CSS

HTML把一大段杂乱无章的话,调整变成文章格式颜色rgba,16进制CSS选择器(从上往下,权重越低)类选择器#(为多个元素设计相同样式伪类选择器:和类选择器.元素选择器p,div,li通…

初识数据结构——优先级队列(堆!堆!堆!)

数据结构专栏 ⬅(click) 今天就让我们来聊聊这个让无数程序员又爱又恨的数据结构——堆(Heap)。 一、优先级队列 vs 普通队列 特性普通队列优先级队列出队顺序FIFO(先进先出)按优先级高低(默认小的先出)底…

嵌入式学习day25

fwrite&#xff1a;fread&#xff1a;fread/fwrite&#xff1a;拷贝图片&#xff1a;#include <stdio.h>int main(void) {FILE *fsrc NULL;FILE *fdst NULL;char tmpbuff[4096] {0};size_t nret 0;fsrc fopen("src.jpg", "r");if (NULL fsrc){…