神经网络架构

什么是神经网络?

神经网络(Neural Network)是一类受生物神经元启发的机器学习模型,由大量互连的计算节点(神经元)组成,通过调整节点间的权重来学习数据中的模式。自 1958 年 Rosenblatt 提出感知机以来,神经网络经历了多次浪潮:1980 年代的反向传播算法、2012 年 AlexNet 引爆深度学习革命、2017 年 Transformer 架构彻底改变 NLP,以及 2020 年代扩散模型在生成领域的突破。

不同的任务需要不同的架构:图像识别用 CNN,序列建模用 RNN/LSTM,自然语言和多模态用 Transformer,图像生成用 GAN 或扩散模型。本指南将系统讲解每种架构的原理、核心组件、代码实现和最佳适用场景。

前馈神经网络 (FNN)

前馈神经网络是最基础的神经网络架构。数据从输入层经过一个或多个隐藏层,最终到达输出层,信息单向流动,不存在循环连接。每一层的神经元与下一层全连接(Fully Connected),通过激活函数(如 ReLU、Sigmoid)引入非线性。

FNN 适用于结构化数据的简单分类和回归任务,例如表格数据预测、信用评分等。当数据具有空间结构(图像)或时间序列特性时,应选择 CNN 或 RNN。

关键流程

Input Hidden Layer(s) Activation (ReLU) Output

PyTorch

import torch
import torch.nn as nn

class FNN(nn.Module):
    def __init__(self, in_dim, hidden, out_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(in_dim, hidden),
            nn.ReLU(),
            nn.Linear(hidden, hidden),
            nn.ReLU(),
            nn.Linear(hidden, out_dim),
        )
    def forward(self, x):
        return self.net(x)

model = FNN(784, 256, 10)  # e.g. MNIST digits
表格数据分类回归预测信用评分推荐系统嵌入层

卷积神经网络 (CNN)

CNN 通过卷积核(filter)在输入数据上滑动,自动提取局部特征(边缘、纹理、形状)。卷积层使用权重共享,大幅减少参数量;池化层(Pooling)降低空间维度,增强平移不变性。多层卷积堆叠后,网络能从低级特征(边缘)逐步抽象为高级语义特征(物体部件、完整物体)。

CNN 是计算机视觉的基础架构,从图像分类、目标检测到语义分割均有广泛应用。近年来 Vision Transformer(ViT)在某些任务上超越了 CNN,但 CNN 仍以其高效性和成熟的工具链占据重要地位。

核心组件流程

Conv2d BatchNorm ReLU MaxPool Conv2d ... Flatten FC (Linear)

经典 CNN 模型

模型 年份 关键创新 层数 参数量
LeNet-51998首个实用 CNN,手写数字识别560K
AlexNet2012ReLU + Dropout + GPU 训练,引爆深度学习860M
VGG-162014统一使用 3x3 小卷积核,更深的网络16138M
ResNet-502015残差连接 (skip connection),解决梯度消失5025M
EfficientNet2019复合缩放(深度/宽度/分辨率)~825-66M

PyTorch

import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 32, 3, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(),
            nn.MaxPool2d(2),
        )
        self.classifier = nn.Sequential(
            nn.Flatten(),
            nn.Linear(64 * 8 * 8, 256),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(256, num_classes),
        )
    def forward(self, x):
        return self.classifier(self.features(x))
图像分类目标检测 (YOLO)语义分割人脸识别医学影像

RNN / LSTM / GRU

循环神经网络(RNN)专为序列数据设计。每个时间步的隐藏状态 h(t) 既依赖当前输入 x(t),也依赖上一步的隐藏状态 h(t-1),从而捕获序列中的时间依赖关系。然而,标准 RNN 在长序列上存在严重的梯度消失/爆炸问题。

LSTM(Long Short-Term Memory)通过引入"遗忘门、输入门、输出门"三个门控机制和独立的记忆单元(cell state),有效解决了长距离依赖问题。GRU(Gated Recurrent Unit)是 LSTM 的简化版本,将遗忘门和输入门合并为"更新门",参数更少且训练速度更快,在许多任务上效果相当。

RNN vs LSTM vs GRU 对比

特性 RNN LSTM GRU
门控机制 3 个门(遗忘/输入/输出) 2 个门(重置/更新)
长距离依赖 差(梯度消失) 优秀 良好
参数量 最少 最多(4x 隐藏层) 中等(3x 隐藏层)
训练速度 中等
推荐场景 短序列 长文本、语音 中等序列、资源受限

PyTorch

import torch.nn as nn

class LSTMClassifier(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden, num_classes):
        super().__init__()
        self.emb = nn.Embedding(vocab_size, embed_dim)
        self.lstm = nn.LSTM(embed_dim, hidden, num_layers=2,
                            batch_first=True, dropout=0.3)
        self.fc = nn.Linear(hidden, num_classes)

    def forward(self, x):
        x = self.emb(x)                    # (B, T, E)
        _, (h_n, _) = self.lstm(x)          # h_n: (2, B, H)
        out = self.fc(h_n[-1])              # last layer hidden
        return out
时间序列预测文本生成(Transformer 之前)语音识别机器翻译(Seq2Seq)情感分析

Transformer

Transformer 是 2017 年 Google 在论文"Attention Is All You Need"中提出的架构,它完全摒弃了循环结构,仅依靠自注意力机制(Self-Attention)来建模序列中任意位置之间的依赖关系。这使得 Transformer 可以高度并行化训练,解决了 RNN 的顺序瓶颈。

Transformer 的核心是多头注意力机制(Multi-Head Attention):将输入映射为 Query、Key、Value 三个矩阵,通过缩放点积注意力计算每个位置对其他所有位置的关注权重。位置编码(Positional Encoding)用于注入序列位置信息,因为自注意力本身不感知顺序。

核心公式

Attention(Q, K, V) = softmax(QKT / √dk) · V

架构组成

Input Embedding Positional Encoding Multi-Head Attention Add & Norm Feed-Forward Add & Norm Output

Transformer 变体

变体 结构 代表模型 核心任务 参数量
Encoder-only 仅编码器,双向注意力 BERT, RoBERTa, DeBERTa 理解任务(分类、NER、QA) 110M-340M
Decoder-only 仅解码器,因果注意力(单向) GPT-4, Claude, LLaMA, Gemini 生成任务(对话、代码、推理) 7B-1.8T
Encoder-Decoder 完整编解码器,交叉注意力 T5, BART, mBART 翻译、摘要、Seq2Seq 220M-11B
Vision Transformer 图像分块 + Transformer 编码器 ViT, DeiT, Swin Transformer 图像分类、检测 86M-632M

PyTorch — Self-Attention

import torch
import torch.nn as nn
import math

class SelfAttention(nn.Module):
    def __init__(self, d_model, n_heads):
        super().__init__()
        self.n_heads = n_heads
        self.d_k = d_model // n_heads
        self.W_q = nn.Linear(d_model, d_model)
        self.W_k = nn.Linear(d_model, d_model)
        self.W_v = nn.Linear(d_model, d_model)
        self.W_o = nn.Linear(d_model, d_model)

    def forward(self, x):
        B, T, C = x.shape
        q = self.W_q(x).view(B, T, self.n_heads, self.d_k).transpose(1,2)
        k = self.W_k(x).view(B, T, self.n_heads, self.d_k).transpose(1,2)
        v = self.W_v(x).view(B, T, self.n_heads, self.d_k).transpose(1,2)

        # Scaled dot-product attention
        attn = (q @ k.transpose(-2,-1)) / math.sqrt(self.d_k)
        attn = torch.softmax(attn, dim=-1)
        out = (attn @ v).transpose(1,2).contiguous().view(B, T, C)
        return self.W_o(out)

# Usage: attn = SelfAttention(d_model=512, n_heads=8)
大语言模型 (LLM)机器翻译文本摘要代码生成视觉识别 (ViT)多模态 AI

GAN (生成对抗网络)

GAN 由 Ian Goodfellow 于 2014 年提出,包含两个相互对抗的网络:生成器(Generator)试图从随机噪声生成逼真的数据,判别器(Discriminator)试图区分真实数据和生成数据。两者通过博弈论中的极小极大游戏进行训练,最终生成器能够产生难以分辨的高质量样本。

GAN 的训练不稳定是其主要挑战,容易出现模式崩溃(mode collapse)和训练震荡。WGAN、Spectral Normalization 等技术在一定程度上缓解了这些问题。

GAN 变体

变体 关键创新 应用
DCGAN使用卷积层替代全连接层图像生成
StyleGAN (1/2/3)风格映射网络,逐层控制生成高质量人脸生成
CycleGAN无配对图像的域转换(循环一致性损失)风格迁移、季节转换
Pix2Pix有配对图像的条件生成图像翻译(草图→照片)
WGANWasserstein 距离替代 JS 散度更稳定的训练

PyTorch — Simple GAN

import torch.nn as nn

class Generator(nn.Module):
    def __init__(self, z_dim=100, img_dim=784):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(z_dim, 256), nn.LeakyReLU(0.2),
            nn.Linear(256, 512), nn.LeakyReLU(0.2),
            nn.Linear(512, img_dim), nn.Tanh(),
        )
    def forward(self, z):
        return self.net(z)

class Discriminator(nn.Module):
    def __init__(self, img_dim=784):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(img_dim, 512), nn.LeakyReLU(0.2),
            nn.Linear(512, 256), nn.LeakyReLU(0.2),
            nn.Linear(256, 1), nn.Sigmoid(),
        )
    def forward(self, x):
        return self.net(x)
图像生成风格迁移数据增强超分辨率图像修复

扩散模型 (Diffusion Models)

扩散模型是一类基于概率的生成模型,其核心思想分两步:前向过程(forward process)逐步向数据添加高斯噪声直至变为纯噪声;反向过程(reverse process)学习从噪声中逐步去噪恢复原始数据。通过参数化一个去噪网络(通常是 U-Net 架构),模型学会在每一步预测并移除噪声。

相比 GAN,扩散模型训练更稳定、生成质量更高、多样性更好,但推理速度较慢(需要多步去噪)。DDPM、DDIM 等采样策略可以加速推理过程。

代表性模型

模型 架构 特点
Stable Diffusion潜空间扩散 (LDM) + U-Net + CLIP开源,文本到图像,可微调
DALL-E 2/3CLIP + 扩散先验 + 解码器高质量文本到图像
Midjourney自研扩散架构艺术风格突出
SoraDiffusion Transformer (DiT)文本到视频生成
文本到图像生成文本到视频生成图像编辑图像超分辨率3D 生成音频合成

架构综合对比

架构 最佳用途 关键创新 参数范围 年份
FNN 表格数据分类/回归 全连接 + 反向传播 1K - 10M 1986
CNN 图像/视觉任务 卷积核 + 权重共享 + 池化 60K - 138M 1998
RNN/LSTM 短/中等长度序列 循环连接 + 门控机制 100K - 50M 1997
Transformer NLP、多模态、长序列 自注意力 + 位置编码 110M - 1.8T 2017
GAN 图像生成/风格迁移 生成器-判别器对抗训练 1M - 200M 2014
Diffusion 高质量图像/视频生成 逐步去噪 + 概率建模 100M - 8B 2020

架构选型指南

根据任务类型选择最合适的神经网络架构:

任务 推荐架构 推荐模型
图像分类 CNN / ViT ResNet, EfficientNet, ViT, ConvNeXt
目标检测 CNN YOLOv8, Faster R-CNN, DETR
语义分割 CNN / Transformer U-Net, SegFormer, Mask2Former
文本分类 / NLU Transformer (Encoder) BERT, RoBERTa, DeBERTa
文本生成 / 对话 Transformer (Decoder) GPT-4, Claude, LLaMA 3, Gemini
机器翻译 Transformer (Enc-Dec) T5, mBART, NLLB
时间序列预测 LSTM / Transformer LSTM, Temporal Fusion Transformer, PatchTST
图像生成 Diffusion / GAN Stable Diffusion, DALL-E 3, StyleGAN
视频生成 Diffusion Transformer Sora, Runway Gen-3, Kling
多模态理解 Vision Transformer CLIP, LLaVA, GPT-4V, Gemini
语音识别 Transformer Whisper, Wav2Vec 2.0, Conformer
推荐系统 FNN / Transformer DeepFM, DLRM, SASRec

相关资源

深入了解机器学习和深度学习框架:

常见问题 (FAQ)

CNN 和 Transformer 哪个更适合图像任务?

两者各有优势。CNN 在小数据集上表现更好,因为卷积的归纳偏置(局部性、平移不变性)提供了良好的先验;训练效率更高,推理速度也更快。Vision Transformer(ViT)在大规模数据集(如 ImageNet-21K、JFT-300M)上通常优于 CNN,因为自注意力可以捕获全局依赖。实践中的趋势是混合架构(如 ConvNeXt 借鉴了 Transformer 的设计理念,但仍使用卷积操作),以及在中小规模数据上使用预训练的 ViT 进行微调。

为什么 Transformer 取代了 RNN 成为 NLP 的主流?

主要有三个原因:(1)并行化——RNN 必须按顺序处理,而 Transformer 的自注意力允许所有位置同时计算,训练速度提升数十倍;(2)长距离依赖——自注意力直接建模任意两个位置间的关系,不受序列长度影响(理论上),而 LSTM 即使有门控机制,在极长序列上仍会遗忘;(3)可扩展性——Transformer 的架构在参数量扩展到数千亿时仍能持续提升性能(scaling law),这是 RNN 无法匹敌的。

GAN 和扩散模型哪个更好?

扩散模型在生成质量和多样性上已全面超越 GAN,尤其在文本条件生成方面。但 GAN 在推理速度上仍有优势(一次前向传播 vs 扩散模型需要 20-50 步去噪)。对于实时应用或资源受限场景,GAN 可能仍是更好的选择。不过,蒸馏技术(如 Consistency Models、LCM)正在大幅缩短扩散模型的推理步数,使其越来越接近实时。在 2026 年,如果不考虑速度约束,扩散模型是图像生成的首选。

深度学习入门应该先学哪个架构?

建议按以下顺序学习:(1)先学 FNN(全连接网络),理解前向传播、反向传播、梯度下降等基础概念;(2)然后学 CNN,理解卷积、池化和特征提取,用 MNIST/CIFAR-10 实践;(3)了解 RNN/LSTM 的基本概念(即使 Transformer 已成为主流,理解循环结构有助于理解序列建模的本质);(4)最后深入 Transformer,它是当前最重要的架构。推荐用 PyTorch 作为学习框架,代码更直观、调试更方便。

如何选择预训练模型的大小(参数量)?

模型大小的选择取决于三个因素:(1)数据量——根据 Chinchilla 缩放定律,最优训练 token 数约为参数量的 20 倍,如果数据不足,大模型反而可能过拟合;(2)计算资源——7B 参数模型在推理时需要约 14GB 显存(FP16),70B 模型需要约 140GB,需要多卡并行;(3)任务复杂度——简单分类任务用 BERT-base(110M)就足够,复杂推理任务可能需要 70B+ 模型。实践建议是从小模型开始,在验证集上评估,如果性能不足再逐步扩大模型。