共计 3816 个字符,预计需要花费 10 分钟才能阅读完成。
深度学习模型架构演进
深度学习在过去十年里经历了爆炸式的发展,各种模型架构层出不穷。从最初的 CNN、RNN,到后来的 Transformer、GAN,再到最近火热的 Diffusion 模型,每一种架构都推动了人工智能在不同领域的突破。今天我们就来聊聊这五大主流架构的核心原理、适用场景以及实战中的对比。

CNN:计算机视觉的基石
卷积神经网络 (CNN) 可以说是深度学习在计算机视觉领域应用的奠基石。它的核心思想是通过局部感受野和权值共享来提取图像的空间特征。
核心原理
CNN 的核心运算可以用以下公式表示:
Y = σ(W * X + b)
其中 * 表示卷积运算,σ 是激活函数。
适用场景
- 图像分类
- 目标检测
- 语义分割
代码示例
import torch
import torch.nn as nn
# 简单 CNN 实现
class SimpleCNN(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.fc = nn.Linear(64 * 56 * 56, 10) # 假设输入是 224x224
def forward(self, x):
x = torch.relu(self.conv1(x))
x = torch.max_pool2d(x, 2)
x = torch.relu(self.conv2(x))
x = torch.max_pool2d(x, 2)
x = x.view(x.size(0), -1)
x = self.fc(x)
return x
RNN:处理序列数据的利器
循环神经网络 (RNN) 是为处理序列数据而设计的,它通过隐藏状态来记住之前的信息。
核心原理
RNN 的计算公式:
h_t = σ(W_hh h_{t-1} + W_xh x_t + b_h)
适用场景
- 自然语言处理
- 时间序列预测
- 语音识别
代码示例
class SimpleRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
out, _ = self.rnn(x) # out: batch_size, seq_len, hidden_size
out = self.fc(out[:, -1, :]) # 取最后一个时间步
return out
Transformer:注意力机制的革命
Transformer 通过自注意力机制彻底改变了序列建模的方式,成为当今 NLP 领域的主流架构。
核心原理
自注意力计算公式:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
适用场景
- 机器翻译
- 文本生成
- 预训练语言模型
代码示例
class SelfAttention(nn.Module):
def __init__(self, embed_size, heads):
super().__init__()
self.embed_size = embed_size
self.heads = heads
self.head_dim = embed_size // heads
self.values = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.fc_out = nn.Linear(heads * self.head_dim, embed_size)
def forward(self, values, keys, query, mask):
N = query.shape[0]
value_len, key_len, query_len = values.shape[1], keys.shape[1], query.shape[1]
# 拆分多头
values = values.reshape(N, value_len, self.heads, self.head_dim)
keys = keys.reshape(N, key_len, self.heads, self.head_dim)
queries = query.reshape(N, query_len, self.heads, self.head_dim)
energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])
if mask is not None:
energy = energy.masked_fill(mask == 0, float("-1e20"))
attention = torch.softmax(energy / (self.embed_size ** (1/2)), dim=3)
out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape(N, query_len, self.heads * self.head_dim)
out = self.fc_out(out)
return out
GAN:生成对抗的艺术
生成对抗网络 (GAN) 通过让生成器和判别器互相博弈,可以生成逼真的数据。
核心原理
GAN 的目标函数:
min_G max_D V(D,G) = E_{x~p_data}[logD(x)] + E_{z~p_z}[log(1-D(G(z)))]
适用场景
- 图像生成
- 数据增强
- 风格迁移
代码示例
class Generator(nn.Module):
def __init__(self, latent_dim, img_shape):
super().__init__()
self.model = nn.Sequential(nn.Linear(latent_dim, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 1024),
nn.LeakyReLU(0.2),
nn.Linear(1024, int(np.prod(img_shape))),
nn.Tanh())
self.img_shape = img_shape
def forward(self, z):
img = self.model(z)
img = img.view(img.size(0), *self.img_shape)
return img
Diffusion:逐步去噪的魔法
扩散模型通过逐步添加和去除噪声来生成高质量样本。
核心原理
前向过程:
q(x_t|x_{t-1}) = N(x_t; √(1-β_t)x_{t-1}, β_tI)
适用场景
- 高保真图像生成
- 图像修复
- 文本到图像生成
代码示例
class DiffusionModel(nn.Module):
def __init__(self, model, timesteps):
super().__init__()
self.model = model
self.timesteps = timesteps
# 定义噪声调度
self.betas = torch.linspace(0.0001, 0.02, timesteps)
self.alphas = 1. - self.betas
self.alphas_cumprod = torch.cumprod(self.alphas, dim=0)
def forward(self, x, t):
# 前向过程添加噪声
sqrt_alpha = torch.sqrt(self.alphas_cumprod[t])[:, None, None, None]
sqrt_one_minus_alpha = torch.sqrt(1. - self.alphas_cumprod[t])[:, None, None, None]
epsilon = torch.randn_like(x)
return sqrt_alpha * x + sqrt_one_minus_alpha * epsilon
实战对比与建议
性能对比
我们在 CIFAR-10 数据集上测试了这些模型:
- CNN:训练时间最短,准确率最高
- Transformer:需要更多数据但潜力大
- GAN:训练不稳定但生成质量好
- Diffusion:训练时间长但生成质量最佳
避坑指南
- RNN:注意梯度消失问题,可以使用 LSTM/GRU
- Transformer:显存占用大,需要优化注意力计算
- GAN:模式崩溃是常见问题,可以尝试 WGAN
- Diffusion:采样速度慢,可以研究改进采样方法
最新进展
扩散模型最近在以下方面有重要改进:
- 更快的采样算法
- 条件生成控制
- 与其他模型的结合
思考问题
- 在你的应用场景中,计算资源和生成质量哪个更重要?
- 如何结合不同模型的优势来解决复杂问题?
- 未来模型架构的发展方向可能是什么?
希望这篇文章能帮助你理解不同深度学习模型的特性,在实际项目中选择合适的架构。每种模型都有其独特的优势和适用场景,理解它们的核心原理能让你在技术选型时做出更明智的决策。
正文完
发表至: 未分类
近两天内
