深度学习概念笔记

1. 为什么需要深度学习?—— 告别“人工特征工程”

在开始学习深度学习(DL)之前,我首先要理解它解决了什么核心问题

在“经典”机器学习(如 SVM、随机森林)中,我的工作流程通常是:

  1. 获取原始数据(例如,一张图片)。
  2. 人工设计特征(例如,提取图片的边缘、纹理、颜色直方图,即 HOG、SIFT 特征)。
  3. 将这些特征喂给一个相对简单的模型(如 SVM)进行分类。

痛点: 模型的“天花板”在很大程度上取决于我设计的“特征”好不好。这个过程极其耗时、耗力,并且需要深厚的领域知识。

深度学习的革命性在于:

它将“特征提取”和“模型训练”合二为一。

我不再需要手动设计特征。深度神经网络(Deep Neural Network)会自动从原始数据中学习

  • 流程: 原始数据 深度神经网络(自动学习特征 + 分类/回归) 输出

这就是所谓的端到端学习 (End-to-End Learning)

2. “深度”的真正含义:特征的层次化

“深度”(Deep)指的不仅仅是网络层数多,它更核心的含义是特征的层次化学习(Hierarchical Feature Learning)

以图像识别(CNN)为例:

  • 浅层网络(第 1 层): 学习最基础的特征,如边缘、角点、颜色
  • 中层网络(第 N 层): 组合浅层特征,形成更复杂的纹理、形状、图案(如眼睛、鼻子、轮胎)。
  • 高层网络(最后几层): 组合中层特征,形成完整的物体或概念(如一张人脸、一辆汽车)。

深度学习的“本质”就是通过这种堆叠的结构,自动学习出一个从简单到复杂的特征表示体系。

3. 核心构建块:从神经元到网络

3.1 神经元(感知机)

一切的起点。一个最简单的神经元(或称感知机)在数学上只做两件事:

  1. 加权求和:
    • 是输入, 是权重(重要性), 是偏置(阈值)。
  2. 非线性激活:
    • 就是激活函数

3.2 激活函数 (Activation Function)

为什么必须有激活函数?

答案:引入非线性。 如果没有激活函数(或者用的是线性函数),那么无论你堆叠多少层神经网络,它本质上都只是一个复杂的“线性回归”。它无法拟合现实世界中复杂的非线性关系(比如识别猫和狗)。

常用激活函数:

  • Sigmoid: 将输出压缩到 (0, 1) 之间。早期用于分类,但现在因“梯度消失”问题(见下文)已较少在隐藏层使用。
  • ReLU (Rectified Linear Unit):
    • 现在的默认选择。 它极其简单(大于 0 则不变,小于 0 则为 0),计算速度快,并且有效缓解了梯度消失问题。

3.3 神经网络 (MLP)

当我把这些神经元一层一层地堆叠起来时,就得到了多层感知机 (Multi-Layer Perceptron, MLP),也就是最基础的深度神经网络。

  • 输入层: 接收原始数据。
  • 隐藏层: 中间所有层,负责“自动学习特征”。
  • 输出层: 给出最终结果(例如,分类的概率)。

4. 机器如何“学习”:损失、反向传播与优化

我们有了一个网络结构,但它的权重()和偏置()一开始都是随机的。如何让它学会正确的值?

4.1 第 1 步:定义“错误”—— 损失函数 (Loss Function)

我们需要一个标准来衡量模型“错得有多离谱”。

  • 用于回归(预测数值): 均方误差 (MSE) —— 预测值与真实值之差的平方。
  • 用于分类(预测类别): 交叉熵 (Cross-Entropy) —— 衡量模型预测的概率分布与真实的标签分布有多“接近”。

学习的目标: 找到一组 ,使得总损失函数最小

4.2 第 2 步:找到“背锅侠”—— 反向传播 (Backpropagation)

这是深度学习的核心算法,也是最神奇的地方。

  1. 前向传播 (Forward Pass):
    • 输入数据 ,通过网络,得到一个预测结果
  2. 计算损失 (Calculate Loss):
    • 用损失函数 比较 和真实答案 ,得到“总错误”
  3. 反向传播 (Backward Pass):
    • 核心思想: 利用微积分的链式法则,从后往前,计算每一层 对“总错误” “贡献”了多少(即计算梯度 )。
    • 类比: 就像一个大型项目中出了错,CEO(输出层)把责任分摊给高管(高层),高管再分摊给经理(中层),经理再分摊给员工(底层)。
    • “梯度” 就代表了:“如果我把这个权重 稍微调大一点,总错误 会增加还是减少?”

4.3 第 3 步:更新参数 —— 优化器 (Optimizer)

知道了每个参数“背了多少锅”(梯度)之后,我们就需要更新它们。

  • 梯度下降 (Gradient Descent, GD):
    • 最朴素的方法:
    • 学习率 (Learning Rate),它决定了我们“改正错误”的步子迈多大。
    • 梯度 指向损失增加最快的方向,所以我们 减去 梯度
  • SGD (Stochastic GD): 不用全部数据,而是每次随机抽一小批 (mini-batch) 数据来计算梯度和更新,速度快得多。
  • 现代优化器 (Adam, RMSprop): 更智能的优化器。它们会自动调整学习率 ,让学习过程更快、更稳定。Adam 是目前事实上的默认选择。

训练过程总结: (前向传播 计算损失 反向传播 优化器更新参数) 重复此过程 N 轮 (Epochs)

5. DL 专业工具箱:核心网络架构

针对不同类型的数据,我们进化出了不同的网络“专才”:

5.1 卷积神经网络 (CNN)

  • 专长: 处理网格/空间数据(如图像)。
  • 核心思想:
    • 局部感受野 (Local Receptive Fields): 不像 MLP 那样全连接,CNN 的神经元只看一小块区域(例如 3x3 的像素块)。
    • 参数共享 (Parameter Sharing): 用一个卷积核(Filter)去扫描整张图片。这个 Filter 就是一个特征检测器(例如,一个”边缘检测器”),它在图片所有位置共享同一套权重 。这极大减少了参数量
    • 池化 (Pooling): 逐步降低特征图的尺寸,提取最重要的信息(如 Max Pooling),增强模型的鲁棒性。
  • 代表模型: LeNet、AlexNet、VGG、ResNet、Inception 等。

5.2 循环神经网络 (RNN)

  • 专长: 处理序列数据(如文本、时间序列、语音)。
  • 核心思想: 网络有”记忆”。在处理序列的第 个元素时,网络不仅看当前输入 ,还会参考前一时刻的”隐藏状态” (它相当于”记忆”了之前所有信息的浓缩)。
    • 公式:
  • 问题: 传统 RNN 存在梯度消失/爆炸问题,无法学习长期依赖。
    • 解决方案:LSTM(长短期记忆网络)和 GRU(门控循环单元)。它们引入了精妙的”门控”机制(遗忘门、输入门等),让网络学会”记住什么”和”忘记什么”,从而拥有了长期记忆。

5.3 Transformer (与注意力机制)

  • 专长: 处理序列数据文本、时间序列、语音),已基本取代 RNN。
  • 核心思想: 自注意力机制 (Self-Attention)
    • 与 RNN 的区别: RNN 必须按顺序处理序列(“我” “爱” “你”)。
    • Transformer 可以并行处理所有词。它通过”自注意力”机制,直接计算序列中任意两个词之间的依赖关系
    • 例如,在处理”你”这个词时,模型可以同时”注意”到”我”和”爱”,理解完整的上下文。
  • 代表模型: BERT(双向编码器)、GPT(生成式预训练,大语言模型的基础)、T5 等。

6. DL 与学习范式的”联姻”

最后,回到我们的核心理解:DL 是一种技术,它可以应用在所有学习范式中。

  • 监督学习 + 深度学习(最常见)

    • 示例:CNN(技术)+ 大量带标签图片(范式)训练一个图像分类器
    • 示例:Transformer(技术)+ 大量中英对照文本(范式)训练机器翻译模型。
  • 无监督学习 + 深度学习

    • 自编码器 (Autoencoder)(技术)。它是一个神经网络,目标是 。网络中间有一个”瓶颈”层(Bottleneck),强迫网络学会对数据进行压缩和重建(范式)。
    • 生成对抗网络 (GAN)(技术)。用两个神经网络互相对抗(一个生成器,一个判别器)来生成新数据(范式),如生成逼真的人脸。
    • 自监督学习 (Self-Supervised Learning)(范式)。如 BERT 的”完形填空”(Masked Language Model),它自动地把一句话中的词挖掉,然后让模型去预测,以此来学习语言的深层结构。
  • 强化学习 + 深度学习(深度强化学习)

    • 示例: DQN(Deep Q-Network)。AlphaGo 的前辈,用一个 CNN(技术)去”看”雅达利游戏的屏幕(高维状态),然后输出 Q-Value(即在当前状态下,执行”上、下、左、右”哪个动作能获得的未来总奖励最大),从而实现强化学习(范式)。

总结

深度学习不是魔法,它是一个强大的函数逼近器。它的基础是梯度下降 + 反向传播,学习动力来自大量数据,并通过 CNN、RNN、Transformer 等专用架构高效处理不同类型的数据。

下一步计划:深入了解 MLOps 和工程实践(如 PyTorch/TensorFlow)。