深度学习基础学习文档#

目录#

  1. 深度学习概述
  2. 表征学习
  3. 学习方法
  4. 神经网络基础
  5. 三大支柱架构
  6. 深度学习应用领域
  7. 其他领域重要常识
  8. 线性回归
  9. 损失函数
  10. 梯度下降
  11. 代码实现示例
  12. 分类问题
  13. One-Hot编码
  14. Softmax函数
  15. 交叉熵损失函数
  16. 学习建议与资源

深度学习概述#

什么是深度学习?#

深度学习(Deep Learning)是机器学习的一个子领域,它使用多层神经网络来模拟人脑的学习过程。深度学习通过构建具有多个隐藏层的神经网络,能够自动从数据中学习复杂的特征表示。

核心特点#

  • 自动特征提取:无需人工设计特征,模型自动学习
  • 端到端学习:从原始输入直接到最终输出
  • 强大的表达能力:能够学习高度复杂的非线性关系

表征学习#

概念解释#

表征学习(Representation Learning) 是深度学习的核心思想。它指的是让算法自动从数据中学习有用的特征表示,而不是依赖人工设计的特征。

传统方法 vs 表征学习#

传统方法(非表征学习)#

以猫的图片分类为例:

  • 人工特征设计

    • 边缘检测:识别猫的轮廓
    • 焦点检测:识别猫的眼睛、鼻子等关键部位
    • 颜色特征:提取猫的颜色信息
    • 形状特征:分析猫的整体形状
  • 局限性

    • 上限低:人工设计的特征难以捕捉所有重要信息
    • 易误判:特征设计不当会导致分类错误
    • 需要专业知识:需要领域专家设计特征

表征学习方法#

  • 自动特征学习

    • 将原始数据(如图片像素)直接输入神经网络
    • 网络自动学习从低级特征(边缘、纹理)到高级特征(形状、语义)的层次化表示
    • 整个过程是"黑箱",但效果通常更好
  • 优势

    • 自动发现数据中的模式
    • 能够学习复杂的非线性关系
    • 减少人工干预,提高泛化能力

示例对比#

传统方法流程:
原始图片 → [人工特征提取] → 特征向量 → 分类器 → 结果

表征学习方法流程:
原始图片 → [神经网络自动学习特征] → 特征表示 → 分类器 → 结果

学习方法#

监督学习(Supervised Learning)#

定义:通过训练集中图片对应的标签(label)来训练网络,使网络能够预测标签。

特点

  • 强烈依赖数据:需要大量标注数据
  • 无数据无法学习:没有标注数据就无法训练
  • 应用广泛:图像分类、目标检测、语音识别等

示例

  • 输入:猫的图片
  • 标签:$[1, 0, 0]$ (表示"猫"类别)
  • 目标:训练网络输出正确的类别概率

自监督学习(Self-Supervised Learning)#

定义:通过更弱的方法构造数据,不需要人工标注,从数据本身学习表示。

特点

  • 减少对标注数据的依赖
  • 是现代AI的热门方向
  • 可以处理大量无标注数据

示例

  • 预测图片的旋转角度
  • 预测视频的下一帧
  • 掩码语言模型(如BERT)

强化学习(Reinforcement Learning)#

定义:通过与环境交互,根据奖励信号学习最优策略。

特点

  • 适用于决策问题
  • 需要设计奖励函数
  • 在游戏AI、机器人控制等领域应用广泛

示例

  • 游戏AI:通过游戏得分学习策略
  • 机器人控制:通过完成任务获得奖励

三大支柱架构#

在深度学习的发展历程中,Transformer、卷积神经网络(CNN)​ 和循环神经网络(RNN)​ 并称为三大支柱架构。这三大架构分别解决了空间特征提取时序依赖建模长距离全局关联这三个核心难题,共同构成了现代人工智能的技术基石。

以下是这三大支柱的总结及其核心作用:

1. 卷积神经网络 (CNN) - 空间特征的“捕手”#

核心作用:处理具有空间结构的数据,如图像、网格数据。它通过局部连接和权值共享,高效地提取局部特征并组合成全局特征。

关键特性

  • 局部感知:每个神经元只感受图像的局部区域,模拟了生物视觉系统。

  • 参数共享:同一个卷积核在图像的不同位置滑动,大大减少了模型参数。

  • 平移不变性:无论物体在图像的哪个位置,都能被识别出来。

代表模型:LeNet、AlexNet、ResNet、VGG。

地位:计算机视觉领域的绝对霸主,开启了深度学习在图像识别、目标检测等领域的黄金时代。

2. 循环神经网络 (RNN) - 时序记忆的“管家”#

核心作用:处理序列数据,如文本、语音、时间序列。它通过循环结构(隐藏状态的传递)赋予网络“记忆”能力,能够处理前后依赖关系。

关键特性

  • 时序建模:能够记住之前的信息,并用于当前的计算。

  • 变长输入:可以处理长度不固定的序列数据。

代表变体

  • LSTM (长短期记忆网络):通过“门控机制”解决了长期依赖问题,防止梯度消失。

  • GRU (门控循环单元):LSTM的简化版,参数更少,效果相当。

地位:在Transformer出现前,是自然语言处理(NLP)和语音识别的主流架构。

3. Transformer - 全局关联的“破局者”#

核心作用:处理长序列依赖关系。它摒弃了RNN的循环结构,完全依赖自注意力机制来捕捉序列中任意两个元素之间的关系。

关键特性

  • 自注意力 (Self-Attention):计算序列中每个元素与其他所有元素的相关性权重,实现“全局视野”。

  • 并行计算:由于没有循环结构,所有计算可以并行进行,极大提升了训练速度。

  • 位置编码:通过添加位置信息来弥补其本身不具备位置感知能力的缺陷。

代表模型:BERT (编码器)、GPT系列 (解码器)、T5 (编码器-解码器)。

地位:彻底改变了NLP领域,催生了“预训练-微调”范式和大语言模型(LLM)时代,并正在向计算机视觉(ViT)和多模态领域扩展。

深度学习应用领域#

CV(计算机视觉)任务#

1. 图像分类(Image Classification)#

  • 输入:图片
  • 输出:类别(如"猫"、“狗”、“人”)
  • 示例:ImageNet分类任务

2. 目标检测(Object Detection)#

  • 输入:图片
  • 输出:包含目标框的集合
    • 每个目标框包含:
      • 左上角坐标 $(x_1, y_1)$
      • 右下角坐标 $(x_2, y_2)$
      • 类别(如"猫")
      • 置信度(如 $0.95$ )
  • 特点:稀疏预测(只预测有目标的位置)
  • 应用:自动驾驶、安防监控

3. 图像分割(Image Segmentation)#

  • 输入:图像
  • 输出:与输入分辨率相同的图像,每个像素对应一个类别
  • 特点:稠密预测(对每个像素都进行预测)
  • 应用:自动驾驶(识别道路、车辆、行人等)

4. 单目深度估计(Monocular Depth Estimation)#

  • 输入:单张图片
  • 输出:深度图(每个像素的深度值)
  • 应用:自动驾驶、AR/VR

5. 自动驾驶感知#

  • 输入:激光雷达点云图或多模态感知数据
  • 处理:网络将点云转换为物体集合
  • 输出:决策模块根据物体集合规划路线

NLP(自然语言处理)任务#

  • 机器翻译:将一种语言翻译成另一种语言
  • 语音识别:将语音转换为文本
  • 文本生成:生成自然语言文本
  • 情感分析:分析文本的情感倾向

大模型和生成式AI#

统一CV和NLP领域#

  • ChatGPT

    • 分析图片
    • 生成图片
    • 翻译
    • 对话聊天
  • Midjourney:专门做图片生成

  • Sora:视频生成

AI游戏引擎和世界模型#

  • Genie 3
    • 模拟整个世界
    • 接受自然语言输入
    • 实时操作画面

VLA(Vision Language Action Model)#

  • 用途:具身智能
  • 功能:可输出对机器人的控制信号
  • 应用:机器人操作、智能助手

重要常识#

机器学习基础#

概念含义
过拟合模型在训练集上表现好、泛化差;解决:正则化、Dropout、数据增强、早停
欠拟合模型容量不足,训练/测试均差;解决:增加模型复杂度、特征工程
偏差-方差权衡偏差高→欠拟合,方差高→过拟合;需在二者间平衡
训练/验证/测试集训练拟合参数,验证调超参,测试做最终评估;典型比例 7:2:1 或 8:1:1

模型规模与计算#

概念含义
参数量(Params)可学习权重总数,单位 M/B;与模型容量、显存占用相关
FLOPs浮点运算次数,衡量计算量;与推理速度、能耗相关
显存占用与 batch size、模型参数量、激活值相关;大模型常需梯度检查点

训练范式#

概念含义
预训练(Pretrain)在大规模无标注/弱标注数据上学习通用表示
微调(Fine-tune)在特定任务数据上对预训练模型继续训练
迁移学习将源域知识迁移到目标域;预训练+微调是典型形式
零样本/少样本无或极少目标域标注;依赖强预训练与提示设计

数据与标注#

概念含义
数据增强通过变换扩充数据(旋转、裁剪、颜色抖动等),提升泛化
标注噪声标签错误;影响监督学习,可结合噪声鲁棒损失或清洗策略
长尾分布类别不平衡;可考虑重采样、类别权重、Focal Loss 等

评估指标速查#

任务常用指标
分类准确率、精确率、召回率、F1、AUC
回归MSE、MAE、$R^2$
检测mAP、IoU
分割mIoU、Dice
生成FID、IS、CLIP Score

分类问题#

分类与回归的区别#

特性回归问题分类问题
输出连续值(实数)离散值(类别)
目标寻找目标分布的最优拟合寻找决策边界
示例房价预测、温度预测图像分类、垃圾邮件检测
损失函数均方误差(MSE)交叉熵(Cross-Entropy)

决策边界#

分类问题的目标是找到决策边界,将不同类别的数据分开。

示例

  • 二分类:一条直线或曲线将两类数据分开
  • 多分类:多条边界将多个类别分开

One-Hot编码#

为什么需要One-Hot编码?#

问题:直接用数值表示类别会引入噪声。

示例

  • 如果用 $1, 2, 3$ 表示"猫、狗、人"
  • 模型会认为 $2$ 是 $1$ 和 $3$ 的中间值
  • 但实际上类别之间没有大小关系

原理#

One-Hot编码 将类别拆解到不同维度,使类别正交、独立。

特点

  • 每个类别用一个向量表示
  • 向量中只有一个位置是1,其他都是0
  • 不同类别的向量正交(点积为0)

应用示例#

三分类问题(猫、狗、人)#

猫 → [1, 0, 0]
狗 → [0, 1, 0]
人 → [0, 0, 1]

手写数字分类(0-9)#

0 → [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1 → [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
2 → [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
...
9 → [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

代码示例#

import torch

# 类别标签
labels = [0, 1, 2]  # 猫、狗、人

# One-Hot编码
num_classes = 3
one_hot = torch.zeros(len(labels), num_classes)
one_hot[range(len(labels)), labels] = 1

print(one_hot)
# 输出:
# tensor([[1., 0., 0.],
#         [0., 1., 0.],
#         [0., 0., 1.]])

Softmax函数#

作用#

Softmax函数 将神经网络输出的实数域值转换为概率。

满足概率的两个条件

  1. 值大于0:$P_i > 0$
  2. 总和为1:$\sum_i P_i = 1$

计算方法#

对于 $n$ 个输出值 $O_1, O_2, \ldots, O_n$ :

$$ P_i = \frac{e^{O_i}}{\sum_{j=1}^{n} e^{O_j}} $$

其中:

  • $e^{O_i}$ :对每个输出值取指数
  • $\sum_{j=1}^{n} e^{O_j}$ :所有输出值的指数和
  • $P_i$ :第 $i$ 个类别的概率

特性#

  1. 单调性:输出值越大,概率越大
  2. 归一化:所有概率之和为1
  3. 可微性:便于反向传播

代码示例#

import torch
import torch.nn.functional as F

# 神经网络输出(3个类别)
logits = torch.tensor([[2.0, 1.0, 0.1]])

# Softmax
probs = F.softmax(logits, dim=1)
print(probs)
# 输出: tensor([[0.6590, 0.2424, 0.0986]])
# 三个值之和为1,且都是正数

数值稳定性#

问题:直接计算 $e^x$ 可能溢出(有限浮点数精度下)

解决方案:减去最大值

$$ P_i = \frac{e^{O_i - \max(O)}}{\sum_{j=1}^{n} e^{O_j - \max(O)}} $$

这样不会改变结果,但数值更稳定。

交叉熵损失函数#

为什么不用平方误差?#

平方误差损失函数不适合分类问题

  1. 问题:对于分类问题,我们关心的是预测概率,而不是具体的数值
  2. 示例:预测 $[0.9, 0.1]$ 和 $[0.6, 0.4]$ 对于真实标签 $[1, 0]$ 的平方误差相同,但前者更好

公式#

$$ L = -\sum_{i} y_i \cdot \log(\hat{y}_i) $$

其中:

  • $y_i$ :真实标签(One-Hot编码)
  • $\hat{y}_i$ :预测概率(Softmax输出)
  • $i$ :类别索引

特点#

  • 只关注当前样本所处类别的维度:因为One-Hot编码中只有一个是1,其他都是0
  • 使预测概率最大:损失函数最小化等价于最大化正确类别的预测概率

推导示例#

以输入维度为3的二分类问题为例:

1. 前向过程#

输入 x → 线性层 → 输出 O = [O₁, O₂]

2. 计算Softmax#

$$ P_1 = \frac{e^{O_1}}{e^{O_1} + e^{O_2}}, \quad P_2 = \frac{e^{O_2}}{e^{O_1} + e^{O_2}} $$

3. 计算损失#

假设真实标签是 $[1, 0]$ (第一类):

$$ L = -[1 \cdot \log(P_1) + 0 \cdot \log(P_2)] = -\log(P_1) $$

4. 求导#

$$ \frac{\partial L}{\partial O_1} = P_1 - 1 \quad \text{(如果真实类别是1)} $$ $$ \frac{\partial L}{\partial O_2} = P_2 \quad \text{(如果真实类别是1)} $$

5. 更新参数#

使用梯度下降更新权重和偏置。

注意#

在PyTorch中,nn.CrossEntropyLoss() 已经包含了Softmax操作,所以:

  • 输入:logits(未经过Softmax的原始输出)
  • 标签:类别索引(不是One-Hot编码)
  • 内部:自动应用Softmax,然后计算交叉熵