0. 学习内容#
计算机科研里的数学,主要是围绕科研问题。
所有计算机视觉与 AI 研究问题,大致都可以拆成这条链:
数据→表示→比较→损失→优化→泛化→解释对应数学是:
| 科研问题 | 对应数学分支 |
|---|
| 数据怎么表示? | 线性代数 |
| 模型怎么学习? | 微积分 |
| 参数怎么更新? | 最优化 |
| 数据和预测有不确定性怎么办? | 概率论 |
| 实验结论是否可信? | 统计学 |
| loss、分布、信息怎么理解? | 信息论 |
| 图像、视频、3D 有什么结构? | 信号处理、几何、时序建模 |
| 模型是不是学了 shortcut? | 因果推断、不变性、鲁棒性 |
学习路径优先级:
- 核心基石:
线性代数 + 微积分 + 概率统计 + 信息论 + 最优化 - 领域进阶(CV/3D/AIGC):
信号处理 + 几何 + 时序建模 + 因果鲁棒性
1. 线性代数:数据和特征的语言#
1.1 向量:样本的数字表示#
深度学习里,数据最终都会变成向量。一张图片 224×224×3 可以看成:
x∈R150528模型提取特征 z=fθ(x),比如:
z∈R512这个 z 就是模型对图片的理解。
💡 直觉:模型把复杂对象压缩成了一个高维空间中的“语义坐标”。
1.2 矩阵:把一个向量变成另一个向量#
全连接层方程 y=Wx+b,在 PyTorch 里是:
nn.Linear(in_features=d, out_features=m)
python
数学上就是:
x∈Rd,W∈Rm×d,最终映射为 y∈Rm。
💡 直觉:矩阵 W 把输入向量从一个空间变换(旋转、拉伸)到了另一个空间。
1.3 张量:高维数组#
- 图像 batch:X∈RB×C×H×W
- 视频 batch:X∈RB×T×C×H×W
(B = batch size,T = 帧数,C = 通道数,H = 高度,W = 宽度)
核心经验:以后看代码,先看 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]再执行 .squeeze(2) 就会变成 [B,N]。这就是 Batch Matrix Multiplication。
1.4 内积:相似度的基础#
两个向量 a,b∈Rd 的内积:
a⊤b=i∑aibi如果两个向量都归一化(∣a∣=1,∣b∣=1),那么 a⊤b=cosθ,这就是余弦相似度。CLIP、对比学习、检索系统都在用:
sim(a,b)=∣a∣∣b∣a⊤b💡 直觉:两个特征方向越接近,它们的语义越相似。
1.5 范数:长度、距离、误差#
- L1 范数:∣x∣1=∑i∣xi∣ (常见于:重建损失、稀疏约束、Pix2Pix 的 L1 loss)
- L2 范数:∣x∣2=∑ixi2 (常见于:欧氏距离、特征距离、正则化、重投影误差)
- 无穷范数:∣x∣∞=maxi∣xi∣ (常见于对抗攻击:∣δ∣∞≤ϵ,意思是每个像素最多只能改 ϵ)
1.6 Attention 的线性代数本质#
Self-Attention 公式:
Attention(Q,K,V)=softmax(dQK⊤)V拆解来看:
- QK⊤ 是相似度矩阵。如果 Q,K∈RN×d,那么 QK⊤∈RN×N,表示每个 token 和每个 token 的相似度。
- softmax(dQK⊤) 把相似度变成权重。
- 最后乘 V 得到加权信息聚合。
💡 一句话:Attention 就是“基于相似度的加权信息汇聚”。
1.7 SVD、PCA、低秩与 LoRA#
SVD 分解:
A=UΣV⊤- V⊤:旋转输入空间
- Σ:按重要方向缩放
- U:旋转到输出空间
大模型微调中的 LoRA 形式:W′=W+ΔW,其中 ΔW=BA(B∈Rd×r,A∈Rr×k)。如果 r 很小,说明更新是低秩的。
💡 直觉:大模型微调时,不需要改变整个大矩阵,只需要在少数重要方向上调整。
2. 微积分:模型为什么能学习#
核心问题:参数变一点,loss 会怎么变?
2.1 导数与梯度:多维变化率#
一维导数 f′(x)=dxdy 表示 x 变化一点,y 大概变化多少。
在多维参数 θ=[θ1,θ2,…,θn] 下,loss 函数 L(θ) 的梯度为:
∇θL=[∂θ1∂L,…,∂θn∂L]梯度方向是 loss 增长最快的方向,所以训练要往反方向走。
代码对应:
optimizer.zero_grad() # 清空旧梯度
loss.backward() # 计算梯度
optimizer.step() # 根据梯度更新参数
python
2.2 泰勒展开:梯度下降的根本原因#
一阶泰勒展开:
L(θ+Δθ)≈L(θ)+∇θL⊤Δθ如果选择 Δθ=−η∇θL,那么:
L(θ+Δθ)≈L(θ)−η∣∇θL∣2所以只要学习率 η 合适,loss 必定会下降。这就是梯度下降的数学保证:
θt+1=θt−η∇θL2.3 链式法则:反向传播的本质#
如果 z=f(y) 且 y=g(x),那么 dxdz=dydz⋅dxdy。
神经网络是很多函数复合:x→h1→h2→h3→y^→L。要求第一层参数 W1 对 loss 的影响,就是从后往前连乘:
∂W1∂L=∂y^∂L⋅∂h3∂y^⋅∂h2∂h3⋅∂h1∂h2⋅∂W1∂h12.4 Jacobian 与 Hessian#
- Jacobian(一阶导数矩阵):f:Rn→Rm,导数是矩阵 Jf(x)=∂x∂f∈Rm×n。比如生成器 G 的 Jacobian 表示 latent vector 每一维变化,会如何影响输出图像的每一个像素。
- Hessian(二阶导数矩阵):H=∇θ2L,表示 loss 曲面的弯曲程度。它帮助我们理解 local minima、鞍点(saddle point)、sharp/flat minimum 以及模型的泛化能力。
3. 概率论:不确定性的语言#
机器学习是在处理不确定性,因此我们需要概率论的帮助。
3.1 期望与方差#
期望是加权平均:
Ex∼p(x)[f(x)]=∫p(x)f(x)dx代码里通常用 batch 平均近似:E[f(x)]≈B1∑i=1Bf(xi)。
论文里写 Ex∼pdata[ℓ(x)],代码里大概率就是 loss = loss_per_sample.mean()。
实验中方差很重要:Var(X)=E[(X−E[X])2]。一个方法平均提高 0.2%,但标准差 1.0%,不能说明真的更好。科研实验结果最好报 mean±std。
3.2 条件概率与贝叶斯#
生成任务的核心都是条件概率:
- 分类:p(class∣image)
- Pix2Pix:p(target image∣input image)
- 文本生图:p(image∣text)
贝叶斯公式贯穿始终:
p(θ∣D)=p(D)p(D∣θ)p(θ)💡 科研思维:看到一个好结果,我们应该追问:这结果来自方法本身的概率有多大?来自数据泄漏的概率多大?来自 random seed 的概率多大?来自 shortcut 的概率多大?
不断搞清结果的来源,打造地基。
4. 统计学:实验结论是否可信#
核心问题:我们看到的提升是真的,还是偶然?
4.1 经验风险与数据泄漏#
我们真正关心的是真实风险 R(f)=E[ℓ(f(x),y)],但训练时只能最小化经验风险 R^(f)=n1∑ℓ(f(xi),yi)。
在 AIGC 视频检测等任务中,数据泄漏是致命的。常见的泄漏陷阱:
- 同一个视频的不同帧同时进 train 和 test
- 同一个 prompt 的生成结果同时进 train 和 test
- 原视频和压缩版本跨 train/test
正确做法:必须按 identity、prompt、generator 或 scene 严格 split。
4.2 置信区间与消融实验#
对比两个方法时,如果 90.1±0.8 和 90.4±0.9,不能轻易断言后者显著更好。
消融实验 (Ablation Study) 本质是控制变量法。提出模块 M,应比较:baseline -> baseline + M -> baseline + N -> baseline + M + N。
5. 信息论:loss 和表征学习的钥匙#
5.1 熵与交叉熵#
- 熵:平均不确定性 H(X)=Ex∼p[−logp(x)]。分类输出 [0.5,0.5] 熵大,[0.99,0.01] 熵小。
- 交叉熵:H(p,q)=−∑xp(x)logq(x)。分类任务中真实标签是 one-hot 的,所以交叉熵的本质就是:让模型给真实类别更高的概率。
- PyTorch 中的
F.cross_entropy 内部等价于 log_softmax + nll_loss。
5.2 KL 散度和 JS 散度#
KL 散度:用 q 去近似 p 会额外损失多少信息:
KL(p∣∣q)=x∑p(x)logq(x)p(x)注意,KL 散度是有方向的(KL(p∣∣q)=KL(q∣∣p)):
- Forward KL (pdata∣∣pmodel):倾向于覆盖所有模式(mode-covering)。
- Reverse KL (pmodel∣∣pdata):倾向于保守,可能导致 mode-collapse(mode-seeking)。
JS 散度是对称的,原始 GAN 最优判别器下,相当于最小化真实分布和生成分布之间的 JS 散度。
5.3 InfoNCE 与对比学习#
对比学习的核心 loss:
L=−logexp(q⊤k+/τ)+∑iexp(q⊤ki−/τ)exp(q⊤k+/τ)💡 直觉:本质是分类——给定 query,拉近正样本(k+),推远负样本(k−)。让同一语义对象的不同视图之间互信息更高。
6. 最优化与数值稳定性#
论文里的目标函数通常长这样:
L=Ltask+λ1Lreg+λ2Lcontrast+λ3Lrecon读论文时必须问:每一项在惩罚什么?去掉会怎样?λ 怎么选?
6.1 常见优化器直觉#
- SGD:引入 batch 噪声,有时能帮助找到更平坦的解。
- Momentum:梯度方向持续一致就加速,来回震荡就抵消。
- Adam:经常梯度大的参数步子变小,经常梯度小的参数步子相对变大。
6.2 代码的生死线:数值稳定#
- Softmax 溢出:若 xi=1000,e1000 会溢出。稳定写法是分子分母同除以最大值的指数 em。
- Log-sum-exp:用于对比损失、CRF 中,稳定写法为 m+log∑iexi−m。
- float16 问题:容易 nan 或 inf,需要 mixed precision、loss scaling 或梯度裁剪。
7. 信号、几何与因果:通向高水平研究#
7.1 傅里叶变换与频域信号#
傅里叶变换把信号分解成频率:
- 低频:整体颜色、光照、大轮廓
- 高频:纹理、噪声、压缩痕迹
在 AIGC 检测中,频域极其重要,因为生成图像或视频往往会有异常高频、周期性纹理或频谱分布异常。另外,采样率不足导致的混叠(aliasing)在视频中表现为边缘闪烁、纹理跳变。
7.2 几何:3D 视觉的核心#
3D 点 X=[X,Y,Z,1]⊤ 投影到图像平面的基本方程:
suv1=K[R∣t]XYZ1其中 K 是内参,R,t 是外参。真实观测点与预测投影点之间的重投影误差(Reprojection Error)是 SfM、COLMAP 和 3DGS 优化的绝对核心。
7.3 因果与鲁棒性#
机器学习极易学到 shortcut。比如 AIGC 检测器可能仅仅学到了“fake 视频分辨率更低”或“有特定压缩伪影”。
这也是为什么设计评测协议(如 SCAR protocol)需要做干预实验 (Intervention):改变 codec、分辨率、码率。如果一压缩就失效,说明模型没有学到真正的“生成机制导致的不一致性”,而是学了混杂变量(confounder)。
8. 总结:读论文公式的 7 步法#
按这个框架拆:
- 找变量:谁是输入?特征?参数?标签?
- 看 shape:维度是怎么变换的?
- 看操作:是矩阵乘法、范数、期望还是 KL?
- 看比较对象:是在对比预测和标签,还是正负样本?
- 看 loss 惩罚什么:每个 loss 都在说“我不希望某件事发生”。
- 看优化方向:是 min 还是 max,还是对抗的 min-max?
- 翻译成人话:用自己的直觉语言把公式的物理意义讲出来。
🌟 最终信仰
线性代数让数据能表示,微积分让模型能学习,概率统计让结论可信,信息论让 loss 有意义,优化让训练可执行,信号与几何让我们真正理解视觉世界。