012、数学基石:线性代数、概率论与统计学精要
从一次模型推理异常说起
上个月调一个端侧图像分类模型,推理结果总是随机跳变。同一张图,连续推理十次能出三四个类别,概率值也飘得离谱。第一反应是量化误差?模型对齐问题?查了一整天,最后发现是预处理里一个不起眼的矩阵乘法——传进去的归一化参数是np.float32,但权重是torch.float16,混合精度计算时某个协方差矩阵的条件数爆炸了,数值稳定性直接崩掉。
你看,数学不会骗你,但会默默埋雷。
线性代数:不只是矩阵乘法
很多人觉得线性代数就是torch.matmul()那点事,直到你遇到奇异值分解(SVD)不收敛、特征向量方向飘移、或者梯度爆炸。几个关键点:
1. 空间变换的实质
模型里的全连接层,本质是空间映射。比如BERT的768维隐空间到分类头的128维,不是“删掉640维”,而是做了投影。这里容易踩坑:如果投影矩阵秩不足,信息就真的丢了。检查权重矩阵的奇异值分布,如果后1/3接近零,说明参数冗余严重。
# 快速看权重矩阵的健康状况
U, S, Vt = np.linalg.svd(dense_layer_weight)
print("奇异值衰减情况:", S[:10]) # 前10个奇异值
# 如果第5个就掉到1e-6,说明矩阵太瘦了,可能欠拟合
2. 逆矩阵的数值陷阱
协方差矩阵求逆在卡尔曼滤波、白化处理里常见。但np.linalg.inv()在条件数大时基本是灾难。实际用np.linalg.pinv()(伪逆)加个正则化更安全。
# 别这样写
cov_inv = np.linalg.inv(cov_matrix) # 条件数大了就炸
# 试试这个
cov_inv = np.linalg.pinv(cov_matrix, rcond=1e-6) # 截断小奇异值
# rcond调参看情况,1e-6是个经验起点
3. 特征分解的工程含义
PCA降维、谱聚类、甚至Google的PageRank,底层都是特征分解。在推荐系统里,用户-物品交互矩阵分解(MF)就是低秩近似。但大规模矩阵别直接np.linalg.eig(),用迭代法(如ARPACK)只算前k个特征向量。
概率论:不确定性量化
模型输出softmax([5.2, 3.1, 0.7]),得到[0.85, 0.15, 0.00],这不是概率,是归一化后的置信度。真概率需要校准(比如温度缩放)。两个核心概念:
1. 贝叶斯思维
先验(训练数据分布)、似然(模型预测)、后验(最终信念)。贝叶斯优化调参就是典型应用:把超参搜索看作概率推断,用高斯过程建模未知函数。
# 朴素实现:更新后验
posterior = likelihood * prior / evidence
# evidence常难算,所以MCMC采样、变分推断才成了主流
2. 分布选择
Loss设计本质是分布假设。MSE对应高斯分布,Cross-Entropy对应多项式分布,泊松损失对应计数数据。选错分布,模型学到天荒地白也收敛不好。
统计学:从数据中挖信号
1. 假设检验的误用
AB测试里p值<0.05就上线?别忘了统计功效(power)。样本量不足时,p值波动很大。我见过连续跑三次AB,p值0.04、0.06、0.03的——结论根本不可靠。
2. 方差与偏差的平衡
模型复杂了拟合训练集(方差大),简单了欠拟合(偏差大)。Bagging降方差,Boosting降偏差。具体到实践:随机森林树多了方差降,XGBoost迭代多了偏差降。调参时先想清楚当前模型死在方差还是偏差上。
3. 相关性不是因果
用户点击和停留时长正相关,但可能是“内容质量高”同时导致两者上升。因果推断常用双重差分(DID)、倾向得分匹配(PSM)。在特征工程里,盲目删高相关特征可能丢共因信号。
个人经验包
- 矩阵运算优先用库函数(如BLAS、MKL优化过的),自己写循环容易慢100倍还数值不稳定。
- 概率输出务必校准,特别是分类模型上线前,用Platt Scaling或Isotonic Regression过一遍。
- 统计检验要伴随效应量(如Cohen’s d),光说“显著”没意义,可能只是样本量大。
- 随时检查条件数,
np.linalg.cond()大于1e8就要考虑正则化或重构问题。 - 理解分布假设,看一眼数据直方图再选Loss,比盲试十种优化器管用。
数学是内功,平时感觉不到,关键时刻能告诉你“为什么不行”。调试时遇到玄学问题,先回归数学本质,往往比调参炼丹更快找到出路。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)