🕸️ 深度学习

基于神经网络的机器学习方法

🧠
什么是深度学习?
深度学习 vs 机器学习

深度学习是机器学习的一个子领域,使用多层神经网络来学习数据的复杂模式。

对比
传统机器学习
深度学习
特征提取
人工设计
自动学习
数据需求
中小规模
大规模
计算需求
CPU即可
需要GPU
可解释性
较好
较差

🧠 神经网络基础

🔬
神经元结构
单个神经元的工作原理
┌─────────────────────────────────────────────────────────────────┐ │ │ │ 输入 x₁ ──权重 w₁──┐ │ │ │ │ │ 输入 x₂ ──权重 w₂──┼──▶ 求和 Σ(w·x + b) ──▶ 激活函数 ──▶ 输出 │ │ │ │ │ 输入 x₃ ──权重 w₃──┘ │ │ │ │ 偏置 b: 调整神经元激活的阈值 │ │ 激活函数: 引入非线性(ReLU、Sigmoid、Tanh) │ │ │ └─────────────────────────────────────────────────────────────────┘
多层神经网络
┌─────────────────────────────────────────────────────────────────┐ │ │ │ 输入层 隐藏层1 隐藏层2 输出层 │ │ │ │ ○─┐ ┌───┐ ┌───┐ ┌─┐ │ │ ○─┼──────▶│ ○ │──────────▶│ ○ │──────────▶│○│ │ │ ○─┤ └───┘ └───┘ └─┘ │ │ ○─┤ ┌───┐ ┌───┐ │ │ ○─┼──────▶│ ○ │──────────▶│ ○ │ │ │ ○─┘ └───┘ └───┘ │ │ │ │ [x₁,x₂, → 特征提取 → 特征组合 → 最终预测 │ │ x₃,x₄] │ │ │ └─────────────────────────────────────────────────────────────────┘

🖼️ CNN 卷积神经网络

🖼️
CNN - 擅长处理图像
卷积层 + 池化层 + 全连接层
CNN 处理图像流程
┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ 输入图像 卷积层 池化层 全连接层 │ │ (224×224×3) 提取特征 压缩尺寸 分类输出 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ ████ │ │ ░▓░▓░ │ │ ░▓░ │ │ │ │ │ │ ████ │ ──▶ │ ░▓░▓░ │ ──▶ │ ░▓░ │ ──▶ │ ○ │ │ │ │ ████ │ │ ░▓░▓░ │ │ │ │ ○ │ │ │ │ ████ │ │ │ │ │ │ ○ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ Softmax│ │ │ │ │ │ └─────────┘ │ │ │ │ │ │ │ │ 原始图像 边缘检测 特征压缩 [猫,狗,车...] │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
卷积操作原理
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 输入特征图 卷积核 (3×3) 输出特征图 │ │ │ │ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐ │ │ │ 1 │ 2 │ 3 │ 4 │ │ 1 │ 0 │ 1 │ ┌───┬───┬───┐ │ │ ├───┼───┼───┼───┤ ├───┼───┼───┤ │ 4 │ 6 │ 8 │ │ │ │ 5 │ 6 │ 7 │ 8 │ ✕ │ 0 │ 1 │ 0 │ = ├───┼───┼───┤ │ │ ├───┼───┼───┼───┤ ├───┼───┼───┤ │ 6 │ 8 │10 │ │ │ │ 9 │10 │11 │12 │ │ 1 │ 0 │ 1 │ └───┴───┴───┘ │ │ └───┴───┴───┴───┘ └───┴───┴───┘ │ │ │ │ 滑动窗口计算: │ │ (1×1 + 2×0 + 3×1) + (5×1 + 6×0 + 7×1) + (9×1 + 10×0 + 11×1) = 4 │ │ │ │ ✓ 权值共享:同一个卷积核共享权重 │ │ ✓ 局部连接:只关注局部区域 │ │ ✓ 平移不变:检测相同特征 │ │ │ └─────────────────────────────────────────────────────────────────────────┘
经典CNN架构演进
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ LeNet-5 AlexNet VGG-16 ResNet-50 EfficientNet │ │ (1998) (2012) (2014) (2015) (2019) │ │ │ │ 5层 8层 16层 50层 82层 │ │ │ │ 简单 深度突破 更深更宽 残差连接 效率优化 │ │ 手写数字 ImageNet冠军 统一结构 解决梯度消失 参数更少 │ │ │ │ ┌───┐ ┌───────┐ ┌───────┐ ┌────────┐ ┌─────┐ │ │ │输入│ │输入 │ │输入 │ │输入 │ │输入 │ │ │ └───┘ └───────┘ └───────┘ └────────┘ └─────┘ │ │ │ │ │ │ │ │ │ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌───┐ ┌──┴──┐ ┌───┴───┐ │ │ │Conv │ │Conv │ │Conv │ │Conv││Conv │ │Conv │ │ │ │ Pool│ │Pool │×5 │Pool │×5 │ ││Skip │ │MBConv │×20 │ │ └──┬──┘ └──┬──┘ └──┬──┘ │ │└─────┘ └───┬───┘ │ │ │ │ │ ┌┴──┴┐ │ │ │ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │Sum │ ┌─┴─┐ │ │ │FC │ │FC×3 │ │FC×3 │ └─────┘ │FC │ │ │ │Output│ │Output│ │Output│ │ │Out│ │ │ └─────┘ └──────┘ └──────┘ └────────┘ └─────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘
💡 CNN核心特点

卷积层:用小窗口提取局部特征(边缘、纹理、形状)

池化层:压缩特征图,减少计算量(最大池化、平均池化)

权值共享:同一卷积核在整个图像上共享,大幅减少参数

平移不变:物体位置变化不影响识别

📝 RNN/LSTM 循环神经网络

📝
RNN/LSTM - 擅长处理序列
有记忆的神经网络
RNN 循环结构
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 折叠形式 展开形式 │ │ │ │ ┌─────────┐ t-1 t t+1 │ │ │ │ ┌───┐ ┌───┐ ┌───┐ │ │ │ ● │◀────h───────────▶│ ● │───▶│ ● │───▶│ ● │ │ │ │ │ └───┘ └───┘ └───┘ │ │ h │ │ │ │ │ │ │ ────▶│ │──▶ y │ │ │ │ │ └─────────┘ x_t-1 │ x_t │ x_t+1│ │ │ └─────┴─────────┴─────────┘ │ │ 输入x ──▶ [处理] ──▶ 输出y 时间步按顺序处理 │ │ 状态h ──▶ [传递] ──▶ 记忆 │ │ │ │ 核心思想:每一时刻的输出取决于当前输入 + 之前的所有记忆 │ │ │ └─────────────────────────────────────────────────────────────────────────┘
RNN 计算公式
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ h_t = tanh(W_xh · x_t + W_hh · h_{t-1} + b_h) # 隐藏状态 │ │ │ │ y_t = W_hy · h_t + b_y # 输出 │ │ │ │ 其中: │ │ • x_t: t时刻的输入向量 │ │ • h_t: t时刻的隐藏状态(记忆) │ │ • h_{t-1}: t-1时刻的记忆 │ │ • W_xh: 输入到隐藏的权重 │ │ • W_hh: 隐藏到隐藏的权重(循环权重) │ │ • W_hy: 隐藏到输出的权重 │ │ • tanh: 激活函数,将值压缩到[-1,1] │ │ │ └─────────────────────────────────────────────────────────────────────────┘
LSTM 解决长依赖问题
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 标准RNN问题:长序列时梯度会逐渐消失或爆炸 │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ LSTM 核心:三个"门"控制信息流动 │ │ │ │ │ │ │ │ 细胞状态 C_t │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ │ │══════════════════════════════════════════════════════════│ │ │ │ │ └─────────────────────┬────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌─────────┴─────────┐ │ │ │ │ │ 遗忘门 │ 决定丢弃哪些信息 │ │ │ │ │ f_t = σ(W_f·[h_{t-1},x_t]) │ │ │ │ └─────────┬─────────┘ │ │ │ │ │ │ │ │ │ ┌─────────┴─────────┐ │ │ │ │ │ 输入门 │ 决定添加哪些新信息 │ │ │ │ │ i_t = σ(W_i·[h_{t-1},x_t]) │ │ │ │ │ C̃_t = tanh(W_C·[h_{t-1},x_t]) │ │ │ │ └─────────┬─────────┘ │ │ │ │ │ │ │ │ │ ┌─────────┴─────────┐ │ │ │ │ │ 输出门 │ 决定输出什么 │ │ │ │ │ o_t = σ(W_o·[h_{t-1},x_t]) │ │ │ │ └─────────┬─────────┘ │ │ │ │ │ │ │ │ │ h_t │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ │ │ ✓ 遗忘门:丢弃不需要的记忆 │ │ ✓ 输入门:添加新的重要信息 │ │ ✓ 输出门:决定当前输出什么 │ │ │ └─────────────────────────────────────────────────────────────────────────┘
RNN vs LSTM vs GRU
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 普通RNN LSTM GRU │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ h │ │ C │ │ h │ │ │ └─────┘ │ h │ └─────┘ │ │ │ └─────┘ │ │ │ │ │ │ │ │ 简单但 复杂但 简化版 │ │ 梯度消失 效果好 效果好 │ │ (3个门) (2个门) │ │ │ │ 应用场景: │ │ • 文本生成:基于上文生成下一个词 │ │ • 机器翻译:编码源语言,解码目标语言 │ │ • 语音识别:处理音频序列 │ │ • 时间预测:股票、天气等时序数据 │ │ │ └─────────────────────────────────────────────────────────────────────────┘
⚠️ RNN的局限性

梯度消失:长序列信息难以传递

无法并行:必须按顺序计算,速度慢

Transformer 解决了这些问题,已成为主流

⚡ Transformer 自注意力网络

Transformer - 当前最主流架构
GPT、BERT、Llama 的基础
Transformer 整体架构
┌─────────────────────────────────────────────────────────────────────────────┐ │ │ │ Transformer 编码器-解码器 │ │ │ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │ │ 输入嵌入 │ │ 输出嵌入 │ │ │ │ (Input Embed) │ │ (Output Embed) │ │ │ └──────────┬──────────┘ └──────────┬──────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │ │ + 位置编码 │ │ + 位置编码 │ │ │ │ (Positional Encod) │ │ (Positional Encod) │ │ │ └──────────┬──────────┘ └──────────┬──────────┘ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────────────┐ │ │ │ │ N× Encoder层 │ │ │ │ │ ┌───────────────┐ │ │ │ │ │ │ Self-Attention│ │ │ │ │ │ └───────────────┘ │ │ │ │ │ ┌───────────────┐ │ │ │ │ │ │ Feed-Forward │ │ │ │ │ │ └───────────────┘ │ │ │ │ └──────────┬──────────┘ │ │ │ │ │ │ │ │ ┌─────────────────────┤ │ │ │ │ │ │ │ ▼ │ ▼ │ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │ │ N× Decoder层 │ │ 线性层 + Softmax │ │ │ │ ┌───────────────┐ │ │ (Output Prob) │ │ │ │ │ Masked Attn │ │ └─────────────────────┘ │ │ │ └───────────────┘ │ │ │ │ ┌───────────────┐ │ │ │ │ │ Cross-Attn │ │ │ │ │ └───────────────┘ │ │ │ │ ┌───────────────┐ │ │ │ │ │ Feed-Forward │ │ │ │ │ └───────────────┘ │ │ │ └──────────┬──────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────┐ │ │ │ 输出概率分布 │ │ │ └─────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
自注意力机制 (Self-Attention) 核心原理
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 问题:如何让序列中每个位置都能"关注"到其他所有位置? │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Q (Query): 我想查询什么 │ │ │ │ K (Key): 我有什么特征 │ │ │ │ V (Value): 我的实际内容 │ │ │ │ │ │ │ │ Attention(Q, K, V) = softmax(Q·K^T/√d_k) · V │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ 通俗理解: │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ Query = 我想找"苹果" │ │ │ │ │ │ │ │ Keys | 相似度 │ │ │ │ ────────┼───────────────────────────────────────── │ │ │ │ "苹果" │ ★★★★★ (相似度=0.9) │ │ │ │ "香蕉" │ ★★☆☆☆ (相似度=0.2) │ │ │ │ "橘子" │ ★★★☆☆ (相似度=0.5) │ │ │ │ │ │ │ │ Value × 相似度权重 = 最终关注的内容 │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘
多头注意力 (Multi-Head Attention)
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 多个注意力头并行处理,捕捉不同类型的关系 │ │ │ │ 输入向量 X │ │ │ │ │ ▼ │ │ ┌────────────┼────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ Head 1 Head 2 Head 3 │ │ (位置) (语义) (语法) │ │ │ │ │ │ │ └────────────┼────────────┘ │ │ │ │ │ ▼ │ │ 拼接后线性变换 │ │ │ │ │ ▼ │ │ 输出向量 │ │ │ │ 示例:句子 "苹果很好吃,我喜欢吃" │ │ • Head 1: 关注"苹果"和"水果"的关系 │ │ • Head 2: 关注"苹果"和"好吃"的情感关系 │ │ • Head 3: 关注"苹果"和"喜欢"的语法连接 │ │ │ └─────────────────────────────────────────────────────────────────────────┘
Transformer vs RNN 对比
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ ┌────────────────────────┬──────────────────────────────────────────┐ │ │ │ RNN │ Transformer │ │ │ ├────────────────────────┼──────────────────────────────────────────┤ │ │ │ 顺序处理,依赖上一步 │ 并行处理,同时关注所有位置 │ │ │ │ O(n) 序列化 │ O(1) 并行化 │ │ │ │ 长序列梯度消失 │ 自注意力无长依赖问题 │ │ │ │ 信息只能单向传递 │ 双向/全局信息流动 │ │ │ │ 适合短序列 │ 适合各种长度序列 │ │ │ └────────────────────────┴──────────────────────────────────────────┘ │ │ │ │ 为什么Transformer成为主流? │ │ ✓ 可以并行训练,速度快 │ │ ✓ 捕捉长距离依赖 │ │ ✓ 可扩展性强(GPT可达万亿参数) │ │ ✓ 预训练效果好 │ │ │ └─────────────────────────────────────────────────────────────────────────┘
基于Transformer的著名模型
┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ BERT (2018) │ │ │ │ 双向Transformer编码器 │ │ │ │ 预训练:掩码语言建模 + 下一句预测 │ │ │ │ 用途:分类、问答、命名实体识别 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ GPT系列 (2018-2024) │ │ │ │ 单向Transformer解码器 │ │ │ │ GPT-2: 15亿参数 / GPT-3: 1750亿 / GPT-4: 万亿级 │ │ │ │ 用途:文本生成、代码编写、对话 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ LLaMA / ChatGLM / Qwen (2023-) │ │ │ │ 开源大语言模型 │ │ │ │ 7B, 13B, 70B 参数版本 │ │ │ │ 用途:本地部署、私有化部署 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘
💡 Transformer核心要点

自注意力:每个位置都能直接关注其他所有位置

多头:多个头捕捉不同类型的关系(语义、语法、位置)

位置编码:用数学方式注入位置信息(因为没有循环结构)

残差连接:帮助深层网络训练

层归一化:稳定训练过程

📊 CNN vs RNN vs Transformer 对比

特性 CNN RNN/LSTM Transformer
擅长数据 图像、空间数据 序列、时序数据 任意序列
核心机制 卷积、池化 循环、门控 自注意力
并行计算 ✓ 支持 ✗ 顺序依赖 ✓ 支持
长依赖 需要深网络 LSTM可缓解 ✓ 天然支持
参数共享 卷积核共享 循环权重共享 位置无关
典型应用 图像分类、检测 机器翻译、语音 NLP、大语言模型

📚 核心概念

概念 说明 简单理解
前向传播 数据从输入层传到输出层 做计算题
反向传播 从后往前调整参数 对答案改错
损失函数 衡量预测和真实的差距 离正确答案有多远
优化器 调整参数减少损失 找到更好的方法
学习率 每次调整的步长 改多大程度的错
Batch 每次训练的数据量 一次看多少题
Epoch 完整遍历一次数据集 完整复习一遍

⚙️ 训练技巧

⚠️ 过拟合

模型记住训练数据,不会泛化

表现:训练集准确率很高,测试集准确率很低

解决方法:

  • 增加训练数据
  • 正则化(L1/L2)
  • Dropout随机丢弃
  • 减少模型复杂度

⚠️ 欠拟合

模型太简单,学不会

表现:训练集和测试集准确率都很低

解决方法:

  • 增加模型复杂度
  • 增加训练时间
  • 减少正则化

🛠️ 主流深度学习框架

框架 特点 适用场景
PyTorch Python风格,动态图,研究首选 学术研究、快速原型
TensorFlow 工业成熟,部署方便 生产部署、大规模训练
Keras 简单易用,上手快 入门学习、快速实验