主流深度学习模型架构概览

CNN、RNN、Transformer、MLP——各架构的适用场景与 PyTorch 代码示例。

模型架构入门

🗺️ 主流架构总览

┌────────────────────────────────────────────────────────┐
│                    模型架构                              │
├────────────┬─────────────┬──────────────┬──────────────┤
│   CNN      │    RNN      │ Transformer  │   MLP        │
│ (图像领域) │ (序列数据)  │ (NLP/多模态) │ (表格数据)   │
└────────────┴─────────────┴──────────────┴──────────────┘

1️⃣ 全连接网络 (MLP) —— 最基础的砖块

import torch.nn as nn
 
class SimpleMLP(nn.Module):
    def __init__(self, input_size=784, hidden_size=256, num_classes=10):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size, hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size, num_classes),
        )
    
    def forward(self, x):
        x = x.view(x.size(0), -1)  # 展平
        return self.net(x)

适用场景:表格数据、小型分类任务
缺点:不能很好地处理图像空间信息和序列时间信息


2️⃣ CNN (卷积神经网络) —— 图像领域的基石

核心组件

作用类比
卷积层提取局部特征用滤镜扫描图片
池化层降采样,保留主要特征缩小图片尺寸
全连接层最终分类综合判断

LeNet-5 结构示例 (经典)

输入 (32x32)
  → Conv1 (6@28x28) → ReLU → Pool (6@14x14)
  → Conv2 (16@10x10) → ReLU → Pool (16@5x5)
  → Flatten → FC(120) → FC(84) → FC(10) → Softmax
class SimpleCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.conv_layers = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(16, 32, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.AdaptiveAvgPool2d((1, 1)),
        )
        self.classifier = nn.Linear(64, num_classes)
    
    def forward(self, x):
        x = self.conv_layers(x)
        x = x.view(x.size(0), -1)
        return self.classifier(x)

现代 CNN 进化:AlexNet → VGG → ResNet → EfficientNet


3️⃣ RNN & LSTM —— 序列数据处理

遇到的问题:长期依赖

  • 普通 RNN:记不住太久以前的信息(梯度消失)
  • LSTM:通过”门控机制”解决长期记忆问题
class SimpleLSTM(nn.Module):
    def __init__(self, vocab_size=10000, embed_dim=256, 
                 hidden_size=128, num_layers=2, num_classes=2):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.lstm = nn.LSTM(
            input_size=embed_dim,
            hidden_size=hidden_size,
            num_layers=num_layers,
            batch_first=True,
            bidirectional=True,
            dropout=0.2,
        )
        self.classifier = nn.Linear(hidden_size * 2, num_classes)
    
    def forward(self, x):
        x = self.embedding(x)
        output, (h_n, c_n) = self.lstm(x)
        # 取最后一个时间步的输出
        last_hidden = output[:, -1, :]
        return self.classifier(last_hidden)

4️⃣ Transformer —— 当前最热架构

核心创新

  • 自注意力 (Self-Attention):每个词看所有词,找关联
  • 多头注意力 (Multi-Head Attention):从不同角度理解
  • 位置编码:告诉模型词的顺序
Transformer = Encoder (理解) + Decoder (生成)

     BERT = Encoder only    → 理解任务 (分类、NER)
     GPT  = Decoder only    → 生成任务 (写作、对话)
     T5   = Encoder+Decoder → 翻译、摘要
# 使用 HuggingFace 加载预训练 Transformer
from transformers import AutoModel, AutoTokenizer
 
model_name = "bert-base-chinese"  # 中文 BERT
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
 
text = "今天天气真好"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)

5️⃣ 怎么选择架构?

任务类型推荐架构说明
图像分类ResNet / EfficientNetCNN 依然能打
图像检测YOLO / DETR实时检测
文本分类BERT / RoBERTaTransformer
文本生成GPT / LLaMADecoder-only
语音识别Whisper / Wav2Vec2专用架构
推荐系统DCN / DeepFMMLP + 特征交叉
表格数据XGBoost / TabNet树模型常比 DL 好

📌 一句话总结

CNN 看局部 → RNN 看顺序 → Transformer 看全局


🔗 下一篇

训练流程全解析