深度学习架构演进:从CNN、RNN到GAN的原理、优缺点与结构图解

1次阅读
没有评论

共计 2494 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

传统机器学习的局限性

在深度学习兴起之前,传统机器学习方法(如 SVM、随机森林)在处理复杂数据时面临三大挑战:

深度学习架构演进:从 CNN、RNN 到 GAN 的原理、优缺点与结构图解

  • 图像数据:手工设计特征(如 SIFT、HOG)无法捕捉像素间的空间层级关系
  • 序列数据:时间维度上的动态模式难以用固定维度的特征向量表示
  • 生成任务:缺乏从隐空间到数据空间的非线性映射能力

CNN:空间特征的王者

核心原理

卷积神经网络 (Convolutional Neural Network) 通过三个关键设计解决图像问题:

  1. 局部感受野 :卷积核(Convolution Kernel) 在输入上滑动计算局部特征
  2. 权重共享:同一卷积核在整个图像上复用,大幅减少参数量
  3. 层级抽象:通过多层卷积 - 池化交替逐步提取高阶语义特征
graph TD
    A[输入图像] --> B[Conv1+ReLU]
    B --> C[MaxPooling]
    C --> D[Conv2+ReLU]
    D --> E[MaxPooling]
    E --> F[全连接层]
    F --> G[输出分类]

优缺点对比

优点 缺点
自动提取空间特征 难以处理时序数据
参数效率高 全连接层参数量大
平移不变性 池化丢失空间信息

PyTorch 实现

import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 16, 3)  # 输入通道, 输出通道, 卷积核
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(16*13*13, 10)  # 假设输入为 32x32

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = torch.flatten(x, 1)
        x = self.fc1(x)
        return x

RNN/LSTM:时序建模的突破

核心原理

循环神经网络 (Recurrent Neural Network) 通过隐藏状态传递历史信息:

  1. 时间展开:每个时间步共享同一组参数
  2. 门控机制:LSTM 引入遗忘门 / 输入门 / 输出门控制信息流
  3. BPTT:通过时间反向传播更新参数
LSTM 单元结构:[h_t-1, x_t]
        ||
   [遗忘门] → (决定保留多少旧记忆)
        ||
   [输入门] → (决定添加多少新记忆)
        ||
   [输出门] → (决定输出多少当前状态)
        ||
      h_t

优缺点对比

优点 缺点
处理变长序列 梯度消失 / 爆炸问题
记忆历史信息 并行计算困难
时序建模能力强 长期依赖仍有限

PyTorch 实现

class SimpleLSTM(nn.Module):
    def __init__(self, input_dim, hidden_dim):
        super().__init__()
        self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, 1)

    def forward(self, x):
        # x 形状: (batch, seq_len, features)
        out, (h_n, c_n) = self.lstm(x)
        return self.fc(out[:, -1, :])  # 取最后时间步

GAN:生成对抗的艺术

核心原理

生成对抗网络 (Generative Adversarial Network) 通过双网络博弈:

  1. 生成器(Generator):将随机噪声映射到数据空间
  2. 判别器(Discriminator):区分真实数据与生成样本
  3. Minimax 博弈:目标函数 V(D,G)=E[logD(x)]+E[log(1-D(G(z)))]
graph LR
    Z[噪声向量] --> G[生成器]
    G --> X_fake[生成样本]
    X_real[真实数据] --> D[判别器]
    X_fake --> D
    D --> Loss

优缺点对比

优点 缺点
无需显式建模分布 训练不稳定
生成质量高 模式崩溃问题
隐空间插值可控 评估指标复杂

PyTorch 实现

# 生成器
class Generator(nn.Module):
    def __init__(self, z_dim, img_dim):
        super().__init__()
        self.net = nn.Sequential(nn.Linear(z_dim, 256),
            nn.LeakyReLU(0.2),
            nn.Linear(256, img_dim),
            nn.Tanh()  # 输出归一化到[-1,1]
        )

    def forward(self, z):
        return self.net(z)

# 判别器
class Discriminator(nn.Module):
    def __init__(self, img_dim):
        super().__init__()
        self.net = nn.Sequential(nn.Linear(img_dim, 128),
            nn.LeakyReLU(0.2),
            nn.Linear(128, 1),
            nn.Sigmoid())

    def forward(self, x):
        return self.net(x)

架构演进时间线

  1. 2012 年 CNN 爆发:AlexNet 在 ImageNet 夺冠,证明深度卷积网络的有效性
  2. 2014 年 RNN 改进:LSTM 解决梯度消失,在机器翻译等领域取得突破
  3. 2016 年 GAN 兴起:DCGAN 提出稳定训练准则,开启生成模型新时代

避坑指南

  • CNN 过拟合
  • 使用 Dropout 层(如nn.Dropout(0.5)
  • 添加数据增强(随机裁剪、颜色抖动)

  • RNN 梯度爆炸

  • 梯度裁剪(torch.nn.utils.clip_grad_norm_
  • 使用 Layer Normalization 代替 BatchNorm

  • GAN 模式崩溃

  • 多样化判别器输入(如添加噪声)
  • 采用 Wasserstein GAN 改进损失函数

延伸思考

Transformer 架构如何吸收三大架构的优点:

  • 从 CNN 继承 局部感知 思想(通过受限注意力窗口)
  • 从 RNN 继承 序列建模 能力(通过位置编码)
  • 从 GAN 继承 对抗训练 思路(如对抗性样本增强)

这些架构不是相互替代,而是根据任务特性组合使用,例如:
– CNN+RNN:视频理解
– GAN+Transformer:文本生成图像

建议初学者先掌握单个架构的实现,再尝试组合创新。

正文完
 0
评论(没有评论)