MINIBLOG

Blog Note Tags Links About
Home Search
Apr 1, 2026
miniyuan

深度学习 1


Classical CV Pipeline

Pipeline

  1. Keypoint detector

    关键点检测器,找到图像中有意义的点(角点、斑点等)。 例如 Harris corner detector。

  2. Keypoint descriptor

    关键点描述子,在兴趣点周围提取局部特征向量。 例如 SIFT。

  3. Image representation

    图像表示,把多局部特征聚合成固定长度向量(如直方图),便于分类器处理。 例如 Bag-of-Visual-Words。

  4. Classifier

    分类器,在聚合表示上训练浅模型完成最终分类任务。 例如 SVM, logistic regression

Keypoint detector

Where to look。传统算法多基于梯度、Hessian、角点响应等设计启发式准则。常见的方法有 Harris,DoG 等。

Descriptor

What is around that point。常见的方法有 SIFT(Scale-Invariant Feature Transform),配合 DoG 使用可以做到尺度等变性。

SIFT 的步骤:

本质上是把每个关键点映射成一个定长的特征向量,且这种映射具有鲁棒性。

  1. 检测出关键点。
  2. 为每个关键点确定主方向(orientation),通常使用圆形邻域进行 vote(注意需要按距离加权)。并做方向归一化,也即进行旋转使主方向朝向 0°0 \degree0°。
  3. 旋转后,在关键点周围选取一个 16×1616 \times 1616×16 的 patch,注意坐标不一定整数,需用双线性插值。
  4. 将该 patch 划分为 4×44 \times 44×4 个子区域,每子区域 4×44 \times 44×4 像素。 把 360°360 \degree360° 分成 888 个 bins,每个子区域像素以梯度大小为权加入 bins,最后每个子区域得到一个 888 维向量。
  5. 合起来得到 128128128 维描述子,最后进行归一化、阈值截断、再归一化。其中归一化是避免整体亮度变化影响,阈值截断是避免局部阴影的影响。

Aggregation

How the whole image is。常见的方法有 Bag-of-Visual-Words。

BoVW 的步骤:

本质上是把不确定数量的局部描述子映射成固定长度的全局表示。

  1. 收集描述子。
  2. 使用聚类算法(如 k-means)把描述子聚成 KKK 个簇中心,称为 visual words。
  3. 对一张图中每个描述子找最近的 visual word,可以是硬分配(单独分配)或软分配(分配权重)。
  4. 统计每个词的出现次数,得到长度为 KKK 的全局表示向量。

注:BoVW 统计词频,不记录词出现的相对位置,故会丢失空间信息。比如鼻子长在眼睛上,BoVW 并不能发现差异。

Classifier

Decision for the task。常用浅学习模型,如 logistic regression(二分类)、SVM、小型神经网络等。 本质上是把聚合好的向量映射到类别概率或类别标签。

注:这些分类器只看聚合后的全局表示,不直接访问原像素。

Problems

  • 依赖人工设计的特征和启发式规则。
  • 流水线会产生错误累积。
  • 难以理解高层语义,比如部分(part)、种类(category)、语境(context)等。
  • 难以利用海量数据进行优化
  • 对某一事物的识别不易泛化到另外事物。

Learning-based CV

Advantages

传统 CV 是设计特征,学习型 CV 是从数据中学习特征。

好处:

  • 端到端(end-to-end),能直接针对最终任务优化所有参数,避免手工设计中各阶段不一致的目标。
  • 自动学习高层语义,从边缘到部分再到对象/场景。
  • 能够随数据规模增长而提高性能。

注:学习型方法虽然在很多视觉任务中表现更好,但在数据稀缺或实时/嵌入式场景中经典方法仍有价值。

Why It Took Off

  • 算法(Algorithm):深度学习架构(多层神经网络、反向传播、优化方法)与研究突破(如 ReLU、BatchNorm、ResNet 等)。
  • 数据(Data):ImageNet 等大规模标注数据集让复杂模型能被充分训练。
  • 计算资源(Compute):GPU、TPU 等硬件加速以及高效并行使大模型训练成为可能。当然电能也非常重要。

Machine Learning

Set Up the Task

假设我们想要实现 MNIST 二分类,也即给定一张手写数字图像,判断它是否为数字 5。

输入:x∈R784x \in \mathbb{R}^{784}x∈R784,表示 28×2828 \times 2828×28 灰度图像展平的 784784784 维向量。

标签:y∈{ 0,1 }y \in \set{0,1}y∈{0,1},是否为数字 5 的标签。

输出:

  • 软分类:p(y=1∣x)∈[0,1]p(y = 1 | x) \in [0, 1]p(y=1∣x)∈[0,1]
  • 硬分类:p(y=1∣x)≥τp(y=1|x) \ge \taup(y=1∣x)≥τ,则预测为 1,否则为 0。

模型:h(x;θ)h(x; \theta)h(x;θ),其中 θ\thetaθ 为待优化参数。

Prepare the Data

使用 MNIST 数据集。

预处理:

  1. 标准化:
    • 将像素值除 255255255 从 [0,255][0,255][0,255] 缩放到 [0,1][0,1][0,1]。
    • 或做零均值单位方差标准化 x′=x−μσx' = \frac{x-\mu}{\sigma}x′=σx−μ​。
  2. 数据增强:随机平移、旋转少量角度、缩放、弹性变形等。
  3. 转换为模型需要的数据结构:
    • 对于线性模型/MLP:展平为 (784,) 向量。
    • 对于 CNN:保留形状 (1, 28, 28) 。
  4. 划分数据集:
    • 划分为训练集和测试集。
    • 按照训练方法进一步划分,比如划分出 mini-batch。

Build a Model

模型负责利用给定的输入产生输出,也即给出一个函数 h(x;θ)∈[0,1]h(x; \theta) \in [0, 1]h(x;θ)∈[0,1],其中 θ\thetaθ 为待优化参数。

Logistic Regression

逻辑回归,线性模型。

令 z=θ⊤x+bz = \theta^\top x + bz=θ⊤x+b 为输入的线性打分。则模型为:

h(x;θ,b)=σ(z)=11+e−zh(x; \theta, b) = \sigma(z) = \frac{1}{1+e^{-z}}h(x;θ,b)=σ(z)=1+e−z1​

其中参数 θ∈R784\theta \in \mathbb{R}^{784}θ∈R784,b∈Rb\in\mathbb{R}b∈R。

MLP Neural Network

多层感知器(MLP),非线性模型,可以处理非线性可分问题。

若干线性层(矩阵乘法)与非线性激活函数交替堆叠。

每层 h=g(Wx+b)h = g(Wx + b)h=g(Wx+b),其中 ggg 是激活函数。

通过施加多层非线性变换, MLP 可以把原来线性不可分的点集映射到一个新的特征空间中,使其更线性可分。

设网络共有 LLL 层(含输入输出层)。记:

  • 输入:x∈Rn1\mathbf{x} \in \mathbb{R}^{n_1}x∈Rn1​
  • 第 ℓ\ellℓ 层的神经元数:nℓn_\ellnℓ​
  • 第 ℓ\ellℓ 层的权重矩阵: W(ℓ)∈Rnℓ×nℓ−1\mathbf{W}^{(\ell)} \in \mathbb{R}^{n_\ell \times n_{\ell-1}}W(ℓ)∈Rnℓ​×nℓ−1​, wij(ℓ)w_{ij}^{(\ell)}wij(ℓ)​ 元代表边 aj(ℓ)→ai(ℓ+1)a_j^{(\ell)} \rightarrow a_i^{(\ell+1)}aj(ℓ)​→ai(ℓ+1)​ 的权重
  • 第 ℓ\ellℓ 层的偏置向量:b(ℓ)∈Rnℓ\mathbf{b}^{(\ell)} \in \mathbb{R}^{n_\ell}b(ℓ)∈Rnℓ​

其中 ℓ=1,2,…,L\ell = 1, 2, \ldots, Lℓ=1,2,…,L。

前向传播递推关系:

z(ℓ)=W(ℓ)a(ℓ−1)+b(ℓ),ℓ=1,2,…,L\mathbf{z}^{(\ell)} = \mathbf{W}^{(\ell)} \mathbf{a}^{(\ell-1)} + \mathbf{b}^{(\ell)}, \quad \ell = 1, 2, \ldots, Lz(ℓ)=W(ℓ)a(ℓ−1)+b(ℓ),ℓ=1,2,…,L a(ℓ)=gℓ(z(ℓ))\mathbf{a}^{(\ell)} = g_\ell(\mathbf{z}^{(\ell)})a(ℓ)=gℓ​(z(ℓ))

其中:

  • a(1)=x\mathbf{a}^{(1)} = \mathbf{x}a(1)=x
  • a(ℓ)\mathbf{a}^{(\ell)}a(ℓ) 为第 ℓ\ellℓ 层输出,第 ℓ+1\ell + 1ℓ+1 层输入,ℓ=1,2,…,L−1\ell = 1, 2, \ldots, L-1ℓ=1,2,…,L−1
  • a(L)\mathbf{a}^{(L)}a(L) 为最终输出
  • gℓ:Rnℓ→Rnℓg_\ell: \mathbb{R}^{n_\ell} \to \mathbb{R}^{n_\ell}gℓ​:Rnℓ​→Rnℓ​ 是逐元素激活函数
图 1:神经网络示意图
图 1:神经网络示意图

紧凑形式:

MLP 整体可视为一个复合函数:

h(x;Θ)=(gL∘τL∘gL−1∘τL−1∘⋯∘g1∘τ1)(x)h(\mathbf{x}; \Theta) = \left( g_L \circ \tau_L \circ g_{L-1} \circ \tau_{L-1} \circ \cdots \circ g_1 \circ \tau_1 \right)(\mathbf{x})h(x;Θ)=(gL​∘τL​∘gL−1​∘τL−1​∘⋯∘g1​∘τ1​)(x)

其中 τℓ(a)=W(ℓ)a+b(ℓ)\tau_\ell(\mathbf{a}) = \mathbf{W}^{(\ell)} \mathbf{a} + \mathbf{b}^{(\ell)}τℓ​(a)=W(ℓ)a+b(ℓ) 为仿射变换,∘\circ∘ 表示函数复合。

参数集合:

Θ={W(1),b(1),W(2),b(2),…,W(L),b(L)}\Theta = \left\{ \mathbf{W}^{(1)}, \mathbf{b}^{(1)}, \mathbf{W}^{(2)}, \mathbf{b}^{(2)}, \ldots, \mathbf{W}^{(L)}, \mathbf{b}^{(L)} \right\}Θ={W(1),b(1),W(2),b(2),…,W(L),b(L)}

Define the Loss Function

我们要给出具体的损失函数与训练目标(optimization objective)。

MLE

最大似然估计(Maximum Likelihood Estimation)。

把模型看作给定输入时产生输出标签的概率模型:

p(y=1∣x;θ)=h(x;θ),p(y=0∣x;θ)=1−h(x;θ).p(y=1|x;\theta)=h(x; \theta),\quad p(y=0|x;\theta)=1-h(x; \theta).p(y=1∣x;θ)=h(x;θ),p(y=0∣x;θ)=1−h(x;θ).

假设样本独立,则对整个训练集出现的概率估计(似然函数)为:

p(Y∣X;θ)=∏i=1nh(x(i);θ)y(i)(1−h(x(i);θ))1−y(i).p(Y|X;\theta)=\prod_{i=1}^n h(x^{(i)}; \theta)^{y^{(i)}} (1-h(x^{(i)}; \theta))^{1-y^{(i)}}.p(Y∣X;θ)=i=1∏n​h(x(i);θ)y(i)(1−h(x(i);θ))1−y(i).

其中 YYY 为标签向量,XXX 为输入向量,y(i)y^{(i)}y(i) 为第 iii 个样本的标签,x(i)x^{(i)}x(i) 为第 iii 个样本的输入。

每个模型(参数)都可以计算出对应的训练集似然。我们应当选取一个模型(参数),使得这个模型(参数)计算出的训练集似然是在整个模型空间(参数空间)中最大的。此即最大似然估计:

θ∗=arg max⁡θp(Y∣X;θ)\theta^* = \argmax_\theta p(Y|X;\theta)θ∗=θargmax​p(Y∣X;θ)

NLL/Cross-Entropy

最小化负对数似然(Negative Log-Likelihood)

最大化似然等同于最小化负对数似然,为了使得梯度大小与样本数无关,我们取平均形式:

L(θ)=−1nlog⁡p(Y∣X;θ)=−1n∑i=1n[y(i)log⁡h(x(i);θ)+(1−y(i))log⁡(1−h(x(i);θ))]\begin{aligned} \mathcal{L}(\theta) &= -\frac{1}{n} \log p(Y|X;\theta) \\ &= -\frac{1}{n} \sum_{i=1}^n \left[ y^{(i)}\log h(x^{(i)}; \theta) + (1-y^{(i)})\log(1-h(x^{(i)}; \theta)) \right] \end{aligned}L(θ)​=−n1​logp(Y∣X;θ)=−n1​i=1∑n​[y(i)logh(x(i);θ)+(1−y(i))log(1−h(x(i);θ))]​

这也是常说的二元交叉熵(binary cross-entropy)损失。

对单样本的损失:

ℓ(i)(θ)=−[y(i)log⁡h(x(i);θ)+(1−y(i))log⁡(1−h(x(i);θ))]\ell^{(i)}(\theta) = -\left[ y^{(i)}\log h(x^{(i)}; \theta) + (1-y^{(i)})\log(1-h(x^{(i)}; \theta)) \right]ℓ(i)(θ)=−[y(i)logh(x(i);θ)+(1−y(i))log(1−h(x(i);θ))]

若加入 L2 正则化:

Lreg(θ)=L(θ)+λ2∥θ∥2\mathcal{L}_{\text{reg}}(\theta) = \mathcal{L}(\theta) + \frac{\lambda}{2}\|\theta\|^2Lreg​(θ)=L(θ)+2λ​∥θ∥2

其中 λ\lambdaλ 为超参数。

注:

  • NLL 使用对数,在概率极小时数值仍然稳定,且对于小概率惩罚更大。
  • NLL 使用对数,将复杂乘法转化为加法。
  • 二元 NLL 和二元交叉熵在数学上等价。

Perform Fitting

训练等价于最小化损失函数。我们分别推导 Logistic Regression 和 MLP 的反向传播过程。

Logistic Gradient Descent

设 Logistic Regression 模型为:

  • 线性项 z=θ⊤xz = \theta^\top xz=θ⊤x
  • 输出 h=σ(z)=1/(1+e−z)h = \sigma(z) = 1/(1+e^{-z})h=σ(z)=1/(1+e−z)
  • 单样本损失 ℓ(θ)=−[ylog⁡h+(1−y)log⁡(1−h)]\ell(\theta) = -[ y\log h + (1-y)\log(1-h) ]ℓ(θ)=−[ylogh+(1−y)log(1−h)]

链式法则求导:

  1. 对 hhh 求导: ∂ℓ∂h=−(yh−1−y1−h)\frac{\partial \ell}{\partial h} = -\left(\frac{y}{h} - \frac{1-y}{1-h}\right)∂h∂ℓ​=−(hy​−1−h1−y​)
  2. 对 zzz 求导: ∂h∂z=h(1−h)\frac{\partial h}{\partial z} = h(1 - h)∂z∂h​=h(1−h) 从而: ∂ℓ∂z=∂ℓ∂h∂h∂z=h−y\frac{\partial \ell}{\partial z} = \frac{\partial \ell}{\partial h} \frac{\partial h}{\partial z} = h - y∂z∂ℓ​=∂h∂ℓ​∂z∂h​=h−y
  3. 对 θ\thetaθ 求导: ∂ℓ∂θ=∂ℓ∂z∂z∂θ=(h−y)x\frac{\partial \ell}{\partial \theta} = \frac{\partial \ell}{\partial z} \frac{\partial z}{\partial \theta} = (h - y) x∂θ∂ℓ​=∂z∂ℓ​∂θ∂z​=(h−y)x

全量梯度:

∇θL(θ)=1n∑i=1n(h(x(i);θ)−y(i))x(i)=1nXT(H−Y)\begin{aligned} \nabla_\theta \mathcal{L}(\theta) &= \frac{1}{n} \sum_{i=1}^n (h(x^{(i)}; \theta) - y^{(i)}) x^{(i)} \\ &= \frac{1}{n} X^T (H - Y) \end{aligned}∇θ​L(θ)​=n1​i=1∑n​(h(x(i);θ)−y(i))x(i)=n1​XT(H−Y)​

注:

h(x(i);θ)−y(i)h(x^{(i)}; \theta) - y^{(i)}h(x(i);θ)−y(i) 是模型的预测误差(残差),乘以输入 x(i)x^{(i)}x(i) 得到该样本对梯度的贡献。 误差的绝对值越大,说明在该样本上的预测越差,该样本对参数更新的影响越大,从而引导模型向减小该误差的方向调整。

MLP Backpropagation

对于多层神经网络,我们需要计算损失函数对每一层参数的梯度。反向传播算法通过链式法则高效地完成这一计算。

前向传播过程中有:

z(ℓ)=W(ℓ)a(ℓ−1)+b(ℓ)a(ℓ)=gℓ(z(ℓ))\begin{aligned} \mathbf{z}^{(\ell)} &= \mathbf{W}^{(\ell)} \mathbf{a}^{(\ell-1)} + \mathbf{b}^{(\ell)} \\ \mathbf{a}^{(\ell)} &= g_\ell(\mathbf{z}^{(\ell)}) \end{aligned}z(ℓ)a(ℓ)​=W(ℓ)a(ℓ−1)+b(ℓ)=gℓ​(z(ℓ))​

其中 a(1)=x\mathbf{a}^{(1)} = \mathbf{x}a(1)=x,a(L)=h(x;Θ)\mathbf{a}^{(L)} = h(\mathbf{x}; \Theta)a(L)=h(x;Θ) 为最终输出。

定义误差信号:

δ(ℓ)=∂L∂z(ℓ)\boldsymbol{\delta}^{(\ell)} = \frac{\partial \mathcal{L}}{\partial \mathbf{z}^{(\ell)}}δ(ℓ)=∂z(ℓ)∂L​

表示损失函数对第 ℓ\ellℓ 层线性输出 z(ℓ)\mathbf{z}^{(\ell)}z(ℓ) 的梯度。

  1. 输出层误差:

    对于二分类问题,输出层使用 Sigmoid 激活 gL(z)=σ(z)g_L(z) = \sigma(z)gL​(z)=σ(z),损失为二元交叉熵:

    δ(L)=a(L)−y\boldsymbol{\delta}^{(L)} = \mathbf{a}^{(L)} - \mathbf{y}δ(L)=a(L)−y

    其中 y\mathbf{y}y 是标签向量。

    证明:以一维为例。

    δ(L)=∂L∂z(L)=∂L∂a(L)⋅∂a(L)∂z(L)=(−ya(L)+1−y1−a(L))⋅a(L)(1−a(L))=a(L)−y\begin{aligned} \delta^{(L)} &= \frac{\partial \mathcal{L}}{\partial z^{(L)}} = \frac{\partial \mathcal{L}}{\partial a^{(L)}} \cdot \frac{\partial a^{(L)}}{\partial z^{(L)}} \\ &= \left(-\frac{y}{a^{(L)}} + \frac{1-y}{1-a^{(L)}}\right) \cdot a^{(L)}(1-a^{(L)}) \\ &= a^{(L)} - y \end{aligned}δ(L)​=∂z(L)∂L​=∂a(L)∂L​⋅∂z(L)∂a(L)​=(−a(L)y​+1−a(L)1−y​)⋅a(L)(1−a(L))=a(L)−y​
  2. 误差反向传播:

    对于隐藏层 ℓ=L−1,L−2,…,2\ell = L-1, L-2, \ldots, 2ℓ=L−1,L−2,…,2:

    δ(ℓ)=((W(ℓ+1))⊤δ(ℓ+1))⊙gℓ′(z(ℓ))\boldsymbol{\delta}^{(\ell)} = \left( (\mathbf{W}^{(\ell+1)})^\top \boldsymbol{\delta}^{(\ell+1)} \right) \odot g_\ell'(\mathbf{z}^{(\ell)})δ(ℓ)=((W(ℓ+1))⊤δ(ℓ+1))⊙gℓ′​(z(ℓ))

    其中 ⊙\odot⊙ 表示逐元素相乘,gℓ′g_\ell'gℓ′​ 为激活函数的导数。

    证明: 根据链式法则,第 ℓ\ellℓ 层的误差信号来自第 ℓ+1\ell+1ℓ+1 层:

    δj(ℓ)=∂L∂zj(ℓ)=∑k=1nℓ+1∂L∂zk(ℓ+1)⋅∂zk(ℓ+1)∂zj(ℓ)\delta^{(\ell)}_j = \frac{\partial \mathcal{L}}{\partial z^{(\ell)}_j} = \sum_{k=1}^{n_{\ell+1}} \frac{\partial \mathcal{L}}{\partial z^{(\ell+1)}_k} \cdot \frac{\partial z^{(\ell+1)}_k}{\partial z^{(\ell)}_j}δj(ℓ)​=∂zj(ℓ)​∂L​=k=1∑nℓ+1​​∂zk(ℓ+1)​∂L​⋅∂zj(ℓ)​∂zk(ℓ+1)​​

    由于 zk(ℓ+1)=∑iwki(ℓ+1)ai(ℓ)+bk(ℓ+1)z^{(\ell+1)}_k = \sum_i w^{(\ell+1)}_{ki} a^{(\ell)}_i + b^{(\ell+1)}_kzk(ℓ+1)​=∑i​wki(ℓ+1)​ai(ℓ)​+bk(ℓ+1)​ 且 ai(ℓ)=gℓ(zi(ℓ))a^{(\ell)}_i = g_\ell(z^{(\ell)}_i)ai(ℓ)​=gℓ​(zi(ℓ)​):

    ∂zk(ℓ+1)∂zj(ℓ)=wkj(ℓ+1)⋅gℓ′(zj(ℓ))\frac{\partial z^{(\ell+1)}_k}{\partial z^{(\ell)}_j} = w^{(\ell+1)}_{kj} \cdot g_\ell'(z^{(\ell)}_j)∂zj(ℓ)​∂zk(ℓ+1)​​=wkj(ℓ+1)​⋅gℓ′​(zj(ℓ)​)

    代入得:

    δj(ℓ)=(∑kwkj(ℓ+1)δk(ℓ+1))gℓ′(zj(ℓ))\delta^{(\ell)}_j = \left( \sum_{k} w^{(\ell+1)}_{kj} \delta^{(\ell+1)}_k \right) g_\ell'(z^{(\ell)}_j)δj(ℓ)​=(k∑​wkj(ℓ+1)​δk(ℓ+1)​)gℓ′​(zj(ℓ)​)

    写成矩阵形式即证。

  3. 权重梯度:

    ∂L∂W(ℓ)=δ(ℓ)(a(ℓ−1))⊤\frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(\ell)}} = \boldsymbol{\delta}^{(\ell)} (\mathbf{a}^{(\ell-1)})^\top∂W(ℓ)∂L​=δ(ℓ)(a(ℓ−1))⊤

    即:

    ∂L∂wij(ℓ)=δi(ℓ)⋅aj(ℓ−1)\frac{\partial \mathcal{L}}{\partial w^{(\ell)}_{ij}} = \delta^{(\ell)}_i \cdot a^{(\ell-1)}_j∂wij(ℓ)​∂L​=δi(ℓ)​⋅aj(ℓ−1)​
  4. 偏置梯度:

    ∂L∂b(ℓ)=δ(ℓ)\frac{\partial \mathcal{L}}{\partial \mathbf{b}^{(\ell)}} = \boldsymbol{\delta}^{(\ell)}∂b(ℓ)∂L​=δ(ℓ)

Parameter Update Methods

得到梯度后,使用优化器更新参数。

  1. 全量批量梯度下降(Full-batch GD):

    θ′=θ−α∇θL(θ)\theta' = \theta - \alpha \nabla_\theta \mathcal{L}(\theta)θ′=θ−α∇θ​L(θ)
    • 优点:稳定。
    • 缺点:每步计算量大,不能很好地并行和进行实时更新。
  2. 随机梯度下降(Stochastic GD,SGD):

    每次取一个样本更新:

    θ′=θ−α(hθ(x(i))−y(i))x(i)\theta' = \theta - \alpha (h_\theta(x^{(i)}) - y^{(i)}) x^{(i)}θ′=θ−α(hθ​(x(i))−y(i))x(i)
    • 优点:更新频繁、噪声可帮助跳出鞍点。
    • 缺点:噪声导致收敛震荡,不稳定。
  3. 小批量梯度下降(Mini-batch GD):

    取 batch 为 B\mathcal{B}B,size 为 BBB:

    θ′=θ−α1B∑i∈B(hθ(x(i))−y(i))x(i)\theta' = \theta - \alpha \frac{1}{B}\sum_{i\in\mathcal{B}}(h_\theta(x^{(i)})-y^{(i)}) x^{(i)}θ′=θ−αB1​i∈B∑​(hθ​(x(i))−y(i))x(i)

    在 GPU 上常用,平衡效率与稳定性。

  4. 自适应优化器(Adaptive Optimizers):

    • 动量法:Momentum
    • 自适应学习率:Adam、RMSProp 等

Learning Rate

学习率 α\alphaα 的选择对训练很关键。

常用策略:

  • 固定学习率
  • 学习率衰减:
    • step decay:每隔若干 epoch 乘以一个衰减因子
    • exponential decay:每轮指数衰减
  • 基于验证集自动调整: 监控验证集表现,若连续若干轮不提升,自动降低学习率。如 PyTorch 的 ReduceLROnPlateau
  • 学习率预热: 训练初期用小学习率 warm up,逐渐增加到目标值,再衰减。
  • 提前停止: 监控验证集误差,若连续若干轮不下降则停止训练,防止过拟合。

Difficulty

神经网络训练是非凸优化,常见问题:

  • 鞍点(saddle points)导致局部最优解。
  • 过参数化导致高维空间,其中有大量平坦区域(flat plateaus),梯度太小,移动慢;同时高维下特征值多,更容易出现鞍点(Hessian 中正负特征值同时出现)。

因此,直接基于全量批量 GD 在深度学习中往往不够鲁棒,SGD 的噪声反而有帮助。

Testing

训练完成后要在测试集上评估模型的泛化能力(generalization)。

常用评估指标:

缩写全称含义
TPTrue Positives1 预测为 1 的数量
FPFalse Positives0 预测为 1 的数量
FNFalse Negatives1 预测为 0 的数量
TNTrue Negatives0 预测为 0 的数量
  • 准确率:accuracy=TPTOT\text{accuracy} = \dfrac{\text{TP}}{\text{TOT}}accuracy=TOTTP​
  • 精确率:precision=TPTP+FP\text{precision} = \dfrac{\text{TP}}{\text{TP}+\text{FP}}precision=TP+FPTP​
  • 召回率:recall=TPTP+FN\text{recall} = \dfrac{\text{TP}}{\text{TP}+\text{FN}}recall=TP+FNTP​
  • F1-score:2precision⋅recallprecision+recall2\dfrac{\text{precision}\cdot\text{recall}}{\text{precision}+\text{recall}}2precision+recallprecision⋅recall​
  • 混淆矩阵(Confusion Matrix):展示 TP/FP/TN/FN 的分布
  • 泛化间隙(Generalization Gap):generalization gap=Etest[loss]−Etrain[loss]\text{generalization gap} = \mathbb{E}_{\text{test}}[\text{loss}] - \mathbb{E}_{\text{train}}[\text{loss}]generalization gap=Etest​[loss]−Etrain​[loss]。 由过拟合造成,可通过增加数据、数据增强、正则化、简化模型、早停缓解。

Problems for Applying MLP to CV

需要将图像平坦化(flatten)为向量:

  • 会破坏图像的局部结构,空间邻接关系被抹去。
  • 参数数目随像素数线性增长,对高分辨率图像计算与内存负担大。

因此在视觉任务中更常用 Convolutional Neural Networks(CNNs),保留空间结构并通过参数共享大幅减少参数量。

目录
  • Classical CV Pipeline
    • Pipeline
    • Keypoint detector
    • Descriptor
    • Aggregation
    • Classifier
    • Problems
  • Learning-based CV
    • Advantages
    • Why It Took Off
  • Machine Learning
    • Set Up the Task
    • Prepare the Data
    • Build a Model
      • Logistic Regression
      • MLP Neural Network
    • Define the Loss Function
      • MLE
      • NLL/Cross-Entropy
    • Perform Fitting
      • Logistic Gradient Descent
      • MLP Backpropagation
      • Parameter Update Methods
      • Learning Rate
      • Difficulty
    • Testing
  • Problems for Applying MLP to CV
© 2026 miniyuan. All rights reserved.
Go to miniyuan's GitHub repo