复习机器学习数学,可以从算法里已经遇到的问题反推:为什么矩阵能表示一批样本,概率如何描述不确定性,梯度又怎样指示参数更新方向?下面围绕线性代数、概率和最优化组织内容,每个概念都接一个使用场景,方便带着问题回查。
前置阅读:无。这篇是所有算法篇的地基。
线性代数:数据的语言
向量与点积。一条数据就是一个向量,点积 度量两个向量的”同向程度”。点积除以模长就是余弦相似度——Embedding 检索的全部几何基础。
矩阵乘法就是线性变换。 把向量 旋转、拉伸到另一个空间。神经网络的每一层都是”线性变换 + 非线性激活”,理解矩阵乘法是理解网络结构的前提。
特征分解与 SVD。特征分解 找矩阵的”主轴”;SVD 是它的推广(任意矩阵可用)。PCA 就是协方差矩阵的特征分解——方差最大的方向是最大特征值对应的特征向量。推荐系统的矩阵分解也是同一个家族。
秩。矩阵的秩是”独立信息的维度”。LoRA 的核心假设就是”权重变化是低秩的”——一个秩的概念撑起了一个产业级的微调方案。
概率:不确定性的语言
条件概率与贝叶斯定理:
贝叶斯定理是”用证据更新信念”的公式。朴素贝叶斯是它的直接应用;更广地,所有”看到数据后修正判断”的场景都是贝叶斯思维。
期望与方差。期望是平均,方差是波动。偏差-方差权衡(决策树讲过的过拟合本质)就是这两个量的权衡:模型太简单偏差大(系统性错误),太复杂方差大(对数据波动过敏)。
常见分布。正态分布(中心极限定理让它的假设无处不在)、伯努利/二项(点击、转化)、长尾分布(EDA 篇的引用数)。看到数据先想”它像什么分布”,直接决定变换策略(log 变换对付长尾)。
最大似然。训练模型的统一视角:选参数让”观察到这批数据”的概率最大。交叉熵损失(分类)就是最大似然在伯努利假设下的推导结果——损失函数不是拍脑袋定的,是概率假设推出来的。
最优化:模型是怎么”学”的
梯度下降。损失函数是参数空间里的地形,梯度指向最陡上升方向,负梯度就是下山最快的路。。学习率 是步长:太大来回震荡甚至发散,太小走得慢(深度学习课程 03的排查清单都源于此)。
SGD 与 Adam。全量数据算梯度太贵,随机抽一小批(mini-batch)估计——噪声换来速度。Adam 给每个参数自适应的步长(动的少的参数走大步),是深度学习的默认优化器;但 LoRA 微调里你也看到学习率要重新调——优化器的选择和配置永远是任务相关的。
凸与非凸。线性回归的损失是凸的(一个谷底,闭式解可达);神经网络的损失高度非凸(无数局部最优和鞍点),但实践中 SGD 类方法就是能找到好解——为什么泛化还好,仍是理论研究的前沿,工程上接受”能跑就行 + 多种子验证”。
怎么学:边用边补
我的建议路线:不要先花三个月学数学再碰 ML。先跑通机器学习基础的流程,遇到概念回头补——这篇就是”回头补”的地图。想系统一点,线性代数看 3Blue1Brown 的《线性代数的本质》(几何直觉),概率看任何一本统计入门的前五章。
面试常问(这部分高频且全是手推)
Q:手推 PCA 的目标函数。 最大化投影后方差: s.t. ,拉格朗日求解得 ——主成分就是协方差矩阵的特征向量。
Q:为什么交叉熵损失等价于最大似然? 伯努利假设下样本的似然是 ,取负对数即 ,正是交叉熵。
Q:特征值和特征向量的直觉? 线性变换下方向不变的向量,特征值是该方向的缩放倍数。它们揭示变换的”主轴”——PCA 取的就是数据方差的主轴。
Q:Adam 和 SGD 的区别? SGD 所有参数共用一个学习率;Adam 维护梯度的一阶/二阶矩估计,给每个参数自适应步长,对稀疏梯度和不同尺度的参数更鲁棒。代价是内存多两份状态、泛化有时不如调好的 SGD+Momentum。
练习
- 用 NumPy 手算 PCA:协方差矩阵 → 特征分解 → 投影,与 sklearn 结果对照。
- 推导平方损失对线性回归参数的梯度,写出闭式解(正规方程)。
- 模拟梯度下降:在一个二次碗形函数上对比不同学习率的收敛轨迹。
- 用贝叶斯定理解一道经典题(疾病检测的假阳性悖论),写出完整计算。
💬 评论
这套方案在哪一步卡住了?也欢迎补充你的实现方式或踩坑经验。