F FisherHub Docs

深度学习入门

神经元与感知机

深度学习的基础单元是人工神经元,它模拟了生物神经元的结构:接收多个输入信号,经过加权求和后再通过激活函数产生输出。

1943 年 McCulloch-Pitts 提出了最早的神经元模型,1958 年 Rosenblatt 在此基础上发明了感知机(Perceptron)。但单层感知机无法解决 XOR 等非线性问题,这个局限导致了 AI 的第一次寒冬。

多层感知机与反向传播

多层感知机(MLP)通过在输入和输出之间加入隐藏层来解决非线性问题。但如何训练多层网络曾长期困扰研究者。

1986 年,Rumelhart、Hinton 和 Williams 提出了反向传播算法(Backpropagation),这是深度学习史上最重要的突破之一。核心思路是:计算输出误差对每个权重的梯度,然后沿梯度反方向更新权重。

import torch
import torch.nn as nn

# 定义一个简单的 MLP
class SimpleMLP(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(784, 256),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(256, 64),
            nn.ReLU(),
            nn.Linear(64, 10)
        )

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

model = SimpleMLP()

卷积神经网络(CNN)

CNN 专为处理网格状数据(如图像)而设计。核心操作是卷积,用一个可学习的卷积核在输入上滑动并计算点积。

关键组件

  • 卷积层 — 提取局部特征
  • 池化层 — 降采样,保留主要特征
  • 全连接层 — 在特征提取后进行决策

经典 CNN 架构包括 LeNet(1998)、AlexNet(2012)、VGGNet(2014)、ResNet(2015)等。ResNet 提出的残差连接有效解决了深层网络的退化问题。

# 一个简单的 CNN 分类器
class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(1, 32, 3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        self.fc = nn.Linear(64 * 7 * 7, 10)

    def forward(self, x):
        x = self.conv(x)
        x = x.view(x.size(0), -1)
        return self.fc(x)

循环神经网络(RNN)

RNN 用于处理序列数据(文本、时间序列、语音)。它通过隐藏状态在不同时间步之间传递信息。

但标准 RNN 存在梯度消失和梯度爆炸的问题,难以捕捉长距离依赖关系。LSTM(1997)和 GRU(2014)通过门控机制有效缓解了这些问题。

Transformer

2017 年 Google 团队发表的《Attention Is All You Need》带来了彻底改变 NLP 领域的 Transformer 架构。

核心创新

  • 自注意力机制(Self-Attention) — 直接计算序列中任意两个位置的相关性
  • 多头注意力(Multi-Head Attention) — 从不同角度关注信息
  • 位置编码(Positional Encoding) — 为模型提供序列位置信息
# 缩放点积注意力
import torch.nn.functional as F

def scaled_dot_product_attention(Q, K, V):
    d_k = Q.size(-1)
    scores = torch.matmul(Q, K.transpose(-2, -1))
    scores = scores / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
    attention_weights = F.softmax(scores, dim=-1)
    return torch.matmul(attention_weights, V)

主流架构演进

  • BERT(2018) — 双向编码器,擅长理解任务
  • GPT 系列(2018-2023) — 自回归解码器,擅长生成任务
  • ViT(2020) — 将 Transformer 应用于视觉
  • CLIP、DALL-E — 多模态 Transformer

深度学习仍在快速演进,新的架构层出不穷,但理解这些基石会帮助你跟上这个领域的发展步伐。