深度学习概念笔记
1. 为什么需要深度学习?—— 告别“人工特征工程”
在开始学习深度学习(DL)之前,我首先要理解它解决了什么核心问题。
在“经典”机器学习(如 SVM、随机森林)中,我的工作流程通常是:
- 获取原始数据(例如,一张图片)。
- 人工设计特征(例如,提取图片的边缘、纹理、颜色直方图,即 HOG、SIFT 特征)。
- 将这些特征喂给一个相对简单的模型(如 SVM)进行分类。
痛点: 模型的“天花板”在很大程度上取决于我设计的“特征”好不好。这个过程极其耗时、耗力,并且需要深厚的领域知识。
深度学习的革命性在于:
它将“特征提取”和“模型训练”合二为一。
我不再需要手动设计特征。深度神经网络(Deep Neural Network)会自动从原始数据中学习。
- 流程: 原始数据 深度神经网络(自动学习特征 + 分类/回归) 输出
这就是所谓的端到端学习 (End-to-End Learning)。
2. “深度”的真正含义:特征的层次化
“深度”(Deep)指的不仅仅是网络层数多,它更核心的含义是特征的层次化学习(Hierarchical Feature Learning)。
以图像识别(CNN)为例:
- 浅层网络(第 1 层): 学习最基础的特征,如边缘、角点、颜色。
- 中层网络(第 N 层): 组合浅层特征,形成更复杂的纹理、形状、图案(如眼睛、鼻子、轮胎)。
- 高层网络(最后几层): 组合中层特征,形成完整的物体或概念(如一张人脸、一辆汽车)。
深度学习的“本质”就是通过这种堆叠的结构,自动学习出一个从简单到复杂的特征表示体系。
3. 核心构建块:从神经元到网络
3.1 神经元(感知机)
一切的起点。一个最简单的神经元(或称感知机)在数学上只做两件事:
- 加权求和:
- 是输入, 是权重(重要性), 是偏置(阈值)。
- 非线性激活:
- 就是激活函数。
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)
这是深度学习的核心算法,也是最神奇的地方。
- 前向传播 (Forward Pass):
- 输入数据 ,通过网络,得到一个预测结果 。
- 计算损失 (Calculate Loss):
- 用损失函数 比较 和真实答案 ,得到“总错误” 。
- 反向传播 (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)。