0. 学习内容

计算机科研里的数学,主要是围绕科研问题。

所有计算机视觉与 AI 研究问题,大致都可以拆成这条链:

数据→表示→比较→损失→优化→泛化→解释 \text{数据} \rightarrow \text{表示} \rightarrow \text{比较} \rightarrow \text{损失} \rightarrow \text{优化} \rightarrow \text{泛化} \rightarrow \text{解释}

对应数学是:

科研问题对应数学分支
数据怎么表示?线性代数
模型怎么学习?微积分
参数怎么更新?最优化
数据和预测有不确定性怎么办?概率论
实验结论是否可信?统计学
loss、分布、信息怎么理解?信息论
图像、视频、3D 有什么结构?信号处理、几何、时序建模
模型是不是学了 shortcut?因果推断、不变性、鲁棒性

学习路径优先级:

  1. 核心基石:线性代数 + 微积分 + 概率统计 + 信息论 + 最优化
  2. 领域进阶(CV/3D/AIGC):信号处理 + 几何 + 时序建模 + 因果鲁棒性

1. 线性代数:数据和特征的语言

1.1 向量:样本的数字表示

深度学习里,数据最终都会变成向量。一张图片 224×224×3224 \times 224 \times 3 可以看成:

x∈R150528 x \in \mathbb{R}^{150528}

模型提取特征 z=fθ(x)z = f_\theta(x),比如:

z∈R512 z \in \mathbb{R}^{512}

这个 zz 就是模型对图片的理解。

💡 直觉:模型把复杂对象压缩成了一个高维空间中的“语义坐标”。

1.2 矩阵:把一个向量变成另一个向量

全连接层方程 y=Wx+by = Wx + b,在 PyTorch 里是:

nn.Linear(in_features=d, out_features=m)
python

数学上就是: x∈Rdx \in \mathbb{R}^{d},W∈Rm×dW \in \mathbb{R}^{m \times d},最终映射为 y∈Rmy \in \mathbb{R}^{m}。

💡 直觉:矩阵 WW 把输入向量从一个空间变换(旋转、拉伸)到了另一个空间。

1.3 张量:高维数组

  • 图像 batch:X∈RB×C×H×WX \in \mathbb{R}^{B \times C \times H \times W}
  • 视频 batch:X∈RB×T×C×H×WX \in \mathbb{R}^{B \times T \times C \times H \times W}

(BB = batch size,TT = 帧数,CC = 通道数,HH = 高度,WW = 宽度)

核心经验:以后看代码,先看 shape。

例如:

q.shape = [B, D]
k_neg.shape = [B, N, D]
q.unsqueeze(2).shape = [B, D, 1]
python

此时执行 torch.bmm(k_neg, q.unsqueeze(2)),对应的就是:

[B,N,D]×[B,D,1]→[B,N,1] [B, N, D] \times [B, D, 1] \rightarrow [B, N, 1]

再执行 .squeeze(2) 就会变成 [B,N][B, N]。这就是 Batch Matrix Multiplication。

1.4 内积:相似度的基础

两个向量 a,b∈Rda, b \in \mathbb{R}^d 的内积:

a⊤b=∑iaibi a^\top b = \sum_i a_i b_i

如果两个向量都归一化(∣a∣=1,∣b∣=1|a|=1, |b|=1),那么 a⊤b=cos⁡θa^\top b = \cos\theta,这就是余弦相似度。CLIP、对比学习、检索系统都在用:

sim(a,b)=a⊤b∣a∣∣b∣ \text{sim}(a,b) = \frac{a^\top b}{|a||b|}

💡 直觉:两个特征方向越接近,它们的语义越相似。

1.5 范数:长度、距离、误差

  • L1 范数:∣x∣1=∑i∣xi∣|x|_1 = \sum_i |x_i| (常见于:重建损失、稀疏约束、Pix2Pix 的 L1 loss)
  • L2 范数:∣x∣2=∑ixi2|x|_2 = \sqrt{\sum_i x_i^2} (常见于:欧氏距离、特征距离、正则化、重投影误差)
  • 无穷范数:∣x∣∞=max⁡i∣xi∣|x|_\infty = \max_i |x_i| (常见于对抗攻击:∣δ∣∞≤ϵ|\delta|_\infty \leq \epsilon,意思是每个像素最多只能改 ϵ\epsilon)

1.6 Attention 的线性代数本质

Self-Attention 公式:

Attention(Q,K,V)=softmax(QK⊤d)V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d}}\right)V

拆解来看:

  1. QK⊤QK^\top 是相似度矩阵。如果 Q,K∈RN×dQ, K \in \mathbb{R}^{N \times d},那么 QK⊤∈RN×NQK^\top \in \mathbb{R}^{N \times N},表示每个 token 和每个 token 的相似度。
  2. softmax(QK⊤d)\text{softmax}\left(\frac{QK^\top}{\sqrt{d}}\right) 把相似度变成权重。
  3. 最后乘 VV 得到加权信息聚合。

💡 一句话:Attention 就是“基于相似度的加权信息汇聚”。

1.7 SVD、PCA、低秩与 LoRA

SVD 分解:

A=UΣV⊤ A = U\Sigma V^\top
  • V⊤V^\top:旋转输入空间
  • Σ\Sigma:按重要方向缩放
  • UU:旋转到输出空间

大模型微调中的 LoRA 形式:W′=W+ΔWW' = W + \Delta W,其中 ΔW=BA\Delta W = BA(B∈Rd×r,A∈Rr×kB \in \mathbb{R}^{d \times r}, A \in \mathbb{R}^{r \times k})。如果 rr 很小,说明更新是低秩的。

💡 直觉:大模型微调时,不需要改变整个大矩阵,只需要在少数重要方向上调整。


2. 微积分:模型为什么能学习

核心问题:参数变一点,loss 会怎么变?

2.1 导数与梯度:多维变化率

一维导数 f′(x)=dydxf'(x) = \frac{dy}{dx} 表示 xx 变化一点,yy 大概变化多少。

在多维参数 θ=[θ1,θ2,…,θn]\theta = [\theta_1, \theta_2, \dots, \theta_n] 下,loss 函数 L(θ)\mathcal{L}(\theta) 的梯度为:

∇θL=[∂L∂θ1,…,∂L∂θn] \nabla_\theta\mathcal{L} = \left[ \frac{\partial \mathcal{L}}{\partial \theta_1}, \dots, \frac{\partial \mathcal{L}}{\partial \theta_n} \right]

梯度方向是 loss 增长最快的方向,所以训练要往反方向走。

代码对应:

optimizer.zero_grad()  # 清空旧梯度
loss.backward()        # 计算梯度
optimizer.step()       # 根据梯度更新参数
python

2.2 泰勒展开:梯度下降的根本原因

一阶泰勒展开:

L(θ+Δθ)≈L(θ)+∇θL⊤Δθ \mathcal{L}(\theta+\Delta\theta) \approx \mathcal{L}(\theta) + \nabla_\theta \mathcal{L}^\top \Delta\theta

如果选择 Δθ=−η∇θL\Delta\theta = -\eta\nabla_\theta\mathcal{L},那么:

L(θ+Δθ)≈L(θ)−η∣∇θL∣2 \mathcal{L}(\theta+\Delta\theta) \approx \mathcal{L}(\theta) - \eta |\nabla_\theta\mathcal{L}|^2

所以只要学习率 η\eta 合适,loss 必定会下降。这就是梯度下降的数学保证:

θt+1=θt−η∇θL \theta_{t+1} = \theta_t - \eta\nabla_\theta\mathcal{L}

2.3 链式法则:反向传播的本质

如果 z=f(y)z = f(y) 且 y=g(x)y = g(x),那么 dzdx=dzdy⋅dydx\frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx}。

神经网络是很多函数复合:x→h1→h2→h3→y^→Lx \rightarrow h_1 \rightarrow h_2 \rightarrow h_3 \rightarrow \hat{y} \rightarrow \mathcal{L}。要求第一层参数 W1W_1 对 loss 的影响,就是从后往前连乘:

∂L∂W1=∂L∂y^⋅∂y^∂h3⋅∂h3∂h2⋅∂h2∂h1⋅∂h1∂W1 \frac{\partial \mathcal{L}}{\partial W_1} = \frac{\partial \mathcal{L}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial h_3} \cdot \frac{\partial h_3}{\partial h_2} \cdot \frac{\partial h_2}{\partial h_1} \cdot \frac{\partial h_1}{\partial W_1}

2.4 Jacobian 与 Hessian

  • Jacobian(一阶导数矩阵):f:Rn→Rmf:\mathbb{R}^n \rightarrow \mathbb{R}^m,导数是矩阵 Jf(x)=∂f∂x∈Rm×nJ_f(x) = \frac{\partial f}{\partial x} \in \mathbb{R}^{m \times n}。比如生成器 GG 的 Jacobian 表示 latent vector 每一维变化,会如何影响输出图像的每一个像素。
  • Hessian(二阶导数矩阵):H=∇θ2LH = \nabla_\theta^2\mathcal{L},表示 loss 曲面的弯曲程度。它帮助我们理解 local minima、鞍点(saddle point)、sharp/flat minimum 以及模型的泛化能力。

3. 概率论:不确定性的语言

机器学习是在处理不确定性,因此我们需要概率论的帮助。

3.1 期望与方差

期望是加权平均:

Ex∼p(x)[f(x)]=∫p(x)f(x)dx \mathbb{E}_{x\sim p(x)}[f(x)] = \int p(x)f(x)dx

代码里通常用 batch 平均近似:E[f(x)]≈1B∑i=1Bf(xi)\mathbb{E}[f(x)] \approx \frac{1}{B} \sum_{i=1}^B f(x_i)。 论文里写 Ex∼pdata[ℓ(x)]\mathbb{E}_{x\sim p_{data}}[\ell(x)],代码里大概率就是 loss = loss_per_sample.mean()。

实验中方差很重要:Var(X)=E[(X−E[X])2]Var(X) = \mathbb{E}[(X - \mathbb{E}[X])^2]。一个方法平均提高 0.2%,但标准差 1.0%,不能说明真的更好。科研实验结果最好报 mean±std\text{mean} \pm \text{std}。

3.2 条件概率与贝叶斯

生成任务的核心都是条件概率:

  • 分类:p(class∣image)p(\text{class} | \text{image})
  • Pix2Pix:p(target image∣input image)p(\text{target image} | \text{input image})
  • 文本生图:p(image∣text)p(\text{image} | \text{text})

贝叶斯公式贯穿始终:

p(θ∣D)=p(D∣θ)p(θ)p(D) p(\theta|D) = \frac{p(D|\theta)p(\theta)}{p(D)}

💡 科研思维:看到一个好结果,我们应该追问:这结果来自方法本身的概率有多大?来自数据泄漏的概率多大?来自 random seed 的概率多大?来自 shortcut 的概率多大?

不断搞清结果的来源,打造地基。


4. 统计学:实验结论是否可信

核心问题:我们看到的提升是真的,还是偶然?

4.1 经验风险与数据泄漏

我们真正关心的是真实风险 R(f)=E[ℓ(f(x),y)]R(f) = \mathbb{E}[\ell(f(x), y)],但训练时只能最小化经验风险 R^(f)=1n∑ℓ(f(xi),yi)\hat{R}(f) = \frac{1}{n}\sum \ell(f(x_i), y_i)。

在 AIGC 视频检测等任务中,数据泄漏是致命的。常见的泄漏陷阱:

  • 同一个视频的不同帧同时进 train 和 test
  • 同一个 prompt 的生成结果同时进 train 和 test
  • 原视频和压缩版本跨 train/test

正确做法:必须按 identity、prompt、generator 或 scene 严格 split。

4.2 置信区间与消融实验

对比两个方法时,如果 90.1±0.890.1 \pm 0.8 和 90.4±0.990.4 \pm 0.9,不能轻易断言后者显著更好。

消融实验 (Ablation Study) 本质是控制变量法。提出模块 M,应比较:baseline -> baseline + M -> baseline + N -> baseline + M + N。


5. 信息论:loss 和表征学习的钥匙

5.1 熵与交叉熵

  • 熵:平均不确定性 H(X)=Ex∼p[−log⁡p(x)]H(X) = \mathbb{E}_{x\sim p}[-\log p(x)]。分类输出 [0.5,0.5][0.5, 0.5] 熵大,[0.99,0.01][0.99, 0.01] 熵小。
  • 交叉熵:H(p,q)=−∑xp(x)log⁡q(x)H(p,q) = -\sum_x p(x)\log q(x)。分类任务中真实标签是 one-hot 的,所以交叉熵的本质就是:让模型给真实类别更高的概率。
  • PyTorch 中的 F.cross_entropy 内部等价于 log_softmax + nll_loss。

5.2 KL 散度和 JS 散度

KL 散度:用 qq 去近似 pp 会额外损失多少信息:

KL(p∣∣q)=∑xp(x)log⁡p(x)q(x) KL(p||q) = \sum_x p(x)\log\frac{p(x)}{q(x)}

注意,KL 散度是有方向的(KL(p∣∣q)≠KL(q∣∣p)KL(p||q) \neq KL(q||p)):

  • Forward KL (pdata∣∣pmodelp_{data} || p_{model}):倾向于覆盖所有模式(mode-covering)。
  • Reverse KL (pmodel∣∣pdatap_{model} || p_{data}):倾向于保守,可能导致 mode-collapse(mode-seeking)。

JS 散度是对称的,原始 GAN 最优判别器下,相当于最小化真实分布和生成分布之间的 JS 散度。

5.3 InfoNCE 与对比学习

对比学习的核心 loss:

L=−log⁡exp⁡(q⊤k+/τ)exp⁡(q⊤k+/τ)+∑iexp⁡(q⊤ki−/τ) \mathcal{L} = -\log \frac{\exp(q^\top k^+/\tau)}{\exp(q^\top k^+/\tau) + \sum_i \exp(q^\top k_i^-/\tau)}

💡 直觉:本质是分类——给定 query,拉近正样本(k+k^+),推远负样本(k−k^-)。让同一语义对象的不同视图之间互信息更高。


6. 最优化与数值稳定性

论文里的目标函数通常长这样:

L=Ltask+λ1Lreg+λ2Lcontrast+λ3Lrecon \mathcal{L} = \mathcal{L}_{\text{task}} + \lambda_1\mathcal{L}_{\text{reg}} + \lambda_2\mathcal{L}_{\text{contrast}} + \lambda_3\mathcal{L}_{\text{recon}}

读论文时必须问:每一项在惩罚什么?去掉会怎样?λ\lambda 怎么选?

6.1 常见优化器直觉

  • SGD:引入 batch 噪声,有时能帮助找到更平坦的解。
  • Momentum:梯度方向持续一致就加速,来回震荡就抵消。
  • Adam:经常梯度大的参数步子变小,经常梯度小的参数步子相对变大。

6.2 代码的生死线:数值稳定

  • Softmax 溢出:若 xi=1000x_i=1000,e1000e^{1000} 会溢出。稳定写法是分子分母同除以最大值的指数 eme^m。
  • Log-sum-exp:用于对比损失、CRF 中,稳定写法为 m+log⁡∑iexi−mm + \log\sum_i e^{x_i-m}。
  • float16 问题:容易 nan 或 inf,需要 mixed precision、loss scaling 或梯度裁剪。

7. 信号、几何与因果:通向高水平研究

7.1 傅里叶变换与频域信号

傅里叶变换把信号分解成频率:

  • 低频:整体颜色、光照、大轮廓
  • 高频:纹理、噪声、压缩痕迹

在 AIGC 检测中,频域极其重要,因为生成图像或视频往往会有异常高频、周期性纹理或频谱分布异常。另外,采样率不足导致的混叠(aliasing)在视频中表现为边缘闪烁、纹理跳变。

7.2 几何:3D 视觉的核心

3D 点 X=[X,Y,Z,1]⊤X = [X,Y,Z,1]^\top 投影到图像平面的基本方程:

s[uv1]=K[R∣t][XYZ1] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K[R|t] \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}

其中 KK 是内参,R,tR,t 是外参。真实观测点与预测投影点之间的重投影误差(Reprojection Error)是 SfM、COLMAP 和 3DGS 优化的绝对核心。

7.3 因果与鲁棒性

机器学习极易学到 shortcut。比如 AIGC 检测器可能仅仅学到了“fake 视频分辨率更低”或“有特定压缩伪影”。 这也是为什么设计评测协议(如 SCAR protocol)需要做干预实验 (Intervention):改变 codec、分辨率、码率。如果一压缩就失效,说明模型没有学到真正的“生成机制导致的不一致性”,而是学了混杂变量(confounder)。


8. 总结:读论文公式的 7 步法

按这个框架拆:

  1. 找变量:谁是输入?特征?参数?标签?
  2. 看 shape:维度是怎么变换的?
  3. 看操作:是矩阵乘法、范数、期望还是 KL?
  4. 看比较对象:是在对比预测和标签,还是正负样本?
  5. 看 loss 惩罚什么:每个 loss 都在说“我不希望某件事发生”。
  6. 看优化方向:是 min 还是 max,还是对抗的 min-max?
  7. 翻译成人话:用自己的直觉语言把公式的物理意义讲出来。

🌟 最终信仰 线性代数让数据能表示,微积分让模型能学习,概率统计让结论可信,信息论让 loss 有意义,优化让训练可执行,信号与几何让我们真正理解视觉世界。